移植Busybox与构建根文件系统

本文转自:http://hi.baidu.com/snjdju/blog/item/0fdf9eaf21a65fd07dd92ae5.html

0.简介
本文旨在为以LOONGSON-1B开发板为平台,为移植busybox、构建根文件系统提供技术文档。


相关阅读:Linux文件系统使用udhcpc动态获取ip配置 http://www.linuxidc.com/Linux/2011-10/44885.htm

开发环境:

    系统环境:龙芯1B开发板(mips32指令集)、Linux3.0.0内核、Busybox1.19.2

    编译环境:Ubuntu10.04 ,gcc-3.4.6-2f

1. Busybox下载和配置:
1.1 下载Busybox
BusyBox各版本下载见 http://www.linuxidc.com/Linux/2011-08/40704.htm,下载Busybox-1.19.2.tar.bz2工具包。

1.2配置、编译Busybox
busybox是一个集成了一百多个最常用linux命令和工具的软件,它甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。Busybox的完全可定制性,提供了非常灵活,宜于扩展的结构。

Busybox的配置方法类似于linux内核的配置。下载解压Busybox-1.19.2.tar.gz工具包后,进入busybox-1.19.2目录,运行“make menuconfig”,根据需要选择需使用的模块,保存退出后会在本地生成一个.config文件,它指定busybox在编译的过程中需要包含哪些功能。

执行make menuconfig,弹出配置窗口如下:

  

进入Busybox Setings--->选项,General Configuration --->选项按默认配置即可。

进入Build Options--->选项:

这里可选择静态编译或动态编译busybox,可根据需要任选一种编译方式进行编译。

(说明:动态编译的busybox在构建文件系统时需要加入一些必须的动态库,而静态编译的busybox不依赖动态库便可执行,构建文件系统时可省略拷贝动态库的步骤。)

(1)静态编译:

    选择[*]Build Busybox as a static binary (no shared libs)

    进入()Cross Compiler prefix选项,修改本地交叉工具链的路径。

(2)动态编译:

    选空[]Build Busybox as a static binary (no shared libs)

    选择[*]Build shared libbusybox

    进入()Cross Compiler prefix选项,修改本地交叉工具链的路径。

返回上一层进入Installation Options(“make install”behavior)--->选项,配置链接类型与安装路径,这里使用默认配置:

 

返回上一层进入Busybox Library Turing--->选项

    选择[*]vi-style line editing commands(NEW)

            [*]Fancy shell prompts(NEW)

 

返回最顶层进入Init Utilities--->选项(这里使用默认配置,如图)

    选择[*]init

           [*]Suport reading an inittab file

           [*]Run commands with leading dash with controlling tty

       该项表示在真实的串口设备中运行命令行,不选该项启动时会出现“-sh:can’t access tty;job control turned off”的错误

           [*]Support running init from within an initrd (not initramfs)

        不选此选项将不会生成linuxrc文件

 


 

下面是需要编译进busybox的功能选项,它们都是一些linux基本命令选项,需要哪些命令就编译进去,一般用默认配置。

 

配置完成后,执行make&&make install进行编译与安装。安装完成后,在Busybox1.19.2目录下生成子目录_inistall,里面的内容:

 

其中可执行文件busybox在bin目录下,其他的都是指向它的符号链接。

3 使用busybox建立文件系统
3.1建立系统根目录
#mkdir /root/rootfs

#cd /root/rootfs

#mkdir dev home proc tmp var etc lib mnt sys usr etc/rc.d

3.2建立系统配置文件
3.2.1.etc/inittab文件

说明:inittab 文件是init进程的配置文件,系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。

#cd /root/ rootfs

#vi etc/inittab

添加如下内容

::sysinit:/etc/rc.d/rc.sysinit    //指定系统启动后首先执行的文件

#Example of how to put a getty on a serial line (for a terminal)

ttyS0::respawn:-/bin/sh    //启动后进入shell环境

tty1::respawn:-/bin/sh

#Stuff to do when restarting the init process

::restart:/sbin/init

#Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot    //捕捉ctrl+alt+del键,重启文件系统

::shutdown:/bin/umount -a –r    //当关机时卸载所有文件系统

::shutdown:/sbin/swapoff -a


3.2.2.etc/rc.d/rc.sysinit文件

说明:这是一个脚本文件,可以在里面添加想自动执行的命令。以下命令配置环境变量、主机名、dev目录环境、挂接/etc/fstab指定的文件系统、建立设备节点与设置IP。

vi etc/rc.d/rc.sysinit

添加如下内容

#!/bin/sh

#Set binary path

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

#Set hostname

/bin/hostname  "Loongson-gz"

#Config dev enviornment

mount –t tmpfs –o size=64k,mode=0755 tmpfs /dev

mkdir –p /dev/pts

mount –t devpts devpts /dev/pts

# mount all filesystem defined in "/etc/fstab"

echo "#mount all......."

/bin/mount –a

echo "# starting mdev...."

echo /sbin/mdev > /proc/sys/kernel/hotplug

/sbin/mdev –s

#Set ip

ifconfig eth0 192.168.3.110 up

ifconfig lo 127.0.0.1

(说明:eth0的ip地址可根据需要自行配置)

 

3.2.3.etc/fstab文件

说明:执行mount –a时挂接/etc/fstab指定的文件系统。

vi etc/fstab

添加如下内容

none    /tmp    ramfs   defaults 0 0

none    /var    ramfs   defaults 0 0

sysfs   /sys    sysfs   defaults 0 0

proc    /proc   proc    defaults 0 0

 

3.2.4.etc/profile文件

说明:inittab中执行了这样一个语句“::respawn:-/bin/sh”。

启动/bin/sh程序时会启动ash的配置信息,而它就是/etc/profile,sh会把profile的所有配置全部都运行一遍,因此用户可以把自己的启动程序放在这里。

#vi etc/profile

添加如下内容

#!/bin/sh

#/etc/profile:system-wide .profile file for the Bourne shells

echo "Processing /etc/profile......"

# Set search library path

export LD_LIBRARY_PATH=/lib:/usr/lib

# Set user path

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

#Set PS1

USER = "LOONGSON"

#LOGNAME=$USER

HOSTNAME=’/bin/hostname’

PS1='[$USER@\h:\w]\$'

echo "Done!"

 

3.2.5.修改系统配置文件权限

#chmod 755 etc/*

#chmod 755 etc/rc.d/rc.sysinit

 

3.2.6.拷贝Busybox文件

将安装好的Busybox文件拷贝到/root/rootfs/目录:

#cp ./Busybox1.19.2/_install/* /root/rootfs -rf

 

3.2.7.拷贝库文件(配置Busybox若选择静态编译则省略此步骤)

在x86系统中,动态编译Busybox制作文件系统,需将下列几个必须库从工具链gcc-3.4.6-2f/mipsel-linux/lib拷贝到lib目录。

ld.so.1, ld-2.3.6.so, libcrypt.so.1, libc.so.6, libdl.so.2, libgcc_s.so.1, libm.so.6, libpthread.so.0, libstdc++.so.6

#cp /opt/GCC/gcc-3.4.6-2f/mipsel-linux/lib/库文件名 /root/rootfs/lib/

为了减少根文件系统的库大小,使用交叉编译工具即gcc-3.4.6-2f的strip工具来处理库文件,把二进制文件中的包含的符号表和调试信息删除掉,可有效减少库文件大小。

例:

#cd /opt/GCC/gcc-3.4.6-2f/bin

#./mipsel-linux-strip /root/rootfs/lib/*.so

至此文件系统制作完成。


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-10/44886p2.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值