用busybox构建一个最小根文件系统

来源:互联网 发布:知乎和豆瓣 人群定位 编辑:程序博客网 时间:2024/06/05 17:58
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”

tarxjf busybox-1.7.0.tar.bz2”

解压出来busybox-1.7.0文件夹,在busybox-1.7.0目录下执行“makemenuconfig”命令即可进入配置界面。一般选择默认配置就行,我添加一个TAB补全功能:

BusyboxSettings------>

BusyboxLibrary Turning------>

[*]Tabcompletion


(2)编译安装busybox

编译前先修改Makefile

然后执行“make”命令编译busybox


最后是安装,在交叉编译环境,千万不要直接makeinstall,这样会破坏我们的操作系统。我们构建的最小根文件系统在/work/nfs_root/first_fs下面,安装的目的是在/work/nfs_root/first_fs文件夹下面生成一个工具集,包括了我们常用的工具。busybox是所有命令的集合体,在开发板上运行lsbusyboxls命令是一样的。

所以执行

makeCONFIG_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”

sudomknod console c 5 1”

sudomknod null c 1 3”即可。


这两个设备结点的主次设备号,文件类型等信息,是通过查看本机的这两个设备结点来确定的“ls-l /dev/console”“ls -l /dev/null”来确定的。


(5)构建其他目录

cd/work/nfs_root/first_fs”

mkdirproc mnt tmp sys root”


通过上面几步,就构造出来一个最小的根文件系统,如果想要烧到开发板里面,需要将它制作为一个文件,称为映像文件。


(三)制作yaffs2文件系统映像文件

/work/system/文件夹下面有一个韦老师做好的yaffs2制作工具,直接解压

sudotar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 ”

解压后得到Development_util_ok文件夹,进入yaffs2后在utils文件里面执行make命令,生成mkyaffs2image工具,将它拷贝到/usr/local/bin目录下:

sudocp mkyaffs2image /usr/local/bin”

sudochmod +x /usr/local/bin/mkyaffs2image”

然后在/work/nfs_root目录下面制作first_fs.yaffs2映像文件:

cd/work/nfs_root”

mkyaffs2imagefirst_fs first_fs.yaffs2”

制作成功,可以看到first_fs.yaffs2映像文件,可以烧到开发板上。


(四)一些注意事项

自己从网上下载的busybox1.7.0,当时用的4.4.3的交叉编译链,在执行过程中遇到一些问题,可以在网上搜索到答案,一般是添加头文件等内容。


最需要注意的是,当初自己做的时候,用的是韦老师提供的内核映像,而用自己配置的根文件系统,这个根文件系统是用4.4.3的交叉编译链做的,韦老师的内核使用3.4.5的交叉编译链做的,出现根文件系统就没法执行等问题。当时查看了很多资料,发现etcdev等文件都没有错误,最后只能确定是busybox自动生成的linuxrcbin等文件有错误,所以内核映像跟busybox一定要用同一个版本的交叉编译器,要不会出现很多意想不到的问题。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(224) | 评论(0) | 转发(0) |
0

上一篇:重新移植一个linux内核

下一篇:first_drv 笔记

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
  • linux设备驱动归纳总结...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击