二十.Linux开发之根文件系统构建及过程详解

本文详细介绍了Linux根文件系统构建的学习路线,包括从.nfs文件夹形式到烧录镜像的过程。文章以BusyBox的移植为主线,涵盖从获取源码、配置、编译到安装的步骤,并解释了如何解决编译中遇到的问题。此外,文章还讨论了inittab配置文件的重要性和格式,并通过rcS文件的实战分析了启动过程。最后,文章探讨了用户登录、动态链接库的拷贝以及开机自启动的相关知识,为读者提供了完整的Linux根文件系统构建实践指南。
摘要由CSDN通过智能技术生成

老规矩

有道云笔记地址:

详情看这里链接,记录太多,就不一一排版了。

http://note.youdao.com/noteshare?id=15b6e982c2e66d0f47b1c787a49f4f99&sub=B945844CB6404211B5A9E9AF51C26AB8

 

 

一、根文件系统构建的学习路线

1.rootfs的两种表现形式: 

(1) .nfs方式启动的文件夹形式的rootfs 

(2) .用来烧录的镜像形式rootfs

2.我们这里的学习路线是:

(1).先逐步构建文件夹形式的根文件系统再制作烧录镜像 。

(2).每做一步就用NFS去挂载,观察启动后的现象,然后理论分析原因。

(3).逐步添加形成不断复杂化的Rootfs。

二、busybox的移植实战

busybox:嵌入式开发中的瑞士军刀(提供嵌入式中linux中的各种小工具,小命令,比如像ls、pwd命令等),一般这个文件官方会给出,或者直接在网上找一份也是可以的,然后放到虚拟机中进行解压,配置编译。

1.获取 BusyBox 源码

BusyBox 的官方网站是:http://www.busybox.net/

我们下面就以busybox-1.24.1.tar.bz2为例来讲解一下 BusyBox 的编译安装过程。

注意:因为当你决定了用什么版本的交叉编译器来编译内核时,文件系统中的所有程序也要使用同样的交叉编译器来编译。

2. 同步拷贝、解压到ubuntu

我们的根文件系统目录:/root/porting_x210/rootfs/rootfs

在根文件系统目录下创建Aliya_rootfs文件,将该压缩包解压到这里。 

3. 修改Makefile 

(1) ARCH = arm

(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-

4.make menuconfig配置 

//不用像内核中make defconfig那样需要很多的配置

按照如下文档配置menuconfig即可。

5.make -j4,没有错误后make install 

(make install实际上是在执行 busybox顶层目录的 install) 

./include/config/feature/install 

./include/config/install

make install在所有的linux下的软件中作用都是安装软件。

在传统的linux系统中安装软件时都是选择源代码方式安装的。我们下载要安装的软件源代码,然后配置、编译、安装。 

这里的“安装”就是make install 

make install的目的就是将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定(一般都可以自己指定安装到哪个目录下,如果不指定一般都有个默认目录)的目录下

(1)make编译中遇到问题:sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’

解决当前错误: 

sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’ 

//这个错误很可能是gcc和当前busybox版本不兼容造成的。 

我们对于安装或者配置中出现的错误,通常有2种解决方式: 

  1. 1 尝试去源代码中解决他 
  2. 2 在编译的时候尝试避开他(很可能是我们用不着无关的程序我们可以这么做) 

怎么做? 

使用命令find -name "sync.c"去找到这个sync.c,在他的目录下寻找makefile,发现没有

但是有Kbuild文件(有点类似Makefile),打开Kbuild,在Kbuild将 lib+= sync.o 一项中,可以看到config的选项 

lib-$(CONFIG_SYNC) += sync.o 

我们要找的是 SYNC 宏 

去menuconfig中 ,搜索SYNC,就找到了。禁用sync即可 

  1.  make -j4解决。

6.make install 

默认安装目录:./_install 

里面有4个文件: bin linuxrc sbin usr 

ls -l可以看到: 

linuxrc -> bin/busybox//这个linuxrc其实就是个符号链接 

bin里面的所有符号链接,全都指向busybox!

7.改变到我们的根文件系统目录中

我们的根文件系统目录:/root/porting_x210/rootfs/rootfs

make menuconfig 

Busybox Settings —> 

Installation Options (“make install” behavior) —> 

点进去,改成我们将要用作NFS挂载的目录 

/root/porting_x210/rootfs/rootfs

  1. 再次make install后,到我们的跟文件系统中可以看到已经生成了这四个文件

到这里,busybox移植的rootfs已经完成了。

8.设置bootargs挂载添加了busybox移植的rootfs

(1)之前建立了一个空的文件夹然后自己touch linuxrc随便创建了一个不能用的/linuxrc然后去nfs挂载rootfs,实验结果是:挂载成功,执行/linuxrc失败。

(2)现在我们移植了busybox后/linuxrc就可以用了,然后再次去nfs挂载这个rootfs。预计看到的效果是:挂载成功,执行/linuxrc也能成功。

(3)注意uboot的bootargs设置成:setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200

(4)上节NFS挂载的步骤已经做过,这里只需要在串口终端中TFTP下载zImage即可。

实验结果:

挂载成功,执行/linuxrc(也就是busybox)成功,未提示linuxrc错误。

但是因为找不到/etc/init.d/rcS和/dev/tty2等文件所以一直在打印错误提示信息,但是其实有进入命令行。

三、inittab配置文件详解

1、添加一个典型的inittab

(1)将提供的典型的inittab文件复制到我们制作的rootfs的根目录下的/etc/目录下

(2)再次启动内核挂载这个rootfs看效果

(3)再次启动开发板,提示“按回车键使能控制台”。

我们做到这里已经能使用ls查看/目录下的文件了,至此最小根文件系统能用了,

包括: busybox inittab

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值