全部博文(36)
分类: LINUX
2009-08-06 17:41:41
当使用Busybox-1.2.0制作根文件系统
交叉编译器为3.3.2
make-3.8.1
STEP 1:
创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/usr。
STEP 2:
升级make到3.81版本,用RH9自己带的make 3.79会出错
进入make-3.81目录,执行:# ./configure # make #make install
会把make安装到/usr/local/bin目录下,要使新make立即生效,要设置环境变量
PATH=/usr/local/bin:$PATH。设置完成后,就可以编译Busybox了。
STEP 3:
进入busybox-1.2.0目录,执行# make defconfig
执行# make menuconfig
Busybox Setting -----> Build Options ----->
选择上 Build BusyBox as a static binary (no shared libs)
Do you want to build BusyBox with a Cross Compiler?
指定交叉编译器为
(/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix
Installation Options ----->
选择上 Don’t use /usr
设置Busybox installation prefix为 ../rootfs即安装目录.
在Shells中,选择Choose your default shell为ash.
保存退出
STEP 4:
# make # make install
STEP 5:
编译tinylogin-1.4。进入tinylogin-1.4目录,修改Makefile文件如下:
DOSTATIC = true
USE_SYSTEM_PWD_GRP = false
USE_SYSTEM_SHADOW = false
CROSS = /usr/local/arm/3.3.2/bin/arm-linux-
STEP 6:
执行# make PREFIX=../rootfs install
STEP 7:
进入根文件系统rootfs的etc目录,执行如下操作:
拷贝Busybox-1.2.0/examples/bootfloopy/etc/* 到当前目录下。
# cp –r ../../busybox-1.2.0/examples/bootfloopy/etc/* ./
拷贝/etc/passwd, /etc/group, /etc/shadow到当前目录下。
# cp /etc/passwd ./
# cp /etc/group ./
# cp /etc/shadow ./
修改inittab,把第二项改为::respawn:-/bin/login
修改profile,加入PATH环境变量:export PATH=/bin:/sbin:/usr/bin:/usr/sbin
对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。
修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/sh。
修改group为root:x:0:root
修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::
STEP 8:
制作cramfs镜像,下载到实验箱上就可以引导起来了。
# mkcramfs rootfs rootfs.cramfs
用BusyBox-1.1.3制作根文件系统
cross-2.95.3
STEP 1:
# mkdir rootfs
# cd rootfs
# mkdir bin dev etc home lib mnt proc sbin sys tmp root usr
# mkdir mnt/etc
# mkdir usr/bin usr/lib usr/sbin
STEP 2:
进入BusyBox解压后的目录,配置BusyBox
# make menuconfig
Busybox Settings >
General Configuration >
[*] Support for devfs
Build Options >
[*] Build BusyBox as a static binary (no shared libs)
/* 将busybox编译为静态连接,少了启动时找动态库的麻烦 */
[*] Do you want to build BusyBox with a Cross Compiler?
(/usr/local/arm/2.95.3/bin/arm-linux-)Cross Compiler prefix
/* 指定交叉编译工具路径 */
Init Utilities >
[*] init
[*] Support reading an inittab file
/* 支持init读取/etc/inittab配置文件,一定要选上 */
Shells >
Choose your default shell (ash) >
Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo (basic SuSv3 version taking no options)
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch
Editors >
[*] vi
Linux System Utilities >
[*] mount
[*] Support mounting NFS file systems
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file
Networking Utilities >
[*] inetd
/*
* 支持inetd超级服务器
* inetd的配置文件为/etc/inetd.conf文件,
*/
# make TARGET_ARCH=arm CROSS=arm-linux-\
PREFIX=../rootfs/ all install
//执行上面的命令会把相关文件安装到我们的根文件系统rootfs
编译过程中若出现如果出现找不到内核版本号的编译错误(如:编译libb/loop.c时提示找不到 linux/version.h 文件,也可以拷贝3.3.2交叉编译器下的version.h文件。),可以把内核源码中的version.h文件拷贝到交叉编译器的包含文件的linux目录下。另外也可以用3.3.2交叉编译器,但是要修改loop.c内容,把#include
# mkcramfs rootfs rootfs.cramfs
将rootfs.cramfs烧写到实验箱.运行即可启动.