Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316817
  • 博文数量: 40
  • 博客积分: 892
  • 博客等级: 准尉
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-25 10:20
文章存档

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

1make 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、结论

至此,根文件系统的基本内容已经创建完成,随后可以利用不同的文件系统镜像制作工具对根文件系统目录制作成对应类型的文件系统镜像。

阅读(2039) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~