可以看到,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:/:
这时,进入文件系统后,在#前面会有~提示,否则为/