嵌入式Linux根文件系统制作
文章架构:
1.根文件系统树制作
2.Linux内核使用initramfs文件系统启动
1.根文件系统树制作
1.1 创建根文件系统树目录结构
根文件系统目录树用来存放Linux基本命令,系统配置、动态库、设备节点、应用程序等所有文件,这些文件是存放在我们Linux服务器上的,在接下来的内容中我们将使用不同的工具将他制作成不同格式的根文件系统。
cd ~/gitee/fl2440/linux/
mkdir rootfs
cd rootfs/
mkdir -p apps,bin,data,dev,info,proc,root,sbin,sys,tmp,var,etc/init.d,mnt/{usb,mmc},usr/{,bin,sbin,lib},lib/{,modules/{,3.0.0}}}
tree
.
|-- bin 系统基本命令bin
|-- sbin 系统管理命令
|-- dev 系统设备节点所在路径
|-- root root 用户home
|-- etc 系统配置文件所在路径
| `-- init.d 系统初始化、启动程序脚本
|-- lib 系统动态库路径
| `-- modules
| `-- 3.0.0 linux内核驱动模块需要该路径
|-- usr
| |-- bin 用户基本命令路径
| |-- lib 用户动态库文件
| `-- sbin 用户管理命令路径
|-- apps nandflash apps分区挂载点,用来存放应用程序
|-- data nandflash data分区挂载点,用来存放数据
|-- info nandflash info分区挂载点,用来存放设备信息
|-- mnt 系统挂载点
| |-- mmc SD卡挂载点
| `-- usb U盘挂载点
|-- proc linux proc文件系统挂载点
|-- sys linux sys文件系统挂载点
|-- tmp linux tmp文件系统挂载点
`-- var 系统日志等文件存放路径
23 directories, 0 files
1.2 安装动态库
Linux下所有的应用程序都离不开动态库,程序在运行时默认会在/lib路径下查找相关的动态库文件。如果动态库不在该路径下,可以通过LD_LIBRARY_PATH环境变量来制定其他需要加载的动态库路径,因为开发板上所有程序都是使用交叉编译器编译,所以我们需要将交叉编译器里的动态库文件拷贝到根文件系统属的lib路径下:
cd ~/gitee/fl2440/linux/rootfs/
cd lib/
下面这个命令用来将/opt/xtools/arm920t路径下除gconv相关的所有动态库(.so)文件拷贝到
find /opt/xtools/arm920t/ -name “.so” | grep -v gconv | xargs -i cp -af {} ./
列出所有失效的符号链接文件
ls lib/
ls -lfind -L -type l
在上面的输出中有很多红色的文件为失效的符号链接(…/…/lib/libxxxx),我们可以创建并使用下面脚本来重新制作符号链接到本地路径下:
vim symlink.sh
#!/bin/bash
# find all the invalid symlink file and remove "./" before it
for sf in `find -L -type l | cut -d'/' -f2` ; do
# parser and get symlink target file name
file=`ls -l $sf | awk -F '/' '{ print $NF }'`
# remove invalid symlink file and generate new one
rm -f $sf && ln -s $file $sf
done
bash symlink.sh && rm -f symlink.sh
ls
1.3 安装busybox
Linux形同在执行一条命令时,默认会到/bin、/sbin、/usr/bin、/usr/sbin这些路径下找,如果找不到则提示command not found, 当然我们也可以通过PATH环境变量告诉系统其他命令存放的路径。
cd ~/gitee/fl2440/linux/rootfs/
BusyBox是一个继承了一百多个最常用的Linux命令和工具的软件,如ls、cat、ifconfig、vim、grep、sed、awk、find、mount、telnet等。他集成压缩了Linux的许多工具和命令。我们通过下载busybox源码、配置编译并安装。他们会实现Linux基本命令,他们会被安装到根文件系统树bin、sbin、usr/bin、usr/sbin等路径下。
进入到FL2440项目下创建busybox的工作目录
cd ~/gitee/fl2440/
mkdir 3rdparty
cd 3rdparty
下载解压busybox
wget https://busybox.net/downloads/busybox-1.27.1.tar.bz2
tar -xjf busybox-1.27.1.tar.bz2
cd busybox-1.27.1
类似Linux内核,对busybox进行配置,选择哪些Linux命令需要编译,哪些不需要
export TERM=vt100
make menuconfig
Busybox Settings --->
[ ] Enable options for full-blown desktop systems 我们的Linux不带桌面,可以去掉这个选项节约代码
[