使用busybox-1.9.2制作根文件系统
移植环境:
主机:RedHat9.0
交叉编译器:arm-linux-gcc-3.4.1
开发板平台:SBC2410
开始移植
1. 下载最新的busybox1.9.2,并解压缩。
下载busybox源代码:[url]http://busybox.net/downloads/busybox-[/url]1.9.2.tar.bz2
解压源码:tar -jxvf busybox-1.9.2.tar.bz2
2.
修改Makefile中的174行的 arch和编译工具
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
3. make menuconfig. 修改编译配置选项。
Busybox Setting----->
build option-->
【 】Build BusyBox as a static binary (no shared libs)
【*】 Build shared libbusybox
【*】 Produce a binary for each applet, linked against libbusybox
【*】 Produce additional busybox binary linked against libbusybox
【 】Build with Large File Support (for accessing files > 2 GB)
installation option-->
【*】 Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
(这一项一定要选上,我的redhat可能是因为这个原因启动不起来,后来我又重装的,而且不敢随便用root用户了)
Busybox Library Tuning --->
MD5: Trade Bytes for Speed
【*】 Faster /proc scanning code (+100 bytes)
【*】 Support for /etc/networks
【*】Support for /etc/networks
【*】 Additional editing keys
【*】 vi-style line editing commands
【*】 History saving
【*】 Tab completion
【*】 Username completion
【*】 Fancy shell prompts
Linux Module Utilities --->
【*】 Support version 2.6.x Linux kernels
【*】 insmod
【*】 Enable load map (-m) option
【*】 Symbols in load map
【*】 rmmod
【*】 lsmod
【*】 lsmod pretty output for 2.6.x Linux kernels
【*】 modprobe
【 】 Multiple options parsing
【 】 Fancy alias 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
其他的选项可以根据需要进行一些修改。
4.编译busybox
[localhost busybox-1.9.2]# make install
在busybox/_install 目录下会生成我们需要的文件。
5. 修改_install/bin/busybox的属性为4755
chmod 4755 ./_install/bin/busybox
必须要要修改属性,否则在busybox中很多命令会受限制,比如:
$ su
su: must be suid to work properly
6.建立root fs的文件系统所需的目录和文件。
#mkdir /home/wowocpp/nfsd
在root文件夹中建立基本的目录
[nfsd]# ls
bin dev home linuxrc proc sbin tmp var
boot etc lib mnt root sys usr
7. 以root身份建立节点文件/home/nfsd/dev/console, /home/nfsd/dev/null
[nfsd/dev]# mknod -m 600 dev/console c 5 1
[nfsd/dev]# mknod -m 666 dev/null c 1 3
8. 建立配置文件如下:
[etc]# more profile
#!/bin/sh
#/etc/profile:system-wide .profile file for the Bourne shells
echo
echo -n "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 = "`id -un`"
LOGNAME=$USER
PS1='[\u@\h\W]\$'
PATH=$PATH
echo "Done!"
[etc]# more init.d/rcS
#!/bin/sh
# set hostname, needed host file in /etc directory
#./etc/host
#hostname `cat /etc/host`
# mount all filesystem defined in "fstab"
echo "#mount all......."
#/bin/mount -a
#/bin/chmod 0666 /dev/null
echo "# starting mdev...."
#/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/sh
[etc]# more
fstab host inittab passwd shadow
group init.d/ mdev.conf profile
[etc]# more fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
none /var ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
[etc]# more inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a
[etc]# more ../usr/etc/init
#!/bin/sh
ifconfig eth0 192.168.1.111 up
ifconfig lo 127.0.0.1
9.建立文件/etc/mdev.conf,内容为空
[etc]# vi mdev.conf
10.复制主机/etc/下面的文件passwd, group, shadow文件到etc目录(这一步也可以不做)
[etc]# cp /etc/group .
[etc]# cp /etc/passwd .
[etc]# cp /etc/shadow .
ok,所需要的文件都已经建立ok了
[etc]# ls
fstab group host init.d inittab mdev.conf passwd profile shadow
11.复制刚刚编译的busybox到/root目录下(以root用户身份)
[_install]# sudo cp -Rfv * /home/wowocpp/nfsd/
12.因为是编译的时候使用的是动态链接。所以先看看/busybox/_install/bin/busybox使用了哪些lib,然后从glibc复制相应的lib到/home/wowocpp/nfsd/中。
[ bin]# /usr/local/arm/3.4.1/arm-linux-gnu-readelf -d busybox
Dynamic section at offset 0xb8014 contains 22 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library:[libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0xc04c
0x0000000d (FINI) 0xa26f0
0x00000004 (HASH) 0x80e8
0x00000005 (STRTAB) 0xa384
0x00000006 (SYMTAB) 0x8b24
……
……
……
复制lib 文件到lib目录下:
[lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/ld* .
[lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so .
[lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 .
[lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libm * .
[lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt* .
12.使用工具mkcramfs将整个s3c2440文件夹制作成文件系统
[nfsd]# mkcramfs s3c2440 fs_2.6.24.4_busybox.cramfs -e 2.6.24.4
下载并烧录到nandflash中。启动…
如果出问题就修改一下配置文件。(我实验的时候是用的nfs方式的)。有问题大家一起交流!!!