根文件系统制作实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式根文件系统制作
一、实验目标
用busybox定制一个基本的文件系统,并且运行用户编译的hello(动态链接)。
二、软件包
busybox:/downloads/busybox-1.16.0.tar.bz2
bash:ftp:///gnu/bash/bash-4.0.tar.gz
三、实验步骤
3.1、建立工作目录
设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制造根文件系统的软件,下载busybox,bash到该目录;
mkdir/root/build_rootfs
3.2、建立根目录
该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;
mkdir/root/rootfs
mkdir/root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp}
mkdir/root/rootfs/usr/{bin,sbin,lib}
创建节点
dev目录执行,创建节点(如果使用mdev设备管理工具可忽略此步骤) /root/rootfs/dev
以root用户在/root/rootfs/
mknod-m666null c13
mknod-m600console c51
3.3、拷贝动态链接库
交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/4.1.2/,所以链接库的目录是/usr/local/arm/4.1.2/arm-linux/lib。
#进入链接库目录
cd/usr/local/arm/4.1.2/arm-linux/lib
#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib)。
vi cp.sh
#内容如下:
for file in libc libcrypt libdl libm libpthread libresolv libutil libthread_db
do
cp$file*.so/work/rootfs/lib
cp-d$file.so.*/work/rootfs/lib
done
cp-d ld*.so*/work/rootfs/lib
cp-d libstdc++.so*/work/rootfs/lib
cp-d libz.so*/work/rootfs/lib
cp-d libjpeg.so*/work/rootfs/lib
cp-d libgcc_s*/work/rootfs/lib
#保存退出
#第一个cp命令会复制实际的共享库
#第二个cp命令会复制符合链接本身
#第三个cp命令会复制动态连接器及其符合链接
#执行刚编写的shell。
source cp.sh
#这样就把链接库复制到/root/rootfs/lib目录下。
#接着我们还要缩小复制过来的链接库的体积,如下:
arm-linux-strip-s/root/rootfs/lib/lib*
3.4、交叉编译busybox
Bosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr 目录和linuxrc文件。
busybox的源码可以从/downloads/下载,这里我们下载一个1.16.0版本的源码。
我们在配置busybox的时候是基于默认配置之上来配置的;
先make defconfig就是把busybox配置成默认,
然后再make menuconfig来配置busybox。
说明:我们在配置一个源代码包之前,可以先阅读源码包目录下的README和INSTALL文件以
make menuconfig
#配置时,我们基于默认配置,再配置它为静态编译,安装时不要/usr路径,指定一个安装路径,#如下:
Busybox Settings--->
Build Options--->
[*]Build BusyBox as a static binary(no shared libs) Installation Options--->
[*]Don't use/usr
(/root/rootfs)BusyBox installation prefix
输入"/root/rootfs",指定安装路径为/root/rootfs
#保存退出,编译安装;
make&&make install
#安装完成后,busybox会在安装目录上安装linuxrc文件,用户可以根据自身需要进行跟换该文件。
3.5、交叉编译bash
Bash是一个交互程序,其源码可以从ftp:///gnu/bash/下载;
步骤如下:
cd/root/build_rootfs
解压源码;
tar zxvf bash-4.0.tar.gz
cd bash-4.0
export PATH=/usr/local/arm/4.1.2/bin:$PATH(若该环境变量已经设置成功,可以忽略此步骤) ./configure--host=arm-linux
make
arm-linux-strip-s bash
编译的结果得到bash程序,将其拷贝到根目录下;
cp bash/root/rootfs/bin
3.6、建立系统配置文件
3.6.1、/root/rootfs/etc/inittab文件
首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。
vi/root/rootfs/etc/inittab
添加如下内容
#first:run the system script file
::sysinit:/etc/init.d/rcS
#second:run the local script file
::once:/etc/rc.local
#third run the bash shell prosecc
::respawn:/bin/bash
#restart init process
::restart:/sbin/init
#umount all file system
::shutdown:/bin/umount-a-r