嵌入式linux开发04-roottfs移植
2022/2/22 7:25:05
本文主要是介绍嵌入式linux开发04-roottfs移植,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
本篇继续根据《i.mx6u驱动开发指南V1.6.pdf》梳理根文件系统移植过程。
linux目录含义简介
- /bin 存放系统的可执行文件,一般都是一些终端命令,比如 ls 、 mv 、touch
- /dev 存放各种设备文件,比如串口 /dev/tty* 开发板上串口是/dev/ttymxc0
- /etc 存放各种配置文件
- /lib 存放库文件,存放不是.c .h源码,而是编译之后的库文件
- /mnt 临时挂载目录,一般upan都是挂载这这个目录的子目录 /mnt/usb 、/mnt/sd
- /proc 此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点, proc
是个虚拟文件系统,没有实际的存储设备。 proc 里面的文件都是临时存在的,一般用来存储系
统运行信息文件 - /usr 是 Unix Software Resource 的缩写,软件资源目录
- /sbin 存放用户的可执行命令,只有管理员才能使用,主要是用户管理系统
- /svs 目录 sysfs 文件系统的挂载点
- /opt 可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中
BusyBox
BusyBox 是一个构建根文件系统的工具,集成了大量的 Linux 命令和工具的软件,像 ls、 mv、 ifconfig 等命令 BusyBox 都会提供。 BusyBox 就是一个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令。官网地址为
https://busybox.net/
开发板主要的是1.29.0版本的busybox
编译
1、解压busybox
得到如下目录
2、Makefile添加编译器选项
在顶层Makefile文件下添加如下命令,指定硬件架构及编译器。默认为x86。
3、添加中文支持
修改/libbb/printable_sting.c
; 32 /* 注释掉下面这个两行代码 */ 33 // if (c >= 0x7f) 34 // break; 48 /* if (c < ' ' || c >= 0x7f) */ //修改前 49 if( c < ' ') //修改后
修改/libbb/unicode.c
1023 /* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */ //修改前 1024 *d++ = (c >= ' ') ? c : '?'; //修改后 1033 /* if (c < ' ' || c >= 0x7f) */ //修改前 1034 if(c < ' ') //修改后
数字代表在对应.c中的行数,避免篇幅过长,就不将需要修改代码的上下文写出来了。
4、配置menuconfig
busybox文件夹下执行make menuconfig。如下图,“y”使能相关功能,“n”失能相关功能,“enter”进入目录。按两次‘Esc’键退出当前菜单。
失能build static binary
->Settings->Build static binary
使能vi
-> Settings-> vi-style line editing commands
失能 simplified modutils
-> Linux Module Utilities -> Simplified modutils
使能mdev
-> Linux System Utilities -> mdev (16 kb) //确保下面的全部选中,默认都是选中的
使能unicode
-> Settings-> Support Unicode
-> Settings-> Support Unicode -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables
5、编译
make
等待执行完成
将编译结果存放到指定目录,一般新建一个rootfs目录
make install CONFIG_PREFIX=/home/alientek/linux/nfs/rootfs
新建的rootfs目录,就是需要烧录到开发板上的根文件系统。
6、添加lib库
在打包烧写之前,需要添加lib库文件。linux下一般都是动态编译。所以编译出来的文件需要调用库文件。静态编译就是将用户程序可库文件统一打包编译为一个可执行文件,这样好处是,执行文件放到其他电脑上可以直接运行,不会出现少库的错误。静态编译的劣势为,编译的可执行文件比较大。
根据以上描述,要使编译的文件能够在开发板上运行,就需要在开发板的系统上添加各种lib库文件。
在rootfs(自己创建的根文件目录)下创建lib文件夹
mkdir lib
拷贝libc/lib到lib
进入如下路径对应的目录:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/lib
此目录下有很多的so(是通配符)和.a 文件,这些就是库文件,将此目录下所有的so*和.a
文件都拷贝到 rootfs/lib 目录中,拷贝命令如下:
#“-d”表示拷贝符号链接 cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d
其中ld-linux-armhf.so.3为软连接,类似于windows下快捷方式,相当于-d只把这个文件的快捷方式拷贝过来了,没有将源文件拷贝过。
所以要先将其删除,然后再将源文件拷贝过来
rm ld-linux-armhf.so.3 #进入如下路径对应的目录: #/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/lib cp ld-linux-armhf.so.3 /home/alientec/linux/nfs/rootfs/lib/
拷贝lib到usr/lib
依照上述将/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib目录下的文件拷贝过来
cp *so* *.a /home/alientec/linux/nfs/rootfs/usr/lib/ -d
至此库文件就全部添加好了,可以通过du命令查看目录的大小
du ./lib ./usr/lib -sh
7、创建其他文件夹
在根文件系统中创建dev、 proc、 mnt、 sys、 tmp 和 root 等目录
创建etc/init.d/rcS文件
该文件主要负责气筒启动时,启动一些服务。内容如下。最后记得加权限
chmod 777 rcS
创建etc/fstab文件
fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区
dump:1,允许备份。0,不备份。一般设置为0
pass:磁盘稽查,0,不检查,一般设置为0
#<file system> <mount pint> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0
创建etc/inittab文件
init 程序会读取/etc/inittab这个文件, inittab 由若干条指令组成
#etc/inittab <id>:<runlevels>:<action>:<process> ::sysinit:/etc/init.d/rcS console::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot ::shutdown::/bin/umount -a -r ::shutdown::/sbin/swapoff -a
:每个指令的标识符,不能重复。但是对于 busybox 的 init 来说, 有着特殊意义。
对于 busybox 而言用来指定启动进程的控制 tty,一般我们将串口或者 LCD 屏幕设置为控
制 tty。
: 对 busybox 来说此项完全没用,所以空着。
:动作,用于指定可能用到的动作。
: 具体的动作,比如程序、脚本或命令等。
8、打包
至此,根文件系统构建完毕
将根文件系统进行打包:
tar -vjcf rootfs.tar.bz2 *
打包完成留作备用。
这篇关于嵌入式linux开发04-roottfs移植的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法