Busybox ——嵌入式Linux中的瑞士军刀
利用busybox-1.13.0制作linux根文件系统(yaffs2)
源码下载:http://www.busybox.net/downloads/
操作系统:RedHat 9.0
硬件平台:TQ2440
设定工作目录为 /opt/myworks
所以相关的交叉编译器文件包、LINUX-2.6.25.8源码包、busybox-1.13等都是直接在该目录下。
配置流程:
1. 首先要设置交叉编译环境:
在PC linux中需要设置pofile环境:
/etc/profile文件添加:
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /opt/myworkshop
pathmunge /opt/myworkshop/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin
fi
然后设置环境变量生效:
Source /etc/profile
在busybox-1.13.0根目录下找到 MakeFile,找到并修改相应参数:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux
2. Busybox 配置:
使用命令:make menuconfig (或make xconfig)
在General Configuration --->下
在Build Options --->下
在Installation Options --->中
[ ] Don't use /usr
Applets links (as soft-links) --->下
(X) as soft-links
( ) as hard-links
( ) as script wrappers
( ) not installed
(./_install) BusyBox installation prefix
在Linux Module Utilities --->下
(/lib/modules) Default directory containing modules
(modules.dep) Default name of modules.dep
[ ] Simplified modutils
[ ] Pretty output
[ ] Blacklist support
[ ] depmod
--- Options common to multiple modutils
[ ] Support version 2.2/2.4 Linux kernels
基本上是上面这些配置,其余使用默认即可。
配置完之后使用命令:
# make; make install
这样在busybox-1.13.0文件夹下会生成一个 _install 的文件夹。
在工作目录下,新建立一个文件夹root_2.6.25.8_fs,并将 _install里边的全部内容拷贝到root_2.6.24.8_fs下。
同时还要建立这些文件和节点,相关命令如下:
# cd /opt/myworks/root_2.6.25.8_fs
# mkdir dev etc home lib mnt opt proc root sys tmp var web usr/lib usr/share
# cd dev
# mkno console c 5 1
# mkno null c 1 3
拷贝相应的库文件到 root_2.6.25.8_fs 下的lib:
# cd /opt/root_2.6.25.8_fs
# cp -f /opt/myworkshop/4.3.3/arm-none-linux-gnueabi/libc/armv4/lib/*.so* lib –a
接下来,就是建立和配置一些文件了:
为了简单起见,只建立了一些必要的文件,分别如下:
# cd /opt/myworkshop/root_2.25.8_fs/etc
# mkdir init.d sysconfig
在etc下建立以下文件:
fstab
改文件指明需要挂载的文件系统
group
用户组
inittab
busybox 初始化时要配置文件
passwd
密码文件,用于保存用户密码等
shadow
在你的目标系统运行使用passwd命令创建密码时,需要该文件的参与
profile
用户环境配置文件
resolv.conf
存放DNS配置信息
mdev.conf
mdev.conf的配置文件
在etc/init.d下建立rcS文件。
属于脚本文件,busybox运行的第一个脚本文件,在inittab中有指定。
在sysconfig下建立HOSTNAME文件。
存放hostname的名。
各文件的内容:
fstab: |
# device mount-point type options dump fsck order |
proc /proc proc defaults 0 0 |
tmpfs /tmp tmpfs defaults 0 0 |
sysfs /sys sysfs defaults 0 0 |
tmpfs /dev tmpfs defaults 0 0 |
var /dev tmpfs defaults 0 0 |
group: |
root:*:0: |
daemon:*:1: |
bin:*:2: |
sys:*:3: |
adm:*:4: |
tty:*:5: |
disk:*:6: |
lp:*:7:lp |
mail:*:8: |
news:*:9: |
uucp:*:10: |
proxy:*:13: |
kmem:*:15: |
dialout:*:20: |
fax:*:21: |
voice:*:22: |
cdrom:*:24: |
floppy:*:25: |
tape:*:26: |
sudo:*:27: |
audio:*:29: |
ppp:x:99: |
500:x:500:yourname |
501:x:501:yourname |
# /etc/inittab |
::sysinit:/etc/init.d/rcS |
console::askfirst:-/bin/sh |
::ctrlaltdel:/sbin/reboot |
::shutdown:/bin/umount -a –r |
上面出现的 “console” 是比较通用的写法,这样会很省事,而不管驱动源码中的串口设备名是什么。
passwd: |
root::0:0:root:/:/bin/sh |
ftp::14:50:FTP User:/var/ftp: |
bin:*:1:1:bin:/bin: |
daemon:*:2:2:daemon:/sbin: |
nobody:*:99:99:Nobody:/: |
yourname:$df8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/yourname:/bin/sh |
红色部分是我们现在所做的系统的密码,这个我们暂且这样写,不会影响文件系统的制作,在系统做好之后,使用命令:
# passwd yourname
即可生成了密码。
profile: |
# Ash profile |
# vim: syntax=sh |
|
# No core files by default |
#ulimit -S -c 0 > /dev/null 2>&1 |
|
USER="`id -un`" |
LOGNAME=$USER |
PS1='[\u@\h \W]# ' |
PATH=$PATH |
|
HOSTNAME=`/bin/hostname` |
|
export USER LOGNAME PS1 PATH |
resolv.conf: |
nameserver 202.96.128.166 |
shadow: 留空即可 |
mdev.conf:留空即可 |
HOSTNAME: |
yourname |
rcS: |
#!/bin/sh |
|
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin |
runlevel=S |
prevlevel=N |
umask 022 |
export PATH runlevel prevlevel |
|
# |
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses. |
# |
|
mount -a |
mkdir /dev/pts |
mount -t devpts devpts /dev/pts |
echo /sbin/mdev > /proc/sys/kernel/hotplug |
mdev -s |
mkdir -p /var/lock |
|
|
|
/bin/hostname -F /etc/sysconfig/HOSTNAME |
完成以上步骤后,即可制作生成文件系统了。
设置文件属性,使其可执行:
# chmod 777 inittab
# chmod 777 rcS
最后生成镜像并烧录:
针对128M以上NAND FLASH,所以使用这个命令:
# mkyaffs2image root_2.6.25.8_fs/ root_2.6.25.8_fs.bin
如果小于128M:
# mkyaffsimage_2 root_2.6.25.8_fs/ root_2.6.25.8_fs.bin
如果能成功busybox的文件系统,那么就可以看到以下运行的结果了:
出现一些问题的解决办法:
A. 当出现“ Bad inittab entry line “ 的时候,最可能的原因是,inittab的文件的配置不符合约定造成的或者内容参数有误。
解决办法:修改inittab文件。 其实inittab文件不是很必须,实在不行,可以去掉,也不会影响文件系统的制作。
B. 当出现 “con’t open ….”等的时候。说明该设备,不存在,或者说所对应的关系没有一致造成的。
文章评论(0条评论)
登录后参与讨论