使用
busybox- 1.9.2
制作根文件系统
移植环境:
主机:
RedHat9.0
交叉编译器:
arm-linux-gcc- 3.4.1
开发板平台:
SBC2410
开始移植
1.
下载最新的busybox 1.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]
0x 0000000c (INIT) 0xc 04c
0x0000000d (FINI) 0xa 26f 0
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
将整个s 3c 2440
文件夹制作成文件系统
[nfsd]# mkcramfs s 3c 2440 fs_ 2.6.24 .4_busybox.cramfs -e 2.6.24.4
下载并烧录到
nandflash
中。启动…
如果出问题就修改一下配置文件。(我实验的时候是用的
nfs
方式的)。有问题大家一起交流!!!