根文件的制作
1. 准备根文件系统
创建工作目录:$mkdir my_rootfs
创建根文件系统的目录:$cd ./my_rootfs
$mkdir bin dev etc home lib mnt proc sbin sys tmp var usr
(12个目录)
$mkdir etc/init.d
2. 创建设备文件
复制当前系统的设备文件:$cp -dpR /dev ./my_rootfs/dev
如果使用 linux 2.6.x.x 内核,应该有节点 console、null 。如果在 /rmy_ootfs/dev
目录下没有这些节点,则转到 /my_rootfs/dev/目录来创建:
$mknod console c 5 1
$mknod null c 1 3
缺少这些设备,会在启动 shell 时出现提示“Warning: unable to open an initial
console. Kernel panic- not syncing: Attempted to kill init!”
的错误。
3. 准备目录系统启动所要的文件:linuxrc、rcS、inittab、fstab
四个文件。
linuxrc 文件(位于 "my_rootfs/")的内容如下:
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -f -t cramfs -o remount, ro /dev/bon/2 /
/bin/mount -t ramfs ramfs /var
/bin/mkdir -p /var/tmp
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/bin/mkdir -p /var/lock
/bin/mkdir -p /var/empty
#/bin/mount -t usbdevfs none /proc/bus/usb exec /sbin/init
rcS
文件位于my_rootfs/etc/init.d/)的内容如下:
#!/bin/sh
/bin/mount -a
这连个文件生成后,应该使其具有执行的权限,用chmod 来修改
inittab 文件位于 my_rootfs/etc
的内容如下:
#This is run first except when booting
::sysinit: /etcinit.d/rcS
#Start an "askfirst" shell on the console
#::askfirst: ~/bin/bash
::askfirst:~/bin/sh
#Stuff to do when restarting the init process
::restart: /sbin/init
# Stuff to do before rebooting
:: ctrlaltdel: /sbin/reboot
:: shutdown: /bin/umount -a -r
fstab 文件位于 my_rootfs/etc
的内容如下所示:
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
4. 将编译好的 BusyBox 的_install 目录下的三个文件夹用 tar
命令打包复制到 my_rootfs 目录,解压后删除打包文件。
5. 将一些常用的 lib 文件复制到 /rootfs/lib/ 目录下,例如:
ld-2.5.so、libc-2.5.so等文件以及其符号链接。注意这些lib 文件指的是交叉编译工具链的 lib 文件,即位于
/arm-linux-gcc/lib 下的lib
文件。在复制时应该注意采用打包后解包方式复制,以保证符号链接的正确性和完整性。
6. 生成根文件系统映像文件 *.img
(1) 制作cramfs:$mkfs.cramfs ./my_rootfs cramfs.img
(2) 制作yaffs: $mkyaffsimage ./my_rootfs yaffs.img
$mkyaffs2image ./my_rootfs yaffs2.img
(3) 制作jffs2: $mkfs.jffs2 -d ./my_rootfs -o jffs2.img
7. 测试生成的根文件系统 *.img
(1) 测试 cramfs:$mount -o loop -t cramfs cramfs.img /mnt
$ls /mnt
(2) 测试 yaffs: $mount -t yaffs /dev/mtdblock3 /mnt
$ ls /mnt
(3) 测试 jffs: $mount -t jffs2 jffs2.img /mnt -o loop
$ls /mnt
移植过程
1、下载yaffs的补丁,然后解压打补丁,则/fs/下就有了一个yaffs2文件夹,而且目录下的Makefile和Kconfig也有了对yaffs2的支持。
2、linux内核下:make
menuconfig,选上对yaffs2的支持。
制作文件系统,首先需要用busybox编译出文件系统所需要的应用程序,然后再做文件系统。
3、首先下载一个busybox的源码,到网页http://www.busybox.net/downloads/,就可以下载了,这里用
busybox-1.13.0.tar.bz2源码包为例。这里使用的交叉编译器还是4.3.3的。
注意:由于3.4.5(及以前的)和4.3.3的交叉编译器不同,所以,当您决定了用哪个编译器编译内核
之后,对应的文件系统也要使用该编译器,文件系统中的所有程序也要使用该编译器编译。
4、修改并配置BusyBox
解压busybox,使用命令#tar xvfjbusybox-1.13.0.tar.bz2-C
/opt/EmbedSky/。
然后进到源码中,修改Makefile文件,把164行修改为:
CROSS_COMPILE=arm-linux-把189行修改为:
ARCH=arm
然后输入:#make
menuconfig,进入配置单。
编译并安装BusyBox
5、然后退出配置单,然后编译出busybox即可,使用命令:#make;makeinstall,编译结束后会在busybox-1.13.0目录下面生成一个名为“_install”的目录,该目录下面情况如下图所示:
“bin”目录、“sbin”目录、“usr”目录和“linuxrc”
完成busybox的编译之后,就可以进行文件系统的构建了。
6、复制busybox编译出的“_install”的文件,然后新建“dev”、“etc”、“home”、“lib”、“mnt”、“opt”、“proc”、“root”、“sddisk”、“sys”、“tmp”、“udisk”、“var”和“web”目录,同时在原有的“usr”目录下面新建一个“lib”和“share”目录。并添加相应的内容。
文件系统的框架就基本搞好了,然后使用制作yaffs文件系统的软件,把它做出yaffs文件系统格式的镜像就可以使用了。使用如下命令制作:
#cd/opt/EmbedSky
#mkyaffsimage_2
root_2.6.30.4 root_2.6.30.4.bin
注意:上面的操作命令之间的空格键;制作针对64MB的NandFlash的文件系统使用:mkyaffsimage_2软
件;制作针对128MB以上的NandFlash的文件系统使用:mkyaffs2image的软件;该软件在交叉编译器里
面已经提供了,安装交叉编译器的同时也就安装了它,在“/usr/local/sbin/”目录下。
然后把制作好的镜像root_2.6.30.4.bin复制出来,烧写到开发板中,就可以运行了。