linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)

发布者:HeavenlyMelody最新更新时间:2022-05-28 来源: eefocus关键字:linux  S3C2410  移植  根文件系统 手机看文章 扫描二维码
随时随地手机看文章

内核可以跑起来,接下来就是移植根文件系统了.

我们使用BusyBox-1.10.1来创建根文件系统.下载地址为:http://www.busybox.net/downloads/

1.设置BusyBox

(1)解压

#tar -xvjf BusyBox-1.10.1.tar.bz2

#cd BusyBox-1.10.1

(2)修改Makefile,设置CROSS_COMPILE

ARCH  ?= arm

CROSS_COMPILE ?= /home/GEC2410/toolchain/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-

(根据自己的交叉编译环境路径)

(3)配置BusyBox

运行make menuconfig进行配置,在BusyBox Settings-Build Options里选择静态链接,这样BusyBox就可以直接运行不需要额外的运行库了.

Build Options:

    [*] Build BusyBox as a static binary (no shared libs)    │ │  

    [ ] Force NOMMU build                                                │ │  

    [ ] Build shared libbusybox                                          │ │  

    [*] Build with Large File Support (for accessing files > 2 GB) 

确保Init Utilities的如下选项被选择,以支持/etc/inittab配置文件和在真实串口中运行命令行.

Init Utilities—>

    [*] init

    [*] Supporting reading an inittab file

    [*] Supporting running commands with controlling-tty

其他选项使用默认即可.

(4)编译

[matt@localhost busybox-1.10.1]$ make

[matt@localhost busybox-1.10.1]$ make install

这时我们可以看到在Busybox-1.10.1下有_install这个目录,里面包含了应用程序的目录:bin、sbin、usr和脚本linuxrc.

2.创建根文件系统

为了方面起见,我们创建一个目录用来放置根文件系统的文件和目录.

(1)创建rootfs其他目录

[matt@localhost busybox-1.10.1]$ cd ..

[matt@localhost GEC2410]$ mkdir rootfs

[matt@localhost GEC2410]$ cd rootfs

[matt@localhost rootfs]$ mkdir bin dev etc home lib mnt proc root sbin sys tmp usr

[matt@localhost rootfs]$ mkdir mnt/etc

[matt@localhost rootfs]$ mkdir usr/bin usr/lib usr/sbin

[matt@localhost rootfs]$ mkdir proc/net/dev

(没有该目录,kernel会报cannot open /proc/net/dev的错误)

(2)将_install内容复制到rootfs

[matt@localhost rootfs]$ cd ..

