全部博文(40)
2011年(40)
分类: LINUX
2011-09-05 10:37:50
4-1、准备
busybox-1.1.0.tar.bz2(一个集成了一百多个最常用linux命令和工具的软件)
gcc-3.4.6.tgz (交叉编译工具链)
4-2、步骤
1、建立交叉编译环境(参考3-3 建立交叉编译环境)
2、创建工作目录
把软件包busybox-1.1.0.tar.bz2放于工作目录“/root/buildfs”,进行交叉编译来制作根文件系统。
sudo su
mkdir /root/buildfs
cp /mnt/hgfs/share/busybox-1.1.0.tar.bz2 /root/buildfs
3、创建根目录
根目录是我们要移植于开发板的目录,busybox交叉编译后,需要把它安装到该目录。
mkdir /root/rootfs
mkdir /root/rootfs/{bin,dev,home,proc,sbin,tmp,var,boot,etc,lib,mnt,root,
sys, usr,etc/init.d}
mkdir /root/rootfs/usr/{etc,bin,sbin,lib}
创建节点
cd /root/rootfs/dev
mknod -m 600 console c 5 1
mknod -m 666 null c 1 3
4、拷贝基础的动态链接库及其对应链接
ld.so.1, ld-2.3.6.so, libcrypt.so.1, libc.so.6, libdl.so.2, libgcc_s.so.1,
libmad.la, libm.so.6, libpthread.so.o, libstdc++.so.6
cd /opt/gcc-3.4.6/mipsel-linux/lib
vi cplib.sh
添加:
for file in libcrypt libc libdl libgcc 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
这样就从交叉编译工具链里把基础的动态链接库及其对应链接拷贝到根目录。
接着我们可以把拷贝到根目录下链接库的体积缩小:
mipsel-linux-strip -s /root/rootfs/lib/lib*
5、交叉编译busybox
进到工作目录,解压busybox-1.1.0.tar.bz2,然后进到解压后的目录。
cd /root/buildfs
tar jxvf busybox-1.1.0.tar.bz2
cd busybox-1.1.0
配置:
make menuconfig
如果提示缺少“Ncurses libraries”,需要安装Ncurses。简单命令:
apt-get install libncurses5-dev
(1)make menuconfig 运行成功,选择Build Options:
(2)进入Build Options,选择”Do you want to build BusyBox with a cross compiler?”(让它采用交叉编译工具链进行编译,使用“空格键”进行选择)
(3)修改交叉编译工具链的路径为“/opt/gcc-3.4.6/bin/mipsel-linux-”:
(4)保存退回上一层:
(5)退到上一层,进入“Installation Options”,选择“Don't use /usr”和修改BusyBox的安装目录。
(6)保存退出:
(7)编译安装:
编译安装过程如果提示
“/root/buildfs/busybox-1.1.0/include/bb_config.h”出错,需要进到该文件,把第一行“#”前面的“-e ”去掉。
make clean all
make install
安装完成后,实际上BusyBox会在“/root/rootfs”生成生成了bin,sbin两目录(两目录包含一些linux常用的命令与工具)和linuxrc文件(根据需要可以替换)。
6、创建系统配置文件:
cd root/rootfs
vi etc/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!"
vi etc/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
#mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
#mount none /tmp -t ramfs -n
#+yangdk
/bin/chmod 0666 /dev/null
echo "# starting mdev...."
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/usr/etc/init
echo "******************************************"
echo " Guoguifu linux-2.6.24.4 boot "
echo " 2008-12-15 "
echo " grandchips "
echo "******************************************"
vi etc/fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
none /var ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
vi etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a
vi usr/etc/init
#!/bin/sh
ifconfig eth0 192.168.3.111 up
ifconfig lo 127.0.0.1
vi mdev.conf (空的)
修改系统配置文件权限
#chmod 766 etc/*
#chmod 766 etc/init.d/rcS
#chmod 766 usr/etc/init
4-3、结论
至此,根文件系统的基本内容已经创建完成,随后可以利用不同的文件系统镜像制作工具对根文件系统目录制作成对应类型的文件系统镜像。