本次制作根文件系统用到BusyBox、Dropbear、交叉工具链、mkimage
制作根文件系统的步骤分为如下4步:1、编译BusyBox2、编译Dropbear3、工具链库与应用的设置4、目录的创建与设置5、 制作ramdisk镜像文件6、 生成uramdisk.image.gz我的交叉编译器名字是arm-none-linux-gnueabi-
一、编译BusyBox
1、下载BusyBox源码 >git clone git://git.xilinx.com/apps/busybox.git >cd busybox2、使用默认配置并初始化BusyBox >make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig这条命令是使用默认的配置来生成.config文件。如果想对配置做一些修改,可以再运行make menuconfig 命令来手动更改配置。编译错误:我在make install 的时候出现ext2_fs.h文件找不到的错误,解决的方法就是运行make menuconfig命令手动将配置中的mkfs_ext2选项去掉。3、make install 命令安装根文件系统到指定目录。 >make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install此时就会在busybox目录下生成一个_install目录。(因为我没用通过make menuconfig修改安装目录路径,所以默认是在busybox目录下生成一个_install目录。如果想更改路径,在配置菜单的BusyBox Settings->Installation Options->BusyBox installation prefix设置安装路径。)编译错误:编译中如果出现一个rlimit_fsize未定义的错误,解决的方法是在include/libbb.h文件中加入#include
二、编译Dropbear
Dropbear是一个为我们提供SSH服务的工具。这里使用0.53.1版本1、下载源码 >wget http://matt.ucc.asn.au/dropbear/release/dropbear-0.53.1.tar.gz >tar xfvz dropbear-0.53.1.tar.gz >cd dropbear-0.53.12、配置 >./configure --prefix=/home/busybox/_install --host=arm-none-linux-gnueabi --disable-zlib CC=arm-none-linux-gnueabi-gcc LDFLAGS=”-Wl,--gc-sections” CFLAGS=”-ffunction- sections-fdata-sections --Os”其中/home/busybox/_install需要根据实际busybox编译后的存放路径来决定。3、编译 >make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip编译错误:双引号中的东西不能少,陆佳华那本书上这一句少了dropbearconvert,导致编译时出现dropbearconvert没找到的错误。4、make install,并为根文件系统的scp创建一个软连接。 >sudo make install >cd /home/busybox/_install/usr/bin/ >ln –s ../../sbin/dropbear ./scp
三、工具链动态与应用的设置
1、进入_install目录并建立lib目录 >cd /home/busybox/_install >mkdir lib2、复制交叉编译器提供的库文件,为你实际交叉编译器安装的路径 >cp/arm-none-linux-gnueabi/libc/lib/* lib –r3、剥离库中的调试标志 >arm-none-linux-gnueabi-strip lib/*4、复制交叉编译器提供的工具集 >cp/arm-none-linux-gnueabi/libc/sbin/* sbin/ -r >cp/arm-none-linux-gnueabi/libc/usr/bin/* usr/bin/ -r
四、目录的创建与配置
这一步是要创建文件系统下其余的目录,以及在启动系统时所需的配置文件,所有操作都在_install目录下1、创建目录 >mkdir dev etc etc/dropbear etc/init.d mnt opot proc root sys tmp var var/log var/www2、创建配置文件etc/fstab,内容为: LABEL=// tmpfsdefaults 00 none/dev/ptsdevptsgid=5,mode=62000 none/procproc defaults00 none/syssysfsdefaults00 none/tmptmpfsdefaults002、创建配置文件etc/inittab,内容为:::sysinit:/etc/init.d/rcS#/bin/ash#Start an askfirst shell on the serial portsttyPS0::respawn:-/bin/ash#What to do when restarting the init process::restart:/sbin/init#What to do before rebooting::shutdown:/bin/umount -a -r3、创建配置文件etc/passwd,内容为::root:$1 $qC.CEbjC $SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh4、创建配置文件etc/init.d/rcS,内容为:#!/bin/shecho “Starting rcS …”echo “++ Mounting filesystem”mount –t proc none /procmount –t sysfs none /sysmount –t tmpfs none /tmpecho “++ Setting up mdev”echo /sbin/mdev > /proc/sys/kernel/hotplugmdev –smkdir –p /dev/ptsmkdir –p /dev/i2cmount –t devpts devpts /dev/ptsecho “++ Starting telnet daemon”telnetd –l /bin/shecho “++ Starting http daemon”httpd –h /var/wwwecho “++ Starting ftp daemon”tcpsvd 0:21 ftpd ftpd –w /&echo “++ Starting dropbear (ssh) daemon”dropbearecho “rcS Complete”5、为rcS赋予root的执行权限 >chmod 755 etc/init.d/rcS >sudo chown root:root etc/init.d/rcS
五、制作ramdisk镜像文件
1、创建镜像文件 >cd ~ >dd if=/dev/zero of=ramdisk.img bs=1024 count=8192 >mke2fs –F ramdisk.img –L “ramdisk” –b 1024 –m 0 >tune2fs ramdisk.img –i 0 >chmod 777 ramdisk.img2、复制_install内容到这个镜像中 >mkdir ramdisk >sudo mount –o loop ramdisk.img ramdisk/ >sudo cp –R /home/busybox/_install/* ramdisk >sudo umount ramdisk/3、对镜像进行压缩,生成ramdisk.img.gz >gzip ramdisk.img
六、生成uramdisk.image.gz
使用mkimage命令为ramdisk.img.gz添加一些头部信息,生成uramdisk.image.gz,否则uboot将提示ramdisk格式错误。1、将uboot的tools目录下的mkimage拷贝到交叉编译器的bin目录中(相当于添加到环境变量中)2、使用如下命令生成uramdisk.image.gz >mkimage -n 'uboot ext2 ramdisk' -A arm -O linux -T ramdisk -C gzip -d ramdisk.img.gz uramdisk.image.gz