[matt@localhost GEC2410]$ cp -r busybox-1.10.1/_install/* rootfs/

(3)在dev目录下创建设备节点

mknod ram0 b 1 0

mknod -m 660 console c 5 1

mknod -m 660 null c 1 3

mknod -m 660 zero c 1 3

mknod -m 666 ttySAC0 c 204 64

(4)编写etc/inittab脚本

# This is run first except when booting in single-user mode

::sysinit:/etc/init.d/rcS

# Start an "askfirst" shell on the console (whatever that may be)

::askfirst:-/bin/sh

# Stuff to do when restarting the init process

::restart:/sbin/init

# Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

注:使用::askfirst:-/bin/sh系统会询问输入Enter来启动shell,如果想直接启动shell,可以使用ttySAC0::respawn: /bin/sh


(5)编写etc/init.d/rcS

#!/bin/sh

#以读写模式重新安装根文件系统(需要/etc/fstab)

mount -n -o remount,rw /

#启动网络接口

/sbin/ifconfig eth0 192.168.1.5

(6)编写ect/fstab

proc /proc proc defaults 0 0

sysfs /sys sysfs defaults 0 0

none /dev/pts devpts mod=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

3.生成文件系统

在内核中我们已经给nand分好区了:

0x000000000000-0x00000000FFFFF : "u-boot"        1M                                                                                   

0x000000100000-0x0000003FFFFFF : "kernel-linux-2.6.24"               3M                                                               

0x000000400000-0x000002BFFFFFF : "rootfs"                      40M                                                                     

0x000002C00000-0x000004000000 : "userdata"    20M

我们的文件系统就放到rootfs中.

(1)cramfs文件系统

CramFS(Compressed Rom File System)是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取.

使用mkcramfs这个工具可以将上面的rootfs目录转换成一个cramfs文件,然后烧写到之前定义的rootfs分区(0x400000)就可以了.

[matt@localhost GEC2410]$ ./mkcramfs rootfs rootfs.cramfs

设置u-boot启动参数

GEC2410#setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200

GEC2410#setenv bootcmd nand read 30008000 100000 200000/;bootm

GEC2410#saveenv

烧写根文件系统到开发板上:

GEC2410#tftp 30008000 rootfs.cramfs

GEC2410#nand erase 400000 100000

GEC2410#nand write 30008000 400000 100000

GEC2410#reset

重启可以看到cramfs文件系统已经被加载了,可以输入ls,ping命令测试了.

U-Boot 1.1.6 (May 14 2010 - 14:20:01)


DRAM:  64 MB

Flash: 512 kB

NAND:  nand flash :   64 MB

In:    serial

Out:   serial

Err:   serial

Hit any key to stop autoboot:  0


NAND read: device 0 offset 1048576, size 2097152 ...

 2097152 bytes read: OK

## Booting image at 30008000 ...

   Image Name:   linux-2.6.24

   Created:      2010-05-25   7:22:51 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    1572120 Bytes =  1.5 MB

   Load Address: 30008000

   Entry Point:  30008040

   Verifying Checksum ... OK

   XIP Kernel Image ... OK


Starting kernel ...


Uncompressing Linux.............................................................

.......................................... done, booting the kernel.

Linux version 2.6.24.4 (matt@localhost) (gcc version 3.4.5) #58 Tue May 25 15:20

:22 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177

Machine: SMDK2410

......

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 136K

init started: BusyBox v1.10.1 (2010-05-26 13:19:35 CST)

starting pid 775, tty '': '/etc/init.d/rcS'

eth0: using half-duplex 10Base-T (RJ-45)


Please press Enter to activate this console.

starting pid 778, tty '': '-/bin/sh'

#

# ls

bin      etc      lib      mnt      root     sys      usr

dev      home     linuxrc  proc     sbin     tmp


(2)ramdisk文件系统

ramdisk存在于RAM中并且功能犹如块设备.由于ramdisk上的内容将因系统的重启而丢失,所以ramdisk通常会从经压缩的磁盘文件系统(例如ext2)加载其内容,这就是所谓的经压缩的ramdisk映像.

首先创建一个空的文件系统映像

[matt@localhost GEC2410]$ mkdir initrd

[matt@localhost GEC2410]$ dd if=/dev/zero of=initrd.img bs=1k count=8192

8192+0 records in

8192+0 records out

这就创建了一个8192KB的文件系统映像.

内核配置中ramdisk的默认大小是4096KB,可以根据需要修改成8192KB或者创建4096KB的initrd.img.

(8192) Device Drivers-Block Drivers-Deafult RAM disk size(kByte)

接着对它建立文件系统并且安装它:

[matt@localhost GEC2410]$ mke2fs -F -v -m0 initrd.img

mke2fs 1.41.4 (27-Jan-2009)

fs_types for mke2fs.conf resolution: 'ext2', 'small'

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

2048 inodes, 8192 blocks

0 blocks (0.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=8388608

1 block group

8192 blocks per group, 8192 fragments per group

2048 inodes per group


Writing inode tables: done                           

Writing superblocks and filesystem accounting information: done


[matt@localhost GEC2410]$ sudo mount -o loop initrd.img initrd

将根文件系统文件(rootfs目录下内容)复制到initrd目录

[matt@localhost GEC2410]$ sudo cp -av rootfs/* initrd

[matt@localhost GEC2410]$ sudo umount initrd

用gzip压缩生成最终的ramdisk文件

[matt@localhost GEC2410]$ gzip -9 < initrd.img > ramdisk

ramdisk实际大小为875K,压缩了一半多.


设置u-boot启动参数

GEC2410#setenv bootargs initrd=0x31000000,0x200000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0,115200

GEC2410#setenv bootcmd nand read 31000000 400000 200000/;nand read 30008000 100000 200000/;bootm

GEC2410#saveenv

烧写根文件系统到开发板上:

GEC2410#tftp 30008000 ramdisk

GEC2410#nand erase 400000 200000

GEC2410#nand write 30008000 400000 200000

GEC2410#reset


U-Boot 1.1.6 (May 14 2010 - 14:20:01)


DRAM:  64 MB

Flash: 512 kB

NAND:  nand flash :   64 MB

In:    serial

Out:   serial

Err:   serial

Hit any key to stop autoboot:  0


NAND read: device 0 offset 4194304, size 2097152 ...

 2097152 bytes read: OK


NAND read: device 0 offset 1048576, size 2097152 ...

 2097152 bytes read: OK

## Booting image at 30008000 ...

   Image Name:   linux-2.6.24

   Created:      2010-06-07   8:21:02 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    1572100 Bytes =  1.5 MB

   Load Address: 30008000

   Entry Point:  30008040

   Verifying Checksum ... OK

   XIP Kernel Image ... OK


Starting kernel ...


Uncompressing Linux.............................................................

.......................................... done, booting the kernel.

Linux version 2.6.24.4 (matt@localhost) (gcc version 3.4.5) #61 Mon Jun 7 16:18:

03 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177

Machine: SMDK2410

......

checking if image is initramfs...it isn't (no cpio magic); looks like an initrd

Freeing initrd memory: 2048K

.....

RAMDISK: Compressed image found at block 0

VFS: Mounted root (ext2 filesystem).

Freeing init memory: 136K

init started: BusyBox v1.10.1 (2010-05-26 13:19:35 CST)

starting pid 774, tty '': '/etc/init.d/rcS'

mount: cannot read /proc/mounts: No such file or directory

eth0: using half-duplex 10Base-T (RJ-45)


Please press Enter to activate this console.

starting pid 777, tty '/dev/ttySAC0': ' /bin/sh'

#


(3) jffs2文件系统

jffs2是在闪存上使用非常广泛的读/写文件系统, 在嵌入式系统中被普遍的应用.

我们使用mkfs.jffs2工具来制作jffs2文件系统, 该命令给时如下:

# 使用 mkfs.jffs2 工具,制作根文件系统映像

# -d rootfs :根文件系统的内容目录

# -e 0x4000:FLASH的eraseblock大小

# -p :以0xff填充文件尾部的空间对齐eraseblock

# -o rootfs_jffs2.img :输出映像文件名

创建jffs2文件系统映像, 我们设置大小为20M(1400000)

[matt@localhost GEC2410]$ sudo ~/bin/mkfs.jffs2 -e 0x4000 -s 0x200 -d rootfs -o rootfs_jffs2.img -p 1400000 -n


设置u-boot启动参数

[1] [2]
关键字:linux  S3C2410  移植  根文件系统 引用地址:linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)

上一篇:linux 2.6.24.4及根文件系统在S3C2410上的移植(使用4.3.2编译器支持eabi)(基于GEC2410)
下一篇:linux 2.6.24.4在S3C2410上的移植(内核配置)(基于GEC2410)

推荐阅读最新更新时间:2024-11-17 11:51

1_5.4.3_文件系统_构建文件系统之busybox_P
构建根文件系统之前,先来编译一下busybox。 查看readme,看一下有没有讲怎么编译,里面有一些关于busybox的介绍,比如什么是busybox。 怎么使用busybox。 没有看到讲解怎么编译的,查看一下install文件,可以看到,编译busybox的方法和编译Linux kernel相似,也是先配置然后make编译,需要注意的是,直接执行make install,默认是会安装到PC机上的,我们需要额外指定一下安装的地址。 也就是执行#后面的那个make CONFIG_PREFIX=/path/from/root install,安装到我们指定的地方。 在busybox目录下执行make menuc
[单片机]
1_5.4.3_<font color='red'>根</font><font color='red'>文件系统</font>_构建<font color='red'>根</font><font color='red'>文件系统</font>之busybox_P
联想:今年超过36款平台将提供Linux支持
近日在科索沃召开的 DebConf22 大会上,负责联想 Linux 相关计划的马克·皮尔逊(Mark Pearson)从个人角度出发,谈公司在过去几年所获得的升级,以及在 2022 年其平台对 Linux 的支持进度。 联想的 Linux 工程师在过去一年时间里面临着多项挑战,包括面板刷新问题、WiFi更改、英特尔网络驱动问题、AMD 功耗问题、NVIDIA 对能源认证的驱动问题,以及供应链短缺问题等等。不过,好消息是通过和 OEM 硬件供应商建立更紧密的合作关系从而增加对 Linux 的支持和兼容度。 近期围绕着新款联想系统的问题是由于禁用了第三方 UEFI CA 认证,因此无法默认启动到 Linux 系统。它是由Mi
[嵌入式]
基于ARM微处理器和Linux的无线气象数据通
自动气象站数据采集器一般基于单片机或PC/104总线控制器设计,具有与PC兼容性好、功耗低、体积紧凑等特点,然而如何设计出功能强大,网络传输功能强的自动气象站数据采集器,满足现代气象检测的要求,是一个值得研究的课题。 文中基于ARM微处理器和Linux操作系统平台,借助前端无线传感器网络的数据输入,利用嵌入式Qt的开发优势并设计数据通信格式,完成无线气象数据通信系统的设计,实现了数据的可靠传输。为天气预报、科学研究、气象灾害预警等提供实时的气象观测数据。 1 无线气象数据通信系统的基本组成 如图1所示,无线气象数据通信系统主要由无线传感器网络节点、协调器、数据通信器(数据通信器以S3C2440AL为核心)、远程服务器
[单片机]
基于ARM微处理器和<font color='red'>Linux</font>的无线气象数据通
Linux操作系统发展简史
Linux操作系统发展简史(转载) 在70年代,Unix体系的源程序大多是可以任意流传的。互联网的基础协议TCP/IP就是产生于那个年代。在那个时期,人们在创作各自的"程序作品"中享受着从事科学探索、创新活动所特有的那种激情和成就感。那时的程序员,如同作家一样,急于"发表"自己的程序作品,并不专注于保守"机密",以换取钱财。   1979年,AT&T宣布了Unix的商业化计划,随之出现了各种二进制的商业Unix版本。于是就兴起了基于二进制机读代码的"版权产业"(Copyright Industry),使软件业成为一种版权专有式的产业,围绕程序开发的那种创新活动被局限在某些骨干企业的小圈子里,源码程序视为核心"商业机密"。这种做法,
[嵌入式]
linux驱动学习(1)-环境及hello world程序
驱动开发使用的是tq2440的开发板,linux内核版本为linux-2.6.30.4。 首先解压linux源码,拷贝配置文件cp -f config_EmbedSky_W35_256MB .config (否则会出现version magic '2.6.30.4 mod_unload modversions ARMv5 ' should be '2.6.30'的版本错误) Make distclean Make oldconfig Make 之后就可以编译hello驱动文件了 $ make modules make -C /opt/EmbedSky/linux-2.6.30.4 M=/opt/E
[单片机]
<font color='red'>linux</font>驱动学习(1)-环境及hello world程序
OK6410A 开发板 (八) 100 linux-5.11 OK6410A 内核空间虚拟内存布局
物理内存 物理内存或大或小,(256M或512M或1G或2G或4G) , 这里取 PHY_MAX 在这里 https://blog.csdn.net/u011011827/article/details/117413163 中的 arm32 要不要配置 CONFIG_HIGHMEM 讲述了 arm物理内存的不同 情况下 需要的配置 我们如果要配置 高端内存(虚拟内存概念) // 但是一个zone 中有成员 zone_start_pfn , 这是 物理地址的概念,表示了一个zone的开始 // 所以 高端内存 属于 zone ,而 zone 又是 与 物理地址有关,所以感觉,这个 高端内存 像是 物理内存概念
[单片机]
U-Boot在基于S3C4480开发板上的移植
1 引言       Bootloader代码是器件复位后进入操作系统前执行的一段代码,通过该代码初始化处理器各寄存器和片上外设,建立存储器映射图以及初始化堆栈,从而为操作系统提供基本的运行环境。由于Bootloader与CPU和开发板配置有关,不可能有通用的Bootloader,因此需要根据具体情况进行移植。嵌入式系统U-boot是当前流行、功能强大的Bootloader。U-Boot用于多种嵌入式CPU的Bootloader程序,U-Boot支持ARM、PowerPC等多种架构的处理器,也支持Linux、NetBSD和Vx—Works等操作系统。这里采用U—Boot的版本为U-boot-1.1.6。 2 U-Boot目录结
[嵌入式]
【GD32 MCU 移植教程】5、GD32E230 系列移植到 GD32F330 系列
1.前言 GD32E230 系列是 GD 的 Cortex_M23 系列产品,GD32F330 系列是 GD 的 Cortex_M4 系列产品,这两个系列的兼容度非常高。客户会有从 GD32E230 系列移植到 GD32F330 系列的需求,本文档专门针对既有的 GD32E230 代码如何移植到 GD32F330 做一个详细的介绍; 2.硬件差异 GD32E230 系列的封装类型有:TSSOP20、LGA20、QFN28、QFN32、LQFP32、LQFP48,GD32F330系列的封装类型有:TSSOP20、QFN28、QFN32、LQFP48、LQFP64,两个系列相同封装的芯片引脚是兼容的。 注意: 1. TSSOP20
[单片机]
【GD32 MCU <font color='red'>移植</font>教程】5、GD32E230 系列<font color='red'>移植</font>到 GD32F330 系列

推荐帖子

今天下午14:00 有奖直播:恩智浦基于i.MX RT106F的人脸识别技术解决方案
今天下午14:00有奖直播:恩智浦基于i.MXRT106F的人脸识别技术解决方案点击进入直播直播时间:05月20日(周四)下午14:00-15:30直播主题:恩智浦基于i.MXRT106F的人脸识别技术解决方案直播介绍:近年来,人工智能、大数据、云计算等技术发展迅速,生物识别技术也因此受益。作为生物识别领域最重要的技术之一的人脸识别技术已经被应用到了日常生活的很多场景当中。随着人脸识别技术在实际应用中不断成熟,其市场需求不断增加,人脸识别的
EEWORLD社区 RF/无线
绝对前无古人:一个三级管实现数字音量调节,而且线性度好
1电路原理:绝对前无古人:一个三级管实现数字音量调节,而且线性度好输入信号经过三极管处理的信号:(PWM=50%)经过Lowpassfilter后的信号:(可见,幅度衰减到1/2)回复:绝对前无古人:一个三级管实现数字音量调节,而且线性度好尝试一下哈!!!!回复:绝对前无古人:一个三级管实现数字音量调节,而且线性度好就不知道输出的保真度怎么样了????回复:绝对前无古人:一个三级管实现数字音量调节,而且线性度好很巧妙的设计!!!谢谢楼主!!!回复:绝对
呱呱 模拟电子
快充诱骗器应该怎么测评?
几天前看到论坛发布了一款测评,是一款沁恒CH224EVT评估板【https://bbs.eeworld.com.cn/elecplay/content/218】。我对此详细了解了一下,这款芯片可以做为快充诱骗器,虽然支持的协议不多,但是看评估板介绍,支持的电压不少。在了解的过程中我有这么一个疑问,假如我把电源适配器诱骗到了12V或15V甚至20V电压,那我这个负载肯定不能直接连接手机,那我应该接一个什么样的负载?如果直接接电池肯定也是不行的,所以这种评估板应该怎么进行测评
wangerxian 电源技术
ST NUCLEO-WB09KE-开箱
#开箱十分感谢EEWorld和意法半导体公司对本次活动的赞助。板子非常的小巧精致,很漂亮,就是后面的引脚是暴露的,有点担心会误触导致板子出现问题。虽然只是一个小纸盒,但是也是在EEWorld论坛申请到的第一块板子,再次感谢论坛对本次活动的支持。放上开发板的靓照:Onion-2:#NUCLEO验证平台介绍由于是第一次使用NUCLEO开发平台,所以去对这个STM推出的开发板平台做了一些了解这是STM32为了帮助验证芯片功能专门推出的开发板系列,STM32Nucleo开发板
rtyu789 RF/无线
转:TI转投嵌入领域:移动芯片成寡头游戏
  面对快速增长的智能手机芯片领域,德州仪器为何要抽身而退?  德仪中国区相关人士对笔者称,去年11月,德仪就宣布将削减成本,把对无线业务的投资集中于嵌入式市场,因为嵌入式市场具有更持久的发展潜力。  败走移动领域  2007年以前,德仪还是包括手机在内的无线产品芯片的第一大供应商,其在智能手机芯片市场上的份额一直稳居市场前列。  调研机构StrategyAnalytics公布的2012年上半年全球智能手机芯片市场报告显示,目前,高通占据了48%的营收市场份额
wangfuchong TI技术论坛
华为核心网开发部 内部推荐,此次全部是华为名额!
工作地点:北京(面试地:北京)招聘岗位:软件工程师、高级软件工程师职责描述1)负责通信产品软件模块设计、开发工作,完成相关的设计文档、代码编写。2)参与软件模块的部分测试工作,完成测试用例的设计、执行与测试报告的输出。3)研发数据通信核心专利技术,提交专利报告并转化为新产品。4)负责新产品、新特性的软件分析、架构工作。5)经过系统培养,从事现有通讯协议的性能优化工作,并转化为专利技术。6)经过系统培养,从事项目管理工作。岗位要求1、本科以上学历,计算机软件、通信、电子
tvee 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved