您的位置:首页 > 其它

Busybox 配置、编译与文件系统构建

2014-09-11 19:59 513 查看
宿主机:Fedora13

目标机:tiny6140

交叉编译器:arm-linux-gcc-4.5.1

交叉编译器路径:/opt/FriendlyARM/toolschain/4.5.1/bin

busybox版本:1.22.1

一 制作根文件系统

1. 配置、编译 Busybox

Busybox 的配置方法类似于 linux 内核的配置。下载解压 Busybox-1.22.1tar.gz 工具包后,进

入 busybox-1.22.1 目录,运行“make menuconfig”

,根据需要选择需使用的模块,保存退出后

会在本地生成一个.config 文件,它指定 busybox 在编译的过程中需要包含哪些功能。

2. 安装图形化配置的依赖工具 Ncurses

安装 Ncurses 有两种方式:有互联网时使用 apt-get 命令来安装(默认方式)

;无互联网时

使用源码包来安装。



a)使用 apt-get 命令安装(有互联网)

#apt-get install libncurses5-dev

3 . 图形化配置

Busybox 文件存放目录:Loongson/share 龙芯服务器上 或者直接在网上下载最新版本:http://www.busybox.net/

提示:调整终端窗口到合适大小或者最大化。

#tar zxf busybox-1.22.2-default.tar.gz

#cd busybox-1.22.1-default

#make menuconfig

配置选择为:

Busybox Setings--->

General Configuration ---> (默认)

Build Options--->

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

[*] Build shared libbusybox

(/opt/gcc-3.4.6-2f/bin/mipsel-linux-)Cross Compiler prefix (需要编辑)

Installation Options("make install"behavior)---> (默认)

Busybox Library Turning--->

[*] 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

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

Miscellaneous Utilities-->

[ ] inoice

[ ] ubiattach

[ ] ubidetach

[ ] ubimkvol

[ ] ubirmvol

[ ] ubirsvol

[ ] ubiupdatevol

图例说明:

(1)进入主界面 Busybox Configuration,如下图:



(2)

在主界面,

选择并进入 Busybox Setings--->选项,

可以看到 General Configuration --->

选项,按默认配置即可,如下图:



按<Exit>,返回 Busybox Settings 菜单。

(3)在 Busybox Settings 菜单,选择并进入 Build Options--->选项:



这里可选择静态编译或动态编译 busybox,

可根据需要任选一种编译方式进行编译。

(说明:

动态编译的 busybox 在构建文件系统时需要加入一些必须的动态库,而静态编译的 busybox 不

依赖动态库便可执行,构建文件系统时可省略拷贝动态库的步骤。

)

a)静态编译:

选择 Build Busybox as a static binary (no shared libs)选项,如下图:



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

“/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-”

,如下图:

154



b)动态编译:

选空 Build Busybox as a static binary (no shared libs)选项,如下图:



选择 Build shared libbusybox 选项,如下图:



进入 Cross Compiler prefix 选项,修改本地交叉工具链的路径,如下图:



(4)按<Exit>,返回 Busybox Settings 菜单,选择 Installation Options("make

install"behavior)--->选项,如下图:



(5)进入 Installation Options("make install"behavior)--->选项,配置链接类型与安装路径,

这里使用默认配置,如下图:



(6)按<Exit>,返回 Busybox Settings 菜单,选择并进入 Busybox Library Turing--->选项,如下图



(7)选择 vi-style line editing commands(NEW)选项,如下图



(8)选上 Fancy shell prompts(NEW)选项,如下图:



(9)按<Exit>,一直返回主界面选择并进入 Init Utilities--->选项,如下图(这里使用默认

配置)

:


选择如下:

[*]init

[*]Suport reading an inittab file

[*]Run commands with leading dash with controlling tty

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



(10)按<Exit>,返回主界面,下面是需要编译进 busybox 的功能选项,它们都是一些 linux

基本命令选项,需要哪些命令就编译进去,一般用默认的就可以了,如下图:

[*]Run commands with leading dash with controlling tty

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



(10)按<Exit>,返回主界面,下面是需要编译进 busybox 的功能选项,它们都是一些 linux

基本命令选项,需要哪些命令就编译进去,一般用默认的就可以了,如下图:



11)以上几个步骤基本上是配置完成了,但为了解决某些系统的 inoice 出错,需要进行

如下配置:

选空 Miscellaneous Utilities-->中的[]inoice 选项,如下图:



(12)但为了解决某些系统的 ubi 出错,需要进行如下配置:

选空 Miscellaneous Utilities-->中的[]ubi*选项,如下图:



(13)按<Exit>,一直返回到保存配置,按< Yes >保存,如下图:



图形化配置完成

4 编译 Busybox

配置完成后,编译 Busybox:

#make clean all

安装到目录:

#make install

在 Busybox1.19.2 目录下生成子目录_inistall,里面的内容:



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

二 . 构建根文件系统

在busybox-1.22.1里面

1 建立系统根目录

#mkdir /root/rootfs

#cd /root/rootfs

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

2 建立系统配置文件



注意:以下的配置文件不是在 Ubuntu 操作系统的根目录下创建的。

(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 seria line(for a terminal)

ttyS2::respawn:-/bin/sh

#no login(启动后进入 shell 环境)

#::respawn:/sbin/getty -L ttyS2 115200 vt100 #use login

#tty::respawn:-/bin/sh

#Stuff to do when restarting the init porcess

::restart:/sbin/init

#Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a –r

::shutdown:/sbin/swapoff –a

//捕捉 ctrl+alt+del 键,重启文件系统

//当关机时卸载所有文件系统

(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

#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

#Set ip

#ifconfig eth0 192.168.3.160up

ifconfig lo 127.0.0.1



#Set hostname

/bin/hostname "Loongson-gz"

export LAGNAME=root

echo "#Starting mdev....."

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

/sbin/mdev -s

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

(3)etc/fstab 文件

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

#vi etc/fstab

添加如下内容

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

tmpfs /mnt tmpfs defaults 0 0

tmpfs /root tmpfs defaults 0 0

tmpfs /var/log tmpfs defaults 0 0

(4)etc/profile 文件

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



启动/bin/sh 程序时会启动 ash 的配置信息,

而它就是/etc/profile, 会把 profile 的所有配置全

sh

部都运行一遍,因此用户可以把自己的启动程序放在这里。

#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:/qte/lib

#set user path

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

#Set PS1

export PS1='[\u@\h:\w]\$'

alias ll="ls -l"

echo "Done!"

(5)修改系统配置文件权限

#chmod 755 etc/*

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

5.2.3 拷贝库文件

(6)拷贝 Busybox 文件

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

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

提示:配置 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/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/库文件名 /root/rootfs/lib/

注:

如果制作完成,

运行出现错误,

则将目录 Loongson_1B/Tools/Lib/下的 ld.so.1 和 ld-2.3.6.so

拷贝到/root/rootfs/lib 下替代从 arm-none-linux-gnueabi 拷贝过去的库文件。

可以使用脚本,快速地拷贝所需的基本动态库:

#cd /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib

#vi cplib.sh

添加内容:

for file in libcrypt libc libdl libgcc_s libm libpthread libstdc++

do

cp -d $file.so.[*0-9] /root/rootfs/lib

done

cp -d ld*.so* /root/rootfs/lib

保存退出。

运行 cplib.sh SHELL 脚本:

#source cplib.sh

为了减少根文件系统的库大小,使用交叉编译工具即 gcc-3.4.6-2f 的 strip 工具来处理库文

件,把二进制文件中的包含的符号表和调试信息删除掉,可有效减少库文件大小。

例:

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

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



至此根文件系统(目录/root/rootfs)制作完成

(7)在/dev 下建立设备节点:Console null

mknod dev/console c 5 1

mknod dev/null c 1 3

(e)将编译busybox生成的/bin和/sbin下的工具拷贝到myroot下的/bin和/sbin下

三 . 制作文件系统镜像

1 镜像文件制作工具

(1) cramfs-1.1.tar.gz (制作 cramfs 文件系统工具

(2) mtd-utils-1.0.0.tar.gz (制作 jffs2 文件系统工具)

(3) yaffs2-d43e901.tar.gz (制作 yaffs2 文件系统工具)

(4) zlib-1.2.3.tar.gz (依赖工具

2 镜像文件制作工具本机安装

mkfs.cramfs 为 Ubuntu 自带的制作 cramfs 格式文件系统的工具。

在主机上编译安装镜像文件制作工具,无须交叉编译。可以使用 apt-get 安装,也可使用

源码安装,下面使用源码包安装。

(1)安装依赖工具 zlib:

#tar zxf zlib-1.2.3.tar.gz

#cd zlib-1.2.3

#./configure && make && make install

(2)制作 cramfs 文件系统工具 mkcramfs:

#tar zxf cramfs-1.1.tar.gz

#cd cramfs-1.1

#make

当前目录生成 mkcramfs,可以拷贝到/usr/bin:

#cp mkcramfs /usr/bin

(3)制作 jffs2 文件系统工具 mkfs.jffs2

#tar zxf mtd-utils-1.0.0.tar.gz

#cd mtd-utils-1.0.0

#make

当前目录下生成 mkfs.jffs2,可以拷贝到/usr/bin:

#cp mkfs.jffs2 /usr/bin

(4)制作 yaffs2 文件系统工具 mkyaffs2image

#tar zxf yaffs2-d43e901.tar.gz

#cd yaffs2-d43e901/utils

#make

在当前目录 yaffs2-d43e901/utils 下生成 mkyaffs2image,可以拷贝到/usr/bin:

#cp mkyaffs2image /usr/bin

3 制作文件系统镜像文件

(1)Cramfs:

#mkcramfs /root/rootfs rootfs-cramfs.img

#chmod 777 rootfs-cramfs.img

//修改文件系统权限,防止出现无法烧写的情况

或者使用自带的工具:

#mkfs.cramfs /root/rootfs rootfs-cramfs.img

#chmod 777 rootfs-cramfs.img

//修改文件系统权限,防止出现无法烧写的情况



(2)Jffs2:

#mkfs.jffs2 -r /root/rootfs -o rootfs-jffs2.img -e 0x20000 --pad=0x2000000 -n

#chmod 777 rootfs-jffs2.img

//修改文件系统权限,防止出现无法烧写的情况

mkfs.jffs2 各参数的意义:

-r:指定要生成 image 的目录名。

-o:指定输出 image 的文件名。

-e:每一块要擦除的 block size,不同的 flash,其 block size 会不一样。这里为 128KB。

--pad:用 16 进制来表示所要输出文件的大小,也就是 rootfs-jffs2.img 的大小,如果实

际大小不足此设定的大小,则用 0xFF 补足。

-n,-no-cleanmarkers:指明不添加清楚标记(nandflash 有自己的校检块,存放相关的

信息)



(3)Yaffs2:

#mkyaffs2image /root/rootfs rootfs-yaffs2.img

#chmod 777 rootfs-yaffs2.img

//修改文件系统权限,防止出现无法烧写的情况

四 . 用USB烧写内核跟文件系统镜像文件

1 在宿主机上 输入:

1 ./dnw linux-2.6.28.6/arch/arm/boot/zImage 0

./dnw busybox/mkfs-tools/yaffs2/d43e901/utils/rootfs-yaffs2.img 0

烧写之前最好把之前烧写过的文件系统 先格式化 以免写入错误

2 .上电开发板 选择K 下载Linux-2.6.28.6 内核 。

. 选择Y下载制作好的文件系统镜像文件: rootfs-yaffs2.img

注意:当系统跑起来是需要改一下之前创建在busybox目录下 /root/rootfs/etc 的 inittabled

vi busybox/root/rootfs/etc/inittable 把ttyS2 改成s3c2410-serial0 以免自动启动时不能进入界面

.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: