Buildroot系统构建学习笔记(以百问网imx6ullPro开发板为例)

一、Builroot是什么?

Buildroot是一组Makefile和补丁,可简化并自动化地为嵌入式系统构建完整的、可启动的Linux环境(包括bootloaderLinux内核、包含各种APP的文件系统)。Buildroot运行于Linux平台,可以使用交叉编译工具为多个目标板构建嵌入式Linux平台。Buildroot可以自动构建所需的交叉编译工具链,创建根文件系统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立组合。例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。

二、Buildroot目录架构 

三、Buildroot常用操作 

 四、基于百问网imx6ullPro开发实践

Buildroot 的配置选项简单介绍如下:

1.Target options 目标板的配置

目标选项。包括处理器体系结构、二进制文件格式、架构系列、ABI、浮点运算、指令集。

对应到我这里使用的I.MX6ULL,它的CPU架构是cortex-A7架构。

你如果用的是I.MX6D,那它对应的就是cortex-A9架构。

  • Target Architecture:目标架构,这里选择 ARM(little endian),ARM小端模式
  •  Target Binary Format:二进制格式,为 ELF
  • Target Architecture Variant:架构变体为 arm920t,内核类型
  • Target AB1:应用程序二进制接口,为EABI
  • Floating point strategy:浮点数的策略,选择为 NEON/VFPv4
  • ARM instruction set: arm 汇编指令集,选择 ARM

2.Build options

主要是一些编译时用到的选项,比如dl的路径,下载代码包使用的路径,同时运行多个编译的上限,是否使能编译器缓冲区等等,这里按照默认就行了.

3.Toolchain 工具链选项

交叉编译链。选择哪种编译链,包括 Buildroot 自身提供的和外部。

  • 内部工具链后端(internal toolchain backend), 在配置中称为 Buildroot toolchain
  • 外部工具链后端(external toolchain backend),在配置中称为 External toolchain

(1)内部工具链后端(internal toolchain backend)

内部工具链后端是 Buildroot 自己用来编译交叉编译工具链的后端,Buildroot 会在开始为目标系统编译东西之前,先为自己编译一个交叉编译工具链。

  • 该后端支持多种 C 库:uClibc-ng, glibc, musl、
  • 修改用来编译工具链的 Linux 内核头文件。编译交叉编译工具链的时候也会编译 C 库,C 库会提供从用户空间到内核的接口,而内核对外的系统调用、数据结构就写在内核头文件中,因此需要用头文件来编译 C 库,才能确保接口能够正常工作。因为内核对外的接口是向后兼容的,所以用来编译工具链的 Linux 内核头文件也并不是一定要和目标设备上要运行的内核版本完全一致,这些头文件的版本比实际使用的内核版本旧一点也没什么问题,但反过来就不行了——那样编出来的 C 库可能会用到内核没有提供的接口;
  • 修改 GCC、binutils、C 库的版本;
  • 选择一系列的工具链选项(仅 uClibc ):比如工具链是否要有 RPC 支持(主要用于 NFS),宽字符(wide-char)支持、本地化支持、C++ 以及多线程支持。修改这些选项会影响后续在 Buildroot 中可选的应用和库。还可以使用 make uclibc-menuconfig 来更细粒度地控制 C 库特性。
  • 注意:只要上面这些选项中有一个发生变化,那么就需要重新构建整个工具链和系统。

   此类后端的优点:

  • 与 Buildroot 完美集成
  • 速度快,只编译了必要的部分
  • 当进行 make clean 的时候需要重新构建工具链,非常耗时。如果想加快速度。建议使用外部工具链后端。

(2)外部工具链后端(external toolchain backend)

      外部工具链后端支持使用预编译好的交叉编译工具链。Buildroot 已经预先配置了一些常见的交叉编译工具链(用于 ARM 的 Linaro、用于 ARM 的 Sourcey CodeBench, x86-64, PowerPC, MIPS 等),Buildroot 可以自动下载这些与配置好的工具链,也可以直接使用已有的定制工具链。
有三种方式来使用外部工具链:
  • 让 Buildroot 基于预定义的外部工具链 profile 自动下载、安装。在 Toolchain 中选择已有的 profile 即可。
  • 为 Buildroot 手动指定提前安装好的、预定义了 profile 的工具链。在 Toolchain 中选择 profile 后,反选掉 Download toolchain automatically 并在 Toolchain path 中填写已有工具链路径即可。
  • 使用定制的外部工具链。通常用于使用 crosstool-NG 或 Buildroot 生成的已有定制工具链。选择 Toolchain 列表中的 Custom toolchain ,然后填写 Toolchain pathToolchain prefixExternal toolchain C librrary 选项。若外部工具链使用 glibc 库,只需要选择工具链是否支持 C++ 以及是否内建 RPC 支持即可。如果使用 uClibc 库,则还有宽字符、本地化、程序 invocation、线程支持等选项
  • 可以使用已经很成熟的已有工具链。
  • 不用在编译工具链上面再花(非常多的)时间了。
  • 除非是自己编的,否则如果工具链有 bug 则会非常难修。

(3)使用 Buildroot 构建外部工具链

  • 按照下面的步骤,可以创建一个外部工具链并打包

    新建 Buildroot 配置:

  • 为目标 CPU 架构选择对应的 Target options
  • 在 Toolchain 菜单中,Toolchain type 项选 Buildroot toolchain
  • 在 System configuration 菜单中, Init system 项选 None ,/bin/sh 也选 none
  • 在 Target packages 菜单中,不要启用 BusyBox
  • 在 Filesystem image 菜单中,不要启用 tar the root filesystem
  • 将 Toolchain type 选为 External toolchain
  • 将 Toolchain 选为 Custom toolchain
  • 将 Toolchain origin 选择 Toolchain to be downloaded and installed
  • 将 Toolchain URL 写为 file:///到sdk的tar包路径.tar.gz

4.配置 System configuration

 用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。

System configuration -> System hostname = Jasonangel //平台名字,自行设置 -> System banner = Welcome to xxxxx //欢迎语 -> Init system = BusyBox //使用 busybox -> /dev management = Dynamic using devtmpfs + mdev //使用 mdev -> [*] Enable root login with password (NEW) //使能登录密码 -> Root password = 123456 //登录密码为 123456 

5.配置 Filesystem images

此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

-> Filesystem images -> [*] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4 -> ext2/3/4 variant = ext4 //选择 ext4 格式 -> [*] ubi image containing an ubifs root filesystem //如果使用 NAND 的话就用 ubifs 

6、禁止编译 Linux 内核和 uboot

    buildroot 不仅仅能构建根文件系统,也可以编译 linux 内核和 uboot。当配置 buildroot,使能 linux 内核和 uboot 以后 buildroot 就会自动下载最新的 linux 内核和 uboot 源码并编译。但是我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要求,可能导致编译失败。因此我们需要配置 buildroot,关闭 linux 内核和 uboot 的编译,只使用buildroot 来构建根文件系统,首先是禁止 Linux 内核的编译,配置如下:

-> Kernel  -> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项! 

接着禁止编译 Uboot,配置如下:

-> Bootloaders  
-> [ ] U-Boot //不要选择编译 U-Boot 选项! 

7.配置 Target packages

此选项用于配置要选择的第三方库或软件、比如 alsa-utils、ffmpeg、iperf、ftp、ssh等工具,可以按需选择。

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件系统压缩包,我们可以直接使用。输入如下命令开始编译:

sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!! 

buildroot 编译过程会很耗时,请耐心等待!编译完成以后就会在 buildroot-2019.02.6/output/images 下生成根文件系统,即可使用。

编译过程需要一定的额外内存,注意需要留好内存,否则会报错如下:

g++: internal compiler error: Killed (program cc1plus) 
Please submit a full bug report 

8.buildroot 下的 busybox 配置

buildroot 在构建根文件系统的时候也是要用到 busybox 的,既然用到了 busybox 那么就涉及到 busybox 的配置。buildroot 会自动下载 busybox 压缩包,buildroot 下载的源码压缩包都存放在/dl 目录下,在 dl 目录下就有一个叫做“busybox”的文件夹,此目录下保存着 busybox 压缩包。

在 buildroot下打开 busybox 的配置界面输入如下命令:

sudo make busybox-menuconfig 

输入以后就会打开 buildroot 下的 busybox 配置界面,需要什么功能,使能即可。可以在busybox中修改文件,使其对中文支持,这一点可以百度设置。

编译完毕以后,会生成 rootfs.tar,拷贝出来以后,可以对其进行解压然后使用nfs挂载到板子上,或者直接使用SD卡烧录。编译出来的文件系统即可使用,如果需要什么命令和工具,在 make menuconfig 中使能再次编译即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沉思录 (梁实秋)

链接:https://pan.quark.cn/s/8e27564b02f5

Python 检测当前系统的内存及硬盘资源,发送邮件告警通知(告警内容包含告警语句及网卡和系统版本时间)

颜色块 rootbogon:~ 2024-04-18 16:16:40# cat DefaultColor.py ######################################################################### # File Name: DefaultColor.py # Author: eight # Mail: 18847097110163.com # Created Time: Thu 11 Apr 2024 10:…

H3C之GRE VPN

华子目录 GRE实验测试 MGRE实验 GRE实验 第一步&#xff1a;接口配置IP地址 <H3C>sys System View: return to User View with CtrlZ. [H3C]sysname r1 [r1]int g0/0 [r1-GigabitEthernet0/0]ip add 192.168.1.1 24 [r1-GigabitEthernet0/0]int g0/1 [r1-GigabitEtherne…

短视频素材哪里去找?推荐几个视频素材免费下载的网站

高质量的资源&#xff0c;会让你的视频创作更加生动和具有吸引力。下面我为你介绍世界各地的优质无水印视频素材网站&#xff0c;以拓宽你的创作视野&#xff0c;帮助你在这个视觉革命的时代中脱颖而出。 1. 蛙学府&#xff08;中国&#xff09; 提供各种类别的优质高清视频素…

视频监控平台的web客户端看到的视频画面是黑屏时的处理方法

目录 一、问题描述 二、问题分析 &#xff08;一&#xff09;总体分析 &#xff08;二&#xff09;视频流传输问题的原因分析 1、网络问题 2、设备问题 3、配置和设置问题 4、兼容性问题 三、诊断和排查步骤 &#xff08;一&#xff09;编码方式问题的处理办法 &…

Redis中的订阅发布(一)

订阅发布 概述 Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过执行SUBSCRIBER命令&#xff0c;客户端可以订阅一个或多个频道&#xff0c;从而成为这些频道的订阅者(subscribe)&#xff1a; 每当有其他客户端向被订阅的频道发送消息(message)时&…

同旺科技 USB TO SPI / I2C适配器读写24LC256--页写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版&#xff1b; 从00地址开始写入64个字节&#xff0c;然后再将64个字节读回&#xff1b; 页写时序&#xff1a; 读时序&#xff1a…

iOS开发 刻度盘 仪表盘,圆点按钮滑动控制,渐变色

最近项目需要&#xff0c;想做一个渐变色的刻度盘&#xff0c;圆形按钮滑动控制&#xff0c;所以 用oc写了一下&#xff0c;代码没附上&#xff0c;想看代码可以私信联系&#xff0c;效果如下图。 部分代码 self.drawCenter CGPointMake(self.frame.size.width / 2.0, self.f…

姑苏寻韵~庆开放原子开源大赛 OpenTiny 前端 Web 应用开发挑战赛路演圆满落幕。

春日已至&#xff0c;姑苏古城迎来了一场编程的盛宴——开放原子开源大赛OpenTiny前端Web应用开发挑战赛。历时三个月的激烈角逐&#xff0c;OpenTiny与众多开发者携手共赴这场智慧的较量。决赛路演于4月14日在苏州&#xff08;太湖&#xff09;产业软件园圆满落下帷幕~ 开放原…

rabbitmq 使用SAC队列实现顺序消息

rabbitmq 使用SAC队列实现顺序消息 前提 SAC: single active consumer, 是指如果有多个实例&#xff0c;只允许其中一个实例消费&#xff0c;其他实例为空闲 目的 实现消息顺序消费&#xff0c;操作&#xff1a; 创建4个SAC队列,消息的路由key 取队列个数模&#xff0c;这…

Python可视化数据分析-柱状图/折线图

一、前言 使用python编写一个图表生成器&#xff0c;输入各公司的不良品数量&#xff0c;可以在一张图中同时展示数据的柱状图和折线图。 效果如下&#xff1a; 二、基础知识 绘制折线图和柱状图主要使用到了 pyecharts.charts 模块中的 Line 和 Bar 类。它们允许用户通过简…

完整、免费的把pdf转word文档

在线工具网 https://www.orcc.online/pdf 支持pdf转word&#xff0c;免费、完整、快捷 登录网站 https://orcc.online/pdf 选择需要转换的pdf文件&#xff1a; 等待转换完成 点击蓝色文件即可下载 无限制&#xff0c;完整转换。

动态IP与静态IP的区别,你选对了吗?

在互联网世界中&#xff0c;IP地址是每台设备在网络上的唯一标识。这些地址可以是动态的&#xff0c;也可以是静态的。对于非专业人士来说&#xff0c;理解这两者之间的区别可能会有些困难。本文旨在深入探讨动态IP和静态IP的主要差异&#xff0c;帮助读者根据自己的需求做出明…

Golang | Leetcode Golang题解之第37题解数独

题目&#xff1a; 题解&#xff1a; func solveSudoku(board [][]byte) {var line, column [9][9]boolvar block [3][3][9]boolvar spaces [][2]intfor i, row : range board {for j, b : range row {if b . {spaces append(spaces, [2]int{i, j})} else {digit : b - 1line…

docker网路和主机通讯问题

#注 1&#xff0c;安装docker和启动容器服务的时候如果防火墙处于开启状态&#xff0c;那么重启docker里面的容器的时候必须开启防火墙&#xff0c;否则会出现iptable错误&#xff1b; 2&#xff0c;linux开启防火墙会导致主机和docker网络之间单向通讯&#xff0c;主机可以访…

一周IT资讯

又降了&#xff1f;运维4月平均月薪1W6&#xff1f; 薪资作为大部分人的主要收入来源&#xff0c;是每个人最关注的话题之一。 最近&#xff0c;小编搜索了近半年的运维薪资趋势&#xff0c;看看你的钱包缩水了没&#xff1f; *数据来自看准网 据了解&#xff0c;运维2024年…

单链表详解(无哨兵位),实现增删改查

1.顺序表对比单链表的缺点 中间或头部插入时&#xff0c;需要移动数据再插入&#xff0c;如果数据庞大会导致效率降低每次增容就需要申请空间&#xff0c;而且需要拷贝数据&#xff0c;释放旧空间增容造成浪费&#xff0c;因为一般都是以2倍增容 2.链表的基础知识 链表也是线…

LeetCode---128双周赛

题目列表 3110. 字符串的分数 3111. 覆盖所有点的最少矩形数目 3112. 访问消失节点的最少时间 3113. 边界元素是最大值的子数组数目 一、字符串的分数 按照题目要求&#xff0c;直接模拟遍历即可&#xff0c;代码如下 class Solution { public:int scoreOfString(string …

如何使用ArcGIS Pro进行路径分析

路径分析是一种空间分析技术&#xff0c;用于确定两个或多个地点之间最佳路径或最短路径&#xff0c;这里为大家介绍一下在ArcGIS Pro中如何进行路径分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的道路数据&#xff0c;除了道路数据&a…

阿里TTl使用管理日志

在管理日志的时候我们需要查看生成日志都是那些人干了那些事&#xff0c;那么怎么在日志上查看这些事情呢&#xff0c;首先呢可以直接使用Slf4j,然后再配置文件里配置一下 #日志文件最大上限 logging.file.max-size100MB #日志文件存储位置 logging.file.path./logs #日志文件…