首页 > 其他分享 >buildroot 构建根文件系统

buildroot 构建根文件系统

时间:2023-08-24 19:23:04浏览次数:112  
标签:buildroot Toolchain Target 文件系统 --- 构建 linux 工具 arm

一、开发背景

  原开发板的文件系统拥有很大的冗余文件,需要裁剪文件系统或者根据需要定制文件系统

二、开发需求

  1、构造最小系统,支持基本指令,例如 cd、ls、tar 等基础指令

三、开发环境

  Linux Ubuntu 4.15.0-65-generic + buildroot-2023.02.3 + i.mx6d(cortex-A9)

  buildroot 下载:https://buildroot.org/download.html (推荐使用长支持版本)

四、配置步骤

  make menuconfig:打开图形界面配置

  需要配置的选项包括一下:

  Target options --->       目标选项--->

  Toolchain --->        工具链--->

  Build options --->          生成选项--->

  System configuration --->   系统配置--->

  Kernel --->           内核--->

  Target packages --->     目标包--->

  Filesystem images --->    文件系统映像--->

  Bootloaders --->       引导加载程序--->

  Host utilities --->       主机实用程序--->

  Legacy config options --->   旧版配置选项--->

  参考链接:https://ost.51cto.com/posts/10482

  1、Target options 

    (1)Target Architecture:选择处理器架构,涉及到文件的存储方式,选择 (ARM (little endian)) ,一般 arm 选择小端模式

    (2)Target Architecture Variant:选择内核核心,armv7a cores 架构下的 cortex-A9

    (3)Enable NEON SIMD extension support:SIMD(单指令多数据流),针对视频和音频的扩展指令集加速,这里先不使能,没有这方面需求 

        参考链接:https://blog.csdn.net/whatday/article/details/87111526

    (4)Enable VFP extension support:向量浮点运算支持,可以加速浮点运算,这里建议打开,后面才能选择 EABIhf,硬件浮点运算。

    (5)Target ABI:(ABI: Application Binary Interface)选择应用的二进制接口,由于上面打开了 VFP 支持,所以这里选择 EABIhf

         EABIhf:Embedded Application Binary Interface Hard Float,这个选项需要考虑和交叉编译工具链保持一致,我的交叉工具是 arm-linux-gnueabihf

    (6)Floating point strategy:浮点策略,VFPv3 和 VFPv3-D16中选择一个,VFPv3 提供 32 个单精度运算寄存器和 32 个双精度运算寄存器

        VFPv3 = VFPv3-D32,VFPv3-D16 即是在原来的基础上把双精度浮点运算从32个减半变成16个,减少了资源,这里先选择 VFPv3-D16,速度不够再提升

    (7)ARM instruction set:指令集,保险起见选择 arm 指令集,可以考虑 Thumb2 指令集

      arm 指令集是 32 bit 的,Thumb2 指令集兼容 16 bit 和 32 bit 指令

       (8)Target Binary Format:二进制格式,没得选,直接 ELF

     最后配置截图: 

   2、Toolchain

    编译工具链配置,这里使用自定义的编译工具链

    (1)Toolchain type:工具链类型,直接选择 External toolchain,即外部工具链,buildroot 也有交叉编译工具链,一般不用

    (2)Toolchain:选择自定义工具链,即 Custom toolchain,可以从其他平台下载,不过一般都是用本地的

    (3)Toolchain origin:工具链源,这里选择 Pre-installed toolchain,即已安装,后面提供路径即可,如果从其他平台下载,这里也有下载选项

    (4)Toolchain path:工具链路径,即交叉编译工具链路径,注意:需要按住 ctrl 键才能删除,例如:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf 

        实际可执行路径:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/,根据自己的路径填写

        快速查看工具链路径:which arm-linux-gnueabihf-gcc,关键字 which

    (5)Toolchain prefix:工具链前缀,根据自己的交叉编译工具链写,$(ARCH)-linux-gnueabihf ,源编译链:arm-linux-gnueabihf

    (6)External toolchain gcc version:工具链 gcc 版本,命令行输入 arm-linux-gnueabihf-gcc -v 查询填写

    (7)External toolchain kernel headers series:编译工具链的内核版本,这个比较麻烦,找到编译工具链源码文件 version.h

      cat /opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h  

      

       如上图,找到版本文件,将数字 263680 转换成 16 进制 = 40600,即版本号 :4.06.00

      (8)External toolchain C library:C 语言库支持库,可选 uClibc、glibc 和 musl,这里选择 glibc

      uClibc 属于微型库,功能简单,不支持内存管理;glibc 相对庞大而功能齐全;musl 相对较新,不常用

    (9)Toolchain has SSP support? (Stack Smashing Protector),即栈溢出保护,SSP是一项重要的安全措施,选择打开

    (10)Toolchain has RPC support? (Remote Procedure Call),即远程调用功能,一般结合 NFS 使用,选择打开

    (11)Toolchain has C++ support? 这个就不用多说了,直接打开

    (12)Toolchain has D support? 这里的 D 指的是 D 语言,也是编程语言的一种,不打开

    (13)Toolchain has Fortran support?  这里的 Fortran 也是编程语言的一种,不打开

    (14)Toolchain has OpenMP support? 这里的 OpenMP 是并行设计方法,不打开

    (15)Copy gdb server to the Target:把 GDB 服务器拷贝到系统中,可以远程调试软件,这里先打开(文件可能比较大),后续可以研究一下

    (16)Copy gconv libraries:用于字符编码转换,先不打开

    (17)Extra toolchain libraries to be copied to target:可以指定路径,把库拷贝到目标系统,后续可以添加相关路径

    (18)Target Optimizations:优化相关,用法未知

    (19)Target linker options:目标连接器,用法未知

    最后配置截图:

   3、Build options

    这部分基本不用改,保持默认

  4、System configuration

    (1)Root FS skeleton 根文件系统骨架,实际上只是选择配置方式,这里选择默认 default target skeleton

    (2)System hostname 系统名,还是修改一下,根据自己实际情况编写

    (3)System banner 系统启动的欢迎语,根据自己实际情况编写

    (4)/dev management 设备 U 盘的挂载方式,这里选择 Dynamic using devtmpfs + mdev

       mdev 是 eudev 的简化版,详细参考:https://blog.csdn.net/bjr2016/article/details/103220862/

    (5)Enable root login with password 默认登录账户名 root

    (6)Root password 设置密码,根据自己实际情况编写

    (7)Run a getty (login prompt) after boot 设置登录串口属性

      1)TTY port 串口号,可以定死串口号,例如 ttymxc0,保留 console,串口号由 uboot 指定

      2)Baudrate 设置波特率,可以设置,也可以又内核决定,即 keep kernel default  

    (8)其他的视情况配置

    最后配置截图:

   5、Kernel

    这里只是构建文件系统,不需要内核,取消选中

    最后配置截图: 

   6、Target packages

    这里是文件安装包打包,先不修改

  7、Filesystem images

    这里是配置镜像文件属性的,暂时不动

  8、Bootloaders

    这里可以配置 uboot 等引导程序,考虑到只构建文件系统,取消所有选项

    最后配置截图:

   9、Host utilities

    这里是主机应用相关配置,先不动

  10、Legacy config options

    这里是遗留的旧配置选项,先不动

   11、最后执行 make,目标生成文件在 ./output/images/rootfs.tar

标签:buildroot,Toolchain,Target,文件系统,---,构建,linux,工具,arm
From: https://www.cnblogs.com/yangjinghui/p/17649377.html

相关文章

  • Ubuntu22.04(禁用)彻底删除Snap以及出现“rm: 无法删除"XXX":只读文件系统”的解决方案
    Ubuntu22.04(禁用)彻底删除Snap以及出现”rm:无法删除"XXX":只读文件系统“的解决方案导语Snaps是Ubuntu的母公司Canonical于2016年4月发布Ubuntu16.04LTS(LongTermSupport,长期支持版)时引入的一种容器化的软件包格式。自Ubuntu16.04LTS起,Ubuntu操作系......
  • 八月更新 | CI 构建计划触发机制升级、制品扫描 SBOM 分析功能上线!
    点击链接了解详情这个八月,腾讯云CODINGDevOps对持续集成、制品管理、项目协同、平台权限等多个产品模块进行了升级改进,为用户提供更灵活便捷的使用体验。以下是CODING新功能速递,快来看看是否有您期待已久的功能特性:01CI构建计划触发机制升级在原有代码变更及合并请求......
  • 基于静态编译构建微服务应用
    作者:饶子昊(铖朴)Java的局限性传统的一个Java应用从代码编写到启动运行大致可以分为如下步骤:首先,编写.java源代码程序。然后,借助javac工具将.java文件翻译为.class的字节码,字节码是Java中非常重要的内容之一,正是因为它的出现,Java才实现对底层环境的屏蔽,达到Writ......
  • 随笔(三十)『Dockerfile 构建ubuntu镜像练习』
    1、将需要用的java8传到宿主机,同级目录下创建Dockerfile2、编写DockerfilevimDockerfile#基础镜像来自哪里FROMFROMubuntu#作者信息MAINTAINERMAINTAINERshendian#定义个环境变量ENVENVMYPATH/usr/local#进入容器后的位置WORKDIRWORKDIR$MYPATH#镜......
  • 要构建此项目,必须安装以下工作负载: wasm-tools
    要构建此项目,必须安装以下工作负载:wasm-tools要安装这些工作负载,请运行以下命令:dotnetworkloadrestore AdminAPP C:\ProgramFiles\dotnet\sdk\7.0.306\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targets 38在项目的目录cmd运行命令dotnetwor......
  • 使用 OpenTelemetry 构建可观测性 06 - 生态系统
    过去的五篇文章讨论了如何使用OpenTelemetry来构建可观测性的技术细节。我认为在本博文系列的结尾介绍有关OTel生态系统的信息,为读者提供更全面的了解非常重要。OpenTelemetry的发展非常迅速,对于刚接触它的人来说,可能会感到有些不知所措或困惑,不知道在哪里找到有效的信息或资......
  • 使用 OpenTelemetry 构建可观测性 05 - 传播和行李(Propagation & Baggage)
    我们开发的应用程序可能具有不同的形态和架构:有些是单体应用,有些是微服务。为单体应用程序添加遥测数据相对来说简单,因为所有数据都在同一进程中。然而对于微服务应用程序,情况可能会更具挑战性。通常,分布式微服务应用程序的不同服务之间仅通过网络连接。然而,当我们想要创建有效的......
  • 从数组中构建二叉树
    #include<iostream>#include<sstream>#include<stack>#include<vector>#include<queue>usingnamespacestd;structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode():val(0),left(nullptr),......
  • Jenkins 构建完 直接把包推送到 GitHub
    思路:在本地生成密钥,然后把公钥传到GitHub,然后在Jenkins中配置git 命令,让Jenkins自己构建完,直接推送官网连接:GeneratinganewSSHkeyandaddingittothessh-agent-GitHubEnterpriseServer3.7Docs1、在本地生成密钥粘贴下面的文本,替换您的GitHub企业服务器电......
  • 如何使用图形数据库构建实时推荐引擎
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景“这是给你的”,“为你推荐的”或“你可能也喜欢”,是大多数数字业务中必不可少的短语,特别是在电子商务或流媒体平台中。尽管它们看起来像一个简单的概念,但它们暗示了企业与客户互动和联系方式的新时代:推荐时代。老实说......