红联Linux门户
Linux帮助

制作自己的根文件系统

发布时间:2011-11-03 08:59:29来源:红联作者:梧桐凤影@
想自己制作一个根文件系统,首先要确定自己linux主机下的环境变量arm-linux-gcc已成功搭建,不然在进行busybox make时出现没有arm-linux-gcc的错误。下面理理自己定制根文件系统的步骤:
1.创建空的目录树,作为根文件系统的基础
#cd /opt/armlinux
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib mnt proc sbin sys tmp usr
#mkdir mnt/etc
#tree
2.安装busybox,并配置及编译
我是从网上下的busybox-1.6.1版,解压后,#make menuconfig,进入到配置界面,静态链接时,其中较为典型的配置有:Build Options-->Build BusyBox as a static binary;Applets-->Init Utilities-->init;Applets-->Shell-->ash,若想有其他一些配置,方法类似。在编译时修改busybox的makefile文件:“ARCH=arm;CROSS_COMPILE=arm-linux-”,#make时可能出现一些问题,解决的办法是:在makefile中去掉连接选项“-WL,--gc-sections”,并在applets/applets.c源文件中将20-25行改为注释,然后:
#make install
#cd _install
#ls
bin linuxrc sbin usr
#cp -a /opt/armlinux/rootfs
#ls /opt/armlinux/rootfs
3.初始化脚本
#ls -l /opt/armlinux/rootfs/linuxrc
实际上linuxrc文件是指向busybox的一个符号链接,需要将其删除,并编译我们自己需要的linuxrc文件:先删掉linuxrc,然后
#touch linuxrc
#vi linuxrc
#!/bin/ash
#挂载/etc为ramfs,并从/mnt/etc(rootfs下)下拷贝文件到/etc目录当中
#echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp -a /mnt/etc/* /etc
echo"re-create the /etc/mtab entries"
#re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /
echo "execute /sbin/init"
exec /sbin/init

#vi /mnt/etc/rcS
#!/bin/ash
/bin/mount-a
. /etc/profile
/sbin/ifconfig eth0 192.168.1.134 up
/sbin/inetd

#vi /mnt/etc/fstab
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0

vi /mnt/etc/profile
#!bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib
export PATH LD_LIBRARY_PATH

总之,在初始化系统时需要的脚本主要包括/linuxrc、/mnt/etc/rcS、/mnt/etc/fstab和/mnt/etc/profile等,可以参考相关资料。

4.模块和设备文件
在编译内核时除了编译内核映像zImage之外,还编译一些可加载模块,此时需要将他们复制到根文件系统中来:(如)
#cp -a /opt/armlinux/linux-2.6.22.1/lib/modules /opt/armlinux/rootfs/lib

到此为止,根文件系统就基本建立完毕,busybox工具、必要的库/模块以及设备文件和初始化脚本是构建根文件系统时需要的重点考虑内容。除此之外,其他一些需要的应用可以自己以后自行添加,如移植Qtopia Core、MiniGUI等,这些都可以加入到根文件系统中
5.选择合适的Flash根文件系统
我建立的是一个Cramfs根文件系统映像,首先从http://sourceforge.net/projects/cramfs/下载cramfs-1.1.tar.gz,然后解压并通过执行make来编译,生成mkcramfs和cramfsck工具,如下:
#tar xzvf cramfs-1.1.tar.gz
#cd cramfs-1.1
#make
#tree

下面的命令将生成名为myrootfs.cramfs的镜像文件
#cd /opt/armllinux
#mkcramfs rootfs rootfs.cramfs
可以通过mount来检查添加的根文件系统目录是否正确
#mount -o loop rootfs.cramfs /mnt
#cd /mnt
#tree -L 2-d
(mkcramfs是用来创建cramfs文件系统的,而cramfsck是用来进行cramfs文件系统的释放及检查)


此时就可以通过tftp或DNW,将做好的rootfs.cramfs以及以前做好的内核映像zImage下载到开发板的相应位置
文章评论

共有 9 条评论

  1. lp901103 于 2012-12-09 18:30:57发表:

    很好的方法,学习了

  2. freeny 于 2012-12-09 15:03:51发表:

    学习了,感谢分享,支持

  3. gky2009514 于 2012-12-07 12:59:49发表:

    新手完成任务,求下书籍~

  4. liru125504 于 2012-04-12 15:54:22发表:

    呵呵 还是没看懂啊

  5. 云飞1992 于 2012-04-10 19:40:25发表:

    学习了

  6. honglianqxw123 于 2012-03-20 08:24:00发表:

    顶,学习了。

  7. ovhay 于 2012-01-19 10:20:52发表:

    ding

  8. lanlanlangzi 于 2011-11-03 14:29:09发表:

    {:3_113:}

  9. Growth兆 于 2011-11-03 09:24:22发表:

    感谢梧桐凤影@的分享,本贴加入到论坛顶置的Linux应用贴中