分类: 嵌入式
2015-05-22 18:07:19
用busybox构建一个最小根文件系统
15年4月4月23月23日23日日15:11:30
(一)一个最小根文件系统包括:
(1)/dev/console
/dev/null
(2)init => busybox
(3)/etc/inittab
(4)配置文件制定的程序
(5)C库
(二)下面写步骤:
(1)解压配置busybox
先解压
“cd /work/system”
“tar xjf busybox-1.7.0.tar.bz2”
解压出来busybox-1.7.0文件夹,在busybox-1.7.0目录下执行“make menuconfig”命令即可进入配置界面。一般选择默认配置就行,我添加一个TAB补全功能:
Busybox Settings------>
Busybox Library Turning------>
[*]Tab completion
(2)编译安装busybox
编译前先修改Makefile
然后执行“make”命令编译busybox。
最后是安装,在交叉编译环境,千万不要直接make install,这样会破坏我们的操作系统。我们构建的最小根文件系统在/work/nfs_root/first_fs下面,安装的目的是在/work/nfs_root/first_fs文件夹下面生成一个工具集,包括了我们常用的工具。busybox是所有命令的集合体,在开发板上运行ls和busybox ls命令是一样的。
所以执行
“make CONFIG_PREFIX=/work/nfs_root/first_fs install”,完成后,就会在这个文件夹下面生成bin, sbin, usr, linuxrc->bin/busybox四个文件目录。
(2)安装C库
在开发板上面只需要加载器和动态库:
“mkdir -p /work/nfs_root/first_fs/lib”
“cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib”
“cp *.so* /work/nfs_root/first_fs/lib -d”
其中-d不要丢,-d表示如果本来是个链接文件,则拷贝时继续保持为链接文件,而不是真正的文件。
(3)构建etc目录
init进程根据/etc/inittab文件来创建其他子进程,etc目录下的内容取决与要运行的程序,本次只需要创建3个文件:etc/inittab, etc/init.d/rcS, etc/fstab。
1.创建 etc/inittab
2.创建etc/init.d/rcS文件
3.创建etc/fstab文件
(4)构建dev目录
使用mdev机制创建设备文件,需要修改etc/fstab来自动挂载文件系统,修改etc/init.d/rcS加入要自动运行的命令,我直接在上一步做好了,截图看上面的。
mdev是通过init进程来启动的,在使用mdev构造/dev之前,init进程至少要用到设备文件/dev/console /dev/null ,所以要先建立这两个设备文件:
在first_fs下建立一个dev文件夹,执行
“mkdir -p /work/nfs_root/first_fs/dev”
“cd /work/nfs_root/first_fs/dev”
“sudo mknod console c 5 1”
“sudo mknod null c 1 3”即可。
这两个设备结点的主次设备号,文件类型等信息,是通过查看本机的这两个设备结点来确定的“ls -l /dev/console”“ls -l /dev/null”来确定的。
(5)构建其他目录
“cd /work/nfs_root/first_fs”
“mkdir proc mnt tmp sys root”
通过上面几步,就构造出来一个最小的根文件系统,如果想要烧到开发板里面,需要将它制作为一个文件,称为映像文件。
(三)制作yaffs2文件系统映像文件
在/work/system/文件夹下面有一个韦老师做好的yaffs2制作工具,直接解压
“sudo tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 ”
解压后得到Development_util_ok文件夹,进入yaffs2后在utils文件里面执行make命令,生成mkyaffs2image工具,将它拷贝到/usr/local/bin目录下:
“sudo cp mkyaffs2image /usr/local/bin”
“sudo chmod +x /usr/local/bin/mkyaffs2image”
然后在/work/nfs_root目录下面制作first_fs.yaffs2映像文件:
“cd /work/nfs_root”
“mkyaffs2image first_fs first_fs.yaffs2”
制作成功,可以看到first_fs.yaffs2映像文件,可以烧到开发板上。
(四)一些注意事项
自己从网上下载的busybox1.7.0,当时用的4.4.3的交叉编译链,在执行过程中遇到一些问题,可以在网上搜索到答案,一般是添加头文件等内容。
最需要注意的是,当初自己做的时候,用的是韦老师提供的内核映像,而用自己配置的根文件系统,这个根文件系统是用4.4.3的交叉编译链做的,韦老师的内核使用3.4.5的交叉编译链做的,出现根文件系统就没法执行等问题。当时查看了很多资料,发现etc,dev等文件都没有错误,最后只能确定是busybox自动生成的linuxrc,bin等文件有错误,所以内核映像跟busybox一定要用同一个版本的交叉编译器,要不会出现很多意想不到的问题。