Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293146
  • 博文数量: 76
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-20 20:38
文章分类
文章存档

2016年(20)

2015年(56)

分类: 嵌入式

2015-05-22 18:07:19

P { margin-bottom: 0.21cm; }

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是所有命令的集合体,在开发板上运行lsbusybox ls命令是一样的。

所以执行

make CONFIG_PREFIX=/work/nfs_root/first_fs install”,完成后,就会在这个文件夹下面生成binsbinusrlinuxrc->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的交叉编译链做的,出现根文件系统就没法执行等问题。当时查看了很多资料,发现etcdev等文件都没有错误,最后只能确定是busybox自动生成的linuxrcbin等文件有错误,所以内核映像跟busybox一定要用同一个版本的交叉编译器,要不会出现很多意想不到的问题。

阅读(2969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~