目录
一、根文件系统
1.1根文件系统
1.2根文件系统内容
二、根文件系统移植
2.1BusyBox
2.2BusyBox的获取
2.3BusyBox的使用
2.5编译和安装
2.6修改根文件系统
一、根文件系统
1.1根文件系统
根文件系统是内核启动后挂载的第一个文件系统系统引导程序会在根文件系统挂载后从中把一些基本的初始化脚本和服务等加载到内存中去运行
1.2根文件系统内容
都是二进制文件,所以需要区分架构。
ubuntu下浅蓝色的都是软连接文件,
他们都来自busybox。busybox可以理解成这些命令的源代码
为什么要有库呢,因为程序的执行需要动态库。不然链接动态库的应用程序不能再开发板上跑。而我们使用交叉编译的方式编辑和编译程序再ubuntu上。所以开发板不需要有静态库。这些库是怎么来的呢,首先ubuntu的库我们肯定用不了。他们都是x86架构的。不过交叉编译工具链里有库。我们把这里.so结尾的也就是动态库复制过来
1、/linuxrc是一个可执行的应用程序
(1)/linuxrc是应用层的,和内核源码一点关系都没有
(2)/linuxrc在开发板当前内核系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是用arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译连接的。
(3)/linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。但是因为我们/linuxrc这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个/linuxrc没法动态连接,一般都是静态连接的。
2、/linuxrc执行时引出用户界面
(1)操作系统启动后在一系列的自己运行配置之后,最终会给用户一个操作界面(也许是cmdline,也许是GUI),这个用户操作界面就是由/linuxrc带出来的。
(2)用户界面等很多事并不是在/linuxrc程序中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或者间接的被/linuxrc调用执行的。用户界面程序和其他的应用程序就是进程2、3、4·····,这就是我们说的进程1(init进程,也就是/linuxrc)是其他所有应用程序进程的祖宗进程。
3、/linuxrc负责系统启动后的配置
(1)就好像一个房子建好之后不能直接住,还要装修一样;操作系统启动起来后也不能直接用,要配置下。
(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统用起来更方便,更适合我个人的爱好或者实用性。
4、/linuxrc在嵌入式linux中一般就是busybox
(1)busybox是一个C语言写出来的项目,里面包含了很多.c文件和.h文件。这个项目可以被配置编译成各个平台下面可以运行的应用程序。我们如果用arm-linux-gcc来编译busybox就会得到一个可以在我们开发板linux内核上运行的应用程序。
(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说他就是专门开发的init进程应用程序。
(3)busybox为当前系统提供了一整套的shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。但是在嵌入式linux中,为了省事我们把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox。
了解linux的进程:rootfs与linuxrc | 《Linux就该这么学》
他们也来自busybox
(没有详细介绍的目前都是空的)
(windows是文件属于磁盘,Linux是磁盘属于文件。所以插入一个u盘的话要挂载到某个目录下)
二、根文件系统移植
2.1BusyBox
BusyBox将很多常用的工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令,BusyBox实现的命令都是精简版的,很多扩展都不支持。BusyBox被称为Linux工具里的瑞士军刀
他很轻量级,以至于很多命令的拓展都不支持
2.2BusyBox的获取
https://busybox.net/downloads/
他的更新不像Linux和uboot那样活跃(很忙的盒子)
2.3BusyBox的使用
tar -xvf busybox-1.22.1.tar.bz2
他怎么安装的说明在INSTALL文件里
他说他的编译过程和Linux内核很像
2.4make menuconfig
其实保持原有配置就可以了,以后也不太需要自己编译根文件系统
但是要指定一下编译器
选择编译成静态库,然后把最大文件支持位两个G取消
指定编译器
这个没有保存一直退出会询问你是否保存
2.5编译和安装
make
make install
这个没瘦身
这个文件就是根据上面文件瘦身得来的
make install
这个命令生成了一堆软连接
这时候生成了一个新的文件
2.6修改根文件系统
cp ~/Linux_4412/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a
sudo rm lib/*.a
删除所有的静态库
sudo su
/home/book/Linux_4412/toolchain/gcc-4.6.4/bin/arm-none-linux-gnueabi-strip lib/*
exit
因为瘦身需要的权限比较大所以其换成rootu用户
又因为交叉编译工具链安在了book用户下所以想要使用只能指定路径
瘦身后退出
chmod +x etc/init.d/rcS
为这个脚本添加可执行权限
mkdir dev mnt proc root sys tmp var
sudo rm -rf *
把原来的删了
cp -rf ~/Linux_4412/busybox/busybox-1.22.1/_install/* .