1.在home目录下创建一个build_rootfs 文件夹
mkdir /home/zhou/buil_rootfs cd /home/zhou/buil_rootfs
2.在build_rootfs目录里面创建一个rootfs文件夹,这将是我们最终要移植的文件夹
mkdir rootfs cd rootfs
3.创建以下几个linux必须的文件夹关于这几个文件夹的具体作用可以 参考这里mkdir {bin,sbin,etc,lib,dev,proc,usr,sys,tmp} cd usr mkdir {lib,sbin,bin}
二、移植Busybox
BusyBox是一个集成了一百多个最常用Linux命令和工具的软件。BusyBox包含了一些简单的工具,例如ls、cat 和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将BusyBox称为Linux工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令,也包含了Android系统的自带的shell。
BusyBox将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils,shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。2.解压并且进入目录
3.修改Makefile# tar jxvf busybox-1.20.2.tar.bz2 # cd busybox-1.20.2
将第164行修改为
注意这里我使用的交叉编译工具是arm-2009q3CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
将第190行修改为
ARCH = arm
4.配置busyboxBusyBox的配置程序和linux内核菜单配置方式简直一模一样。熟悉用make menuconfig方式配置linux内核的朋友很容易上手。
make menuconfig
BusyBox的配置程序和linux内核菜单配置方式简直一模一样。熟悉用makemenuconfig方式配置linux内核的朋友很容易上手。
#make menuconfig
选上以下几项:
BusyboxSettings --->
BuildOptions --->
[*] Build BusyBox as a static binary (no shared libs)这个选项是一定要选上,这样才能把BusyBox编译成静态链接ᄃ的可执行文件ᄃ,运行时才独立于其他函数库,否则需要其他库文件才能运行BusyBox。
BusyboxLibrary Tuning --->
[*] vi-style line editing commands选上VI风格的行编辑器命令。
[*] Fancy shell prompts
Linux ModuleUtilities --->
[] Simplifiedmodutils
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
[*] depmod取消选中Simplifiedmodutils,使用完整的模块工具命令:insmod、rmmod……
确保支持mdev(mdev是udev设备文件系统的精简版),确保以下几项被选中:
LinuxSystem Utilities ---> [*] mdev
[*] Support/etc/mdev.conf
[*] Supportsubdirs/symlinks
[*] Supportregular expressions substitutions when renamingdev
[*] Supportcommand execution at device addition/removal
[*] Supportloading of firmwares修改输出目录
5.编译 安装
BusyboxSettings --->
InstallationOptions ("make install" behavior) --->
将第二项修改为:
/home/zhou/build_rootfs/rootfs也就是我们的输出目录
Busybox Settings --->
General Configuration --->
[*] Don't use /usr
选中这一项
make -j4 make install
以下均在rootfs目录下完成
三、添加必要的文件
1.拷贝交叉编译器里的动态链接库到 lib目录
2.对 lib目录下的动态链接库进行裁减cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -rdf
3.创建几个脚本文件arm-none-linux-gnueabi-strip lib/*so*
etc/inittab 文件是启动流程文件,它的内容为:
::sysinit:/etc/init.d/rcS ::askfirst:/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::restart:/sbin/init
etc/init.d/rcS文件的内容为:
#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin mount -a #mount-a会读取etc/fstab完成文件系统挂载 echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s /bin/hostname -F /etc/sysconfig/HOSTNAME ifconfig eth0 192.168.0.80
etc/fstab文件的内容为:
四、测试文件系统# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0
到此我们的文件系统已经配置完成;可以使用两种方式来测试文件系统
将文件系统挂载到nfs服务器
sudo vim /etc/exports //添加 /home/zhou/build_rootfs/rootfs *(rw,sync,no_root_squash,no_subtree_check) //重启nfs服务器
测试将/home/zhou/build_rootfs/rootfs目录挂载在/mnt下:
mount 192.168.1.2:/home/zhou/build_rootfs/rootfs /mnt
这样可以在/mnt目录下看到文件系统中的内容