嵌入式Linux-3.0内核initramfs根文件系统制作

嵌入式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 -l find -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不带桌面,可以去掉这个选项节约代码
	[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值