根文件系统制作实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档