感谢支持
我们一直在努力

基于嵌入式Linux平台的最小文件系统的制作

工作平台:FL2440
交叉编译环境:arm-linux-gcc 3.4.1
busybox版本:1.9.1
1) 制作文件系统总目录:


mkdir my_rootfs


2) 编译&安装busybox


解压从LinuxIDC.com的1号服务器下载的busybox


本文要用到的文件下载在Linux公社(LinuxIDC.com)的1号服务器。


FTP地址:ftp://www.linuxidc.com


用户名:www.linuxidc.com


密码:www.muu.cc


在2011年LinuxIDC.com\2月\基于嵌入式Linux平台的最小文件系统的制作\


具体下载方法见http://www.linuxidc.net/thread-1186-1-1.html 与 http://www.linuxidc.net/thread-1189-1-1.html


确定交叉编译环境包,配置busybox选项,然后


make


make install


在busybox根目录会生成_install的文件夹,里面存放有bin,sbin文件夹以及


linuxrc文件;


3) 将_install目录下的busybox修改为777属性;


chmod 777 busybox


4) 将bin,sbin目录全复制到my_rootfs目录,注意不要丢失了文件属性:


cp -a ***/buxybox-1.9.2/_install/bin  ***/myrootfs


cp -a ***/buxybox-1.9.2/_install/sbin ***/myrootfs


5) 进入myrootfs目录,新建其他文件系统目录:


mkdir dev etc lib mnt proc sys tmp usr var


6) 添加busybox使用到的lib库文件:


进入busybox根目录,使用如下命令查询它使用到的lib库:


arm-linux-readelf -d busybox


打印如下:


[root@lqm busybox-1.9.2]# arm-linux-readelf -d busybox


 


Dynamic segment at offset 0xc32cc contains 22 entries:


  Tag        Type                         Name/Value


 0x00000001 (NEEDED)                     Shared library:


 


[libcrypt.so.1]


 0x00000001 (NEEDED)                     Shared library: [libm.so.6]


 0x00000001 (NEEDED)                     Shared library: [libc.so.6]


 0x0000000c (INIT)                       0xd2b8


 0x0000000d (FINI)                       0xad848


 0x00000004 (HASH)                       0x8128


 0x00000005 (STRTAB)                     0xab94


 0x00000006 (SYMTAB)                     0x8cf4


 0x0000000a (STRSZ)                      4807 (bytes)


 0x0000000b (SYMENT)                     16 (bytes)


 0x00000015 (DEBUG)                      0x0


 0x00000003 (PLTGOT)                     0xd33b8


 0x00000002 (PLTRELSZ)                   3000 (bytes)


 0x00000014 (PLTREL)                     REL


 0x00000017 (JMPREL)                     0xc700


 0x00000011 (REL)                        0xc300


 0x00000012 (RELSZ)                      1024 (bytes)


 0x00000013 (RELENT)                     8 (bytes)


 0x6ffffffe (VERNEED)                    0xc230


 0x6fffffff (VERNEEDNUM)                 3


 0x6ffffff0 (VERSYM)                     0xbe5c


 0x00000000 (NULL)                       0x0


[root@lqm busybox-1.9.2]#


可以看到,busybox用到了libcrypt.so.1,libm.so.6以及libc.so.6三个库文件。另外还有一个很重要的库文件是必不可少的,那就是鼎鼎大名的ld-linux.so.2。ld-linux.so.2是linux的动态装载器(dynamic loader)。大多数的linux应用程序都是用这个装载器来装载的,除非在编译的过程中使用了-static参数。所以这个装载器在运行时的时候是必需的。它帮助去定位和装载该应用所需要的动态库。这些库都放在交叉编译环境的lib目录下,注意一定要用编译busybox使用的交叉编译环境所提供的库!


cd /usr/local/arm/3.4.1/arm-linux/lib


cp libcrypt.so.1 libm.so.6 libc.so.6 ld-linux.so.2 ***/my_rootfs/lib


注意,因为这些文件都是符号链接文件,不要使用cp -a复制!否则复制过来的只是个快捷方式而已。


7) 在etc目录下建立init.d目录,在init.d目录下建立rcS文件:


cd /etc


mkdir init.d


vi rcS


添加如下内容:


#!/bin/sh


/bin/mount -a       #mount all stuff from /etc/fstab


/sbin/ifconfig eth0 192.168.1.15 up #开机自动设置eth0的IP地址


/sbin/ifconfig eth1 192.168.1.16 up #开机自动设置eth1的IP地址


注意修改rcS的权限,否则无法执行rcS:


chmod 777 rcS


 


8) 在/etc目录下建立fstab文件,该文件会被rcS脚本中的mount -a指令调用:


cd /etc


vi fstab


编辑如下内容:


none           /proc           proc  defaults      0 0


这三条指令表示分别将proc,devpts,tmpfs文件系统挂载到相应的目录,第二列为所挂载的目录,第三列为要挂载的文件系统,第四列为挂载所使用的属性。


 


9) 在文件系统根目录下建立linuxrc文件:


cd ***/my_rootfs


vi linuxrc


编辑如下内容:


#!/bin/sh


/bin/mount -t proc proc /proc


/bin/mount -t sysfs sysfs /sys


/sbin/mdev -s #????????


 


exec /sbin/init


这里将proc和sysfs文件系统分别挂载到proc和sys目录。


proc文件系统是一个伪文件系统,它只存在内存当中,而 不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于 系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。


sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到。这是被设计用来处理那些以前驻留在 /proc/ 的设备和驱动程序指定的选件以及用来处理那些以前由 devfs 提供支持的动态加载设备。注意一定要修改linuxrc文件的属性为777,否则会提示failed to execute /linuxrc的错误:


chmod 777 linuxrc


 


10) 在/etc下建立mdev.conf文件,内容为空即可。如果不建立这个文件,将会提示下面的错误:


mdev: /etc/mdev.conf: No such file or directory


使用下面命令创建即可:


touch mdev.conf


 


11) 在/dev下建立console和null两个字符设备文件:


mknod console c 5 1


mknod null c 1 3


 


c表示创建没有缓冲的字符特殊文件,后面的两个数字分别表示主设备号和次设备号。


 


12)使用mkyaffs2image工具制作文件系统映像文件:


./mkyaffs2image my_rootfs rootfs.yaffs2


 


补:在/etc下新建passwd文件:


cd /etc


vi passwd


编辑如下内容:


root::0:0:root:/:/bin/sh


bin:*:1:1:bin:/bin:


daemon:*:2:2:daemon:/sbin:


ftp::95:95::/ftp:


nobody:*:99:99:Nobody:/:


这时,进入文件系统后,在#前面会有~提示,否则为/

赞(0) 打赏
转载请注明出处:服务器评测 » 基于嵌入式Linux平台的最小文件系统的制作
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