Linux 基于buildroot移植根文件系统

简介

rootfs(root file system根文件系统),是一个文件系统,内核启动过后第一个挂载它,kernel会引导程序加载一些文件系统中的脚本和服务进行初始化。
Linux支持多种文件系统:ext3(extended file system)、nfs(network file system)、jffs、romfs(只读文件系统,可通过ramdisk访问)。
VFS(虚拟文件系统):对不同的文件系统做一个抽象,提供统一的API访问接口。
嵌入式文件系统构建工具:busybox、buildroot、Yocto。

buildroot简介

BusyBox 是一个集成了大量的 Linux 命令和工具的软件,例如ls,mv,ifconfig。但是但是要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。如果想做一个极简的文件系统,可以使用Busybox手工制作。
Buildroot它是一个自动化程序很高的系统,可以在里面配置、编译内核,配置编译u-boot、配置编译根文件系统。在编译某些APP时(比如tftp sqlite),它会自动去下载源码、下载它的依赖库,自动编译这些程序。语法也类似Makefile,容易掌握。
buildroot下载位置:https://buildroot.org/downloads/
buildroot使用手册:https://buildroot.org/downloads/manual/manual.html

移植目标

  1. 下载编译生成根文件系统。
  2. 配置,添加所需服务,如tftp、can等;去掉不需要的服务功能。
  3. 添加脚本,系统启动时,能正确加载并启动应用程序;

编译构建根文件系统

  1. 下载解压根buildroot。

  2. 在configs目录下找到的相近的配置atmel_sama5d3xek_deconfig。执行“make atmel_sama5d3xek_deconfig”编译生成配置文件.config(在linux下为隐藏文件,执行ls –a可以查看到)。

  3. 在buildroot第一级目录下,执行“make menuconfig”命令进入图形化配置界面。修改如下配置:
    ①” Target options(目标配置)”->” Target ABI”设置为” EABI”,应用程序二进制接口为EABI。
    ②“Target options”->” ARM instruction set”设置为“ARM”,arm汇编指令集选择为ARM。
    ③“Toolchain(工具链)”->“GCC compiler Version”选择“gcc 4.8.x”,选择gcc编译器版本。
    ④“Filesystem imge(文件系统镜像)”->选中” cpio the root filesystem”,设置文件系统镜像类型。
    ⑤”Filesystem image”->选中“ext2/3/4 rootfilesystem”,次选项选择” ext2/3/4 variant (ext2(rev0))”。
    ⑥“Filesystem image”-> “Compression method”选中”bzip2”,在kernel中配置过文件系统的压缩格式为bzip2,需要与之对应。
    ⑦“Bootloaders”下取消所有选择。
    ⑧“Target packages”->”Networing applications”中选中”can-utils”、”ethtool”(用于获取以太网信息,修改配置等)、“lrzsz”(支持rz sz指令Ymodem传输文件)。
    在这里插入图片描述

  4. 保存并退出配置界面,执行“make clean”清除编译信息,执行“make”编译buildroot。编译过程可能需要联网进行服务的下载,所以要保持在网。
    在这里插入图片描述

  5. 编译完成过后,在“output/images/”目录下生成rootfs镜像文件rootfs.ext2.bz2。(编译需要几十分钟)
    在这里插入图片描述

  6. 裁剪文件系统,去掉除英文和中文以外的其他语言支持,编译完成后,进入“output/targe/usr/share/locale”目录,除保留“en@boldquot”、“en@quot”、“en@shaw”、“en_CA”、“en_GB”、“zh_CN”、“zh_HK”、“zh_TW”目录和“locale.alias”文件外,该目录内的其它子目录和文件全部删除。

  7. 重新执行make,这个过程比较快,再次编译出来的镜像文件小了很多.

  8. 下载运行。

增加自启动脚本

编译生成镜像文件之后,如果需要修改目标架构,可以在output/target中修改,修改过后执行make重新打包。
在这里插入图片描述

/etc/init.d/rcS是个shell脚本,Linux系统启动过后会自动运行/etc/init.d/rcS脚本。
如果程序开机需要运行自己的程序,则可以在rcS中添加执行。

常见问题

  1. make过后,弹出LD_LIBRARY_PATH environment variable. This doesn’t work.错误,执行unset LD_LIBRARY_PATH指令。
  2. 弹出“Permission denied”错误或“write error”错误,是因为文件用户组不对,可以输入ls –l查看。执行sudo chown –R xxx:xxx *修改文件目录和用户组。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值