techdoc centre
本站搜索 用户名: 密码:
   HOME  TECHDOC  WEB  SDK  NSDT  TOPIC  BIZDOC   LOGIN
  发布地区 Global 发布类别 TOPIC platform busybox
  编译BusyBox制作文系统
于 2017-10-10 编辑: Eric 查看: 1442 次   Article Url Print this page

一、环境
Ubuntu 8.04
arm-linux-gcc 3.4.5
busybox-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/sh
echo "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 booting
console::sysinit:/etc/init.d/rcS
# Start an "askfirst" shell on the console
#::askfirst:-/bin/bash
console::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/fstab
none            /proc           proc    defaults 0 0
none            /dev/pts        devpts  mode="0622"       0 0
tmpfs           /dev/shm        tmpfs   defaults        0 0

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

网址: 相关网址


相关文章:


   Search:

   

   Categories:

 Open All Close


Copyright techdoc.netsoftlab.ca powered by netsoft lab. 2007-2012  
Friend Websites:   netsoftlab.ca   cnstar.ca   CS lessions