编译BusyBox制作文系统

    技术2022-05-11  22

    【原】编译BusyBox制作文系统

     

    一、环境Ubuntu 8.04arm-linux-gcc 3.4.5busybox-1.1.3

    二、busybox制作文件系统  1、下载busybox1.1.3(http://www.busybox.net/)并解压。  2、进入解压后的目录,配置Busybox

      #make menuconfig

      Busybox Settings >

      General Configuration >  [*] Support for devfs

      Init Utilities >  [*] init  [*] Support reading an inittab file /* 支持init读取/etc/inittab配置文件,一定要选上 */   [*]     Be _extra_ quiet on boot          [*]     Support running init from within an initrd (not initramfs)   [*] poweroff, halt, and reboot   [*] mesg

      Shells >

      Choose your default shell (ash) >  /* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件  * 看看我们前头的linuxrc脚本的头一句:  * #!/bin/sh 是由bin/sh来解释执行的  */ (我开始就因为在这里没选上,结果就造成启动不起来  )  [*] ash

    添加历史记录、自动补全、删除字符的功能:   Shells --->---   Bourne Shell Options                                              [ ]   Hide message on interactive shell startup                      [ ]   Standalone shell                                               [*]   command line editing                                           [*]     vi-style line editing commands                                  (15)    history size                                             [*]     history saving                                               [*]     tab completion                                               [*]       username completion                                       [ ]     Fancy shell prompts

      Coreutils >  [*] cp  [*] cat  [*] ls  [*] mkdir  [*] echo (basic SuSv3 version taking no options)  [*] env  [*] mv  [*] pwd  [*] rm  [*] touch

      Editors >  [*] vi

      Linux System Utilities >  [*] mount  [*] umount  [*] Support loopback mounts  [*] Support for the old /etc/mtab file

        Linux Module Utilities  --->    [*] insmod                     [*] rmmod           [*] lsmod            [*]   lsmod pretty output for 2.6.x Linux kernels            [*] modprobe           [*]   Multiple options parsing                                   ---   Options common to multiple modutils            [*]   Support tainted module checking with new kernels           [ ]   Support version 2.2.x to 2.4.x Linux kernels    //此项一定不要选!!!          [*]   Support version 2.6.x Linux kernels                                       

        Networking Utilities >    [*] ifconfig       [*] ping  

         Archival Utilities  --->      [*] tar     [*]     Enable archive creation (NEW)      [*]     Enable -j option to handle .tar.bz2 files    

        注:可根据需要自已选择命令。

        3、如果文件系统在2410上运行的话,不需要修改源码,如果在2440上运行,需要将busybox-1.1.3/init/init.c中的两处  close(0);  close(1);  close(2);注释掉:  /* Clean up */  //close(0);  //close(1);  //close(2);

     /* Close whatever files are open, and reset the console. */ //close(0); //close(1); //close(2);   4、编译并安装Busybox (1.1.3的Makefile里没有设置ARCH和CROSS内容,需要亲自在指令里写上,我是这么做的)

         #export PATH=$PATH:usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/bin     #make TARGET_ARCH=arm CROSS="arm-linux-"     #make install

        5、建立根文件系统结构     #cd ~     #mkdir rootfs     #cd rootfs     #mkdir bin dev etc lib proc sbin tmp usr var mnt     #chmod 1777 tmp     #mkdir usr/bin usr/lib usr/sbin     #mkdir var/lib var/lock var/log var/run var/tmp     #mkdir etc/init.d     #chmod 1777 var/tmp       把 busybox1.1.3/_install/目录下的所有文件copy过来覆盖rootfs文件夹里的空文件夹。

        lib里面还要拷入一些库文件,下面仅给出一些常用的库     #cd rootfs/lib     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/ld* ./     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc-2.3.6.so ./     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc.so.6 ./     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libm* ./     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libcrypt* ./       当然为了方便,可以将交叉编译的库全放进去,但是这样会增加文件系统的体积。     #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/* ./  (注意-d,保持库文件的链接关系)

        6、创建etc/init.d/rcS#!/bin/shecho "running /etc/init.d/rcS"echo "mount the /proc file system"/bin/mount -t proc proc /proc

    echo "mount tmpfs filesystem to /tmp"/bin/mount -t tmpfs none /tmp

    echo "mount ramfs filesystem to /var"/bin/mount -t ramfs none /var

         然后修改权限:chmod 775 rcS

        7、创建etc/inittab# This is run first except when bootingconsole::sysinit:/etc/init.d/rcS# Start an "askfirst" shell on the console#::askfirst:-/bin/bashconsole::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r    注:需要将内核源码drivers/char/tty_io.c中所有的noctty = 1改为noctty = 0

        8、再创建etc/fstabnone            /proc           proc    defaults 0 0none            /dev/pts        devpts  mode="0622"       0 0tmpfs           /dev/shm        tmpfs   defaults        0 0

        至此,根文件系统制作完毕。


    最新回复(0)