关闭

嵌入式 BusyBox制作根文件系统

617人阅读 评论(0) 收藏 举报
分类:

一、环境
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
  [*]    Be _extra_ quiet onboot      
  [*]    Support running init from within an initrd (not initramfs)
   [*] poweroff, halt, andreboot
   [*] mesg

  Shells >

  Choose your default shell (ash) >
   (我开始就因为在这里没选上,结果就造成启动不起来 
  [*] ash

添加历史记录、自动补全、删除字符的功能:
   Shells --->
---   Bourne ShellOptions                                          
   []   Hide message on interactiveshellstartup                  
   []   Standaloneshell                                           
  [*]   command lineediting                                       
  [*]    vi-style line editingcommands                           
     (15)    historysize                                         
  [*]    historysaving                                           
  [*]    tabcompletion                                           
  [*]      usernamecompletion                                   
   []    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

    LinuxModule Utilities  --->
    [*]insmod                
    [*]rmmod      
    [*]lsmod       
   [*]   lsmod pretty output for2.6.x Linuxkernels       
    [*]modprobe      
   [*]   Multiple optionsparsing             
                    ---   Options common to multiplemodutils       
   [*]   Support tainted modulechecking with newkernels      
    []   Support version 2.2.x to2.4.x Linuxkernels   //此项一定不要选!!!     
   [*]   Support version 2.6.x Linuxkernels                                      

   Networking Utilities >
    [*]ifconfig  
    [*]ping 

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


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

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

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

    #exportPATH=$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    defaults0 0
none           /dev/pts       devpts mode="0622"      0 0
tmpfs          /dev/shm       tmpfs  defaults       0 0

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1046193次
    • 积分:18267
    • 等级:
    • 排名:第521名
    • 原创:741篇
    • 转载:523篇
    • 译文:0篇
    • 评论:105条
    最新评论