ARM buildroot 的引入
一、X210 的 bsp 介绍
1、嵌入式 linux 产品的 bsp 介绍
(1) 大部分的 ARM 架构的 linux 平台的 bsp 的内容和结构都是相似的。
(2) bsp 一般是芯片厂家/板卡厂家提供的。
2、X210 的 linux+QT bsp 整体介绍


(1) tslib_x210_qtopia.tgz 是用来支持 QT 的触摸屏操作的应用层库。
(2) xboot 和 uboot 是 X210 支持的 2 个 bootloader 源代码。kernel 文件夹中是内核源代码,buildroot 文件夹是用来构建根文件系统的文件夹。 tools 里是一些有用工具。
(3) mk 脚本是用来管理和编译整个 bsp 的。
3、mk 的帮助信息
(1) linux 下的惯例就是,执行程序时加 -h 或者 --help,就可以看到这个程序执行的帮助信息。

(2) mk 脚本的主要作用是编译 bsp 中的所有的源代码(包括 bootloader、kernel、rootfs等),但是我们可以完整编译也可以部分编译,我们通过执行 mk 后面加不同的参数来指定 mk 脚本去编译相应的部分。
譬如:
mk -a 即可编译所有的bsp源代码
mk -x 即可只编译xboot
mk -ui 即可只编译uboot针对inand版本开发板的源代码
mk -r 即可只编译buildroot,-r只是得到了文件夹形式的rootfs,并没有将其制作成镜像文件。
mk -re 即可编译buildroot并且制作得到ext3格式的rootfs镜像
mk -rj 即可编译buildroot并且制作得到jffs2格式的rootfs镜像
4、工作示例
(1) 编译 uboot: ./mk -ui

(2) 编译内核: ./mk --kernel

注:./mk 和 mk 都是执行 mk 这个脚本文件,区别在于 ./mk 是带路径的,mk 是不带路径的。
还有 source mk,这个和前两个的区别是:source 执行时,不需要 mk 文件具有可执行权限,而前面两种要求 mk 必须在当前用户下具有可执行权限。
二、mk 文件分析
1、shell 程序结构
(1) shell 脚本程序分为:变量定义、函数、代码。shell 脚本程序的结构非常类似于C语言程序。

(2) shell 程序和 C 语言程序很大的一个差别就是:shell 没有 main 函数,shell 脚本执行时也是先执行主函数的,不过主函数没有放在一个类似于 main 这样的函数中,而是直接放在全局下的一些代码。
(3) shell 程序执行时,首先执行变量定义,然后执行主函数,其他函数在主函数代码中被调用执行。
2、主函数
(1) 上节课说过,mk 可以编译整个 bsp 的源代码,也可以只编译其中一部分。怎么实现控制编译哪个,不编译哪个?
实现原理就是:用一个函数来完成编译一个(譬如编译内核用 build_kernel 函数,编译 inand 的 uboot 用 build_bootloader_uboot_inand),然后用相应的一些变量,来控制这个函数要不要被编译(譬如 uboot_inand 变量=yes ,就表示要编译 inand 版本的 uboot,=no 就表示不要编译),我们编译时通过 -xxxxx 来传参时,这些传参会影响这些变量的值 =yes或者 =no。

(2) 如果我们直接 ./ mk并不传参,则 $1 为空,这时候按照一套默认的配置来编译。

3、各个源文件的编译函数

三、buildroot 引入
1、buildroot作用介绍
(1) 之前自己从零开始构建根文件系统,一路下来事情还挺多,步骤比较麻烦。
(2) 交叉编译工具链 arm-linux-gcc,我们目前都是从 soc 官方直接拿来使用的,官方的工具链从何而来?实际上交叉编译工具链都是由 gcc 配置编译生成的,这个配置编译过程比较复杂,一般人自己去配置编译得到自己的交叉编译工具链是比较麻烦的, 所以经常都是用别人做好的。
(3) buildroot 就是一个集成包,这个包里集成了交叉编译工具链的制作,以及整个 rootfs 的配置编译过程。 也就是说,使用 buildroot 可以很简便的得到一个 做好的 文件夹形式的 根文件系统。
(4) buildroot 将很多东西集成进来后,移植了 linux kernel 的 make xxx_defconfig + make menuconfig 的 2 步配置法,我们可以在 buildroot 的配置界面下完成 集成在里边的所有东西的配置,然后直接 make 就可以最终得到文件夹形式的 rootfs。
2、make x210_defconfig
(1) 先 make xxx_defconfig

(2) make menuconfig
其实 x210_deconfig 中,九鼎已经帮我们移植好了相应的配置 CONFIG_XXX。所以说,这一步可以不做。
(3) make
3、make 及其错误解决
(1) 直接 make 会遇到很多错误,这些错误原因都是因为 ubuntu 中缺乏一些必要软件包造成的。解决方案是先安装这些必要的软件包。
(2) 编译过程会需要从网上下载一些软件包,因此整个编译过程需要在联网状态下进行。
编译buildroot的错误解决方案(环境为ubuntu14.04)(1)配置
make x210ii_defconfig(2)安装需要的软件包
sudo apt-get install g++ bison flex texinfo git hgsubversion whois(3)编译
make-----------------------------------------------------------------
以下是我直接编译时遇到的错误及其解决过程,希望对大家有所帮助。错误1、You may have to install 'g++' on your build machineYou must install 'bison' on your build machinemake: *** [core-dependencies] Error 1解决:
安装g++: sudo apt-get install g++
安装bison: sudo apt-get install bison(3)再次make
错误2、You must install 'flex' on your build machine解决:
安装bison: sudo apt-get install flex(4)再次make
错误3、You must install 'makeinfo' on your build machine
makeinfo is usually part of the texinfo package in your distribution解决:
安装makeinfo: sudo apt-get install makeinfo提示:Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package makeinfo解决:看错误3的提示信息中,有提示makeinfo是texinfo的一部分,因此尝试安装texinfo替代: sudo apt-get install texinfo(5)再次make
错误4、You must install 'git' on your build machine解决:
安装git: sudo apt-get install git(6)再次make
错误5、You must install 'hg' on your build machine解决:
安装git: sudo apt-get install hg提示:Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package hg解决:
首先使用:apt-cache search hg查找和hg有关的安装包,在查找到的列表中发现有hgsubversion,于是安装这个替代,命令为:sudo apt-get install hgsubversion(7)再次make
错误6、You need the 'mkpasswd' utility to set the root password(in Debian/ubuntu, 'mkpasswd' provided by the whois package)解决:
根据提示信息,安装whois: sudo apt-get install whois
《编译buildroot中的错误及解决方案记录》
4、编译后结果查看与分析
(1) 编译后生成的文件夹格式的 rootfs,在 buildroot/output/images/rootfs.tar。我们将其复制到了根目录下的 release 目录下去,这个文件就是一个完整的可以工作的文件夹形式的 rootfs。

源自朱友鹏老师.
相关文章:
ARM buildroot 的引入
一、X210 的 bsp 介绍 1、嵌入式 linux 产品的 bsp 介绍 (1) 大部分的 ARM 架构的 linux 平台的 bsp 的内容和结构都是相似的。 (2) bsp 一般是芯片厂家/板卡厂家提供的。 2、X210 的 linuxQT bsp 整体介绍 (1) tslib_x210_qtopia.tgz 是用来支持 QT 的触摸屏操作的应用层库。…...
Fancy 的区间(C++)(前缀和差分)
目录 1.题目描述 2.AC 1.题目描述 Fancy 的区间 时间限制: 1.000 Sec 内存限制: 128 MB 题目描述 省选终于考完了,但是还是不出成绩,Fancy 非常焦急而忧伤的等待着。 闲着无聊的 Fancy 打开书包拿出了一张纸和一支笔,在纸上画了一行n个…...
06 【Sass语法介绍-函数】
这篇文章只更新了颜色函数,由于Sass使用时间过短,其它函数参考官网 1.前言 Sass 中的函数,这在 Sass 中是比较强大的一个功能,同时使用场景和语法也比较多,所以本节内容篇幅较长,但你一定要好好学习&#…...
入参校验产品化 schema
与规则引擎不同,规则面向技术, 传入data, 返回 所有异常字段和原因. 面向技术, 先有对象,再有规则, 如何通过交互来编写schema是个难题? 和json-schema区别: 思路上就是反过来的, 面相产品, schema可视化编辑器, 是面向结构设计. 现有模型,才有数据, 才可以编程. 基于配置…...
【Linux】7、一篇文章学习 Linux 中一些硬核的常用知识
目录 一、systemctl二、软链接三、日期(date 命令)四、Linux 的时区(1) 修改时区(2) ntp 五、IP 地址六、主机名七、域名解析八、配置 Linux 的固定 IP 地址(1) 在 VMwareWorkstation 中配置 IP 地址网关和网段(IP 地址的范围)(2)…...
gpt4-如何使用
gpt-4怎么用 目前,GPT-4尚未发布或公开释放。因此,我们目前无法使用GPT-4。GPT-4是由OpenAI公司开发的人工智能语言模型,其预计能够比先前的版本GPT-3更加强大和智能化,但我们需要等待OpenAI官方发布有关GPT-4的更多信息。 如果您…...
定时每天凌晨一点在linux系统上执行一个autobuild.sh脚本如何实现?
定时每天凌晨一点在linux系统上执行一个autobuild.sh脚本如何实现? 可以使用linux的计划任务功能crontab来实现定时执行脚本。 具体步骤如下: 编辑crontab计划任务列表: bash crontab -e 这会打开一个文本编辑器,你可以在里面添加计划任务。添加一行计划任务,内容如…...
C++ 设计模式23:访问者模式
C++ 23种设计模式系列文章目录 创建型模式 第1式 工厂方法模式 第2式 抽象工厂模式 第3式 单例模式 第4式 建造者模式 第5式 原型模式 结构型模式 第6式 适配器模式 第7式 桥接模式 第8式 组合模式 第9式 装饰器模式...
使用python实现葡萄酒威士忌风味特征分类
聚类威士忌 目的和描述:苏格兰威士忌因其复杂性和多样化的风味而备受推崇。据信,生产它的苏格兰地区具有独特的风味特征。在本案例研究中,我们将根据苏格兰威士忌的风味特征对其进行分类。我们将使用的数据集包含来自几个酿酒厂的精选苏格兰威士忌,我们将尝试将威士忌聚类…...
代理IP(代理服务器)的作用和注意事项
代理IP(也称代理服务器)是一种网络技术,可以用来隐藏用户的真实IP地址并代替其发起网络请求。这种技术在许多场景下都有广泛的应用,如加速网络访问、保护个人隐私、绕过地理限制等。下面将详细介绍代理IP的原理和应用。 原理 代理…...
问题解决 | Failed to initialize NVML: Driver/library version mismatch
问题描述: Ubuntu20.04服务器上,一个docker容器正在训练模型,打开另外一个docker容器时,出现以下错误 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to st…...
ThinkPHP模型操作上
ThinkPHP模型操作上 前言模型一、创建模型二、模型操作 总结 前言 在mvc架构中,模型的解释是写逻辑代码的地方,其实还可以这样理解,就是一串操作写在一个模型类中,就是你要完成某一项功能,将这个功能的代码写在一个mod…...
053:cesium显示网格切片标识,展示X、Y、Level 坐标
第053个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载瓦片网格切分标识地图。,它在切片方案中的每个渲染图块周围绘制一个框,并在其中绘制一个标签,指示图块的 X、Y、Level 坐标。 这主要用于调试地形和图像渲染问题。 直接复制下面的 vue+cesium源代码,操…...
FPGA基于XDMA实现PCIE X8视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持
目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PC…...
简单的redis master slave 配置
只做一个简单的master - slave 配置,新手试炼配置用。使用windows系统 master 配置 redis 默认,密码为空。首先配置redis(for master)的密码。 修改安装目录下的redis.windows.conf文件,搜索到requirepass, # requirepass foob…...
MySQL高级第十七篇:数据库主从复制原理及保证数据一致性
MySQL高级第十七篇:数据库主从复制原理及保证数据一致性 一、概述1. 提升数据库的并发能力2. 主从复制的作用? 二、主从复制原理三、搭建一主一从环境四、如何解决数据一致性问题?1. 方案一、异步复制2. 方案二、半同步复制3. 方案三、组复制…...
PM不想做项目管理了,还能干点啥?
做项目经理太累了! 那么 不做项目经理还能做什么呢? 01 铁锅批发商 毕竟 当项目经理的时候 已经囤积了成百上千口锅 十年背锅经验不是瞎吹 并且可现场演示铁锅烙饼 老板亲授,真实还原,充饥必备 02 Office优化师 当项目…...
Java面试被问Spring哑口无言?100道Spring面试考点解析
对于开发同学来说,Spring 框架熟悉又陌生。 熟悉:开发过程中无时无刻不在使用 Spring 的知识点;陌生:对于基本理论知识疏于整理与记忆。导致很多同学面试时对于 Spring 相关的题目知其答案,但表达不够完整准确。今天展…...
2023年制造业产品经理NPDP认证报名找弘博创新
产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…...
Linux基础命令和基础知识总结
1. 常用文件管理命令介绍 (1) ctrl c: 取消命令,并且换行 (2) ctrl u: 清空本行命令 (3) tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项 (4) ls: 列出当前目录下所有文件,蓝色的是文件夹&…...
Neo4j关系创建失败?手把手教你处理GraphRAG生成的异常ID格式(含正则清洗技巧)
Neo4j关系创建失败?手把手教你处理GraphRAG生成的异常ID格式(含正则清洗技巧) 当你满怀期待地将GraphRAG生成的知识图谱数据导入Neo4j,准备欣赏可视化成果时,却发现关系创建失败——这可能是每个数据工程师都经历过的噩…...
集成Touchgal与快马平台,高效开发移动端富交互图片浏览组件
集成Touchgal与快马平台,高效开发移动端富交互图片浏览组件 最近在开发一个电商项目时,遇到了一个常见需求:商品详情页的图片浏览组件需要支持各种手势操作。传统的做法是从零开始编写手势识别逻辑,但这样不仅耗时,还…...
提升协作效率:KityMinder云同步功能全链路应用指南
提升协作效率:KityMinder云同步功能全链路应用指南 【免费下载链接】kityminder 百度脑图 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder 思维导图云协作是现代团队知识管理与项目协作的核心需求。KityMinder作为百度推出的专业思维导图工具&…...
Redis持久化:从AOF到RDB,如何实现数据不丢失?
Redis属于内存数据库,但为了防止宕机等导致的数据丢失,也有对应的数据持久化技术。持久化主要作用就是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。 AOF持久化 Append Only File 类似于Mysql的binlog日志类似&…...
vLLM-v0.17.1GPU优化:显存碎片率<5%的PagedAttention内存管理实录
vLLM-v0.17.1 GPU优化:显存碎片率<5%的PagedAttention内存管理实录 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已经发展成为一个由学术界和工业界共同…...
ClickHouse配置优化实战:关键参数详解与性能调优指南
1. ClickHouse配置优化的核心逻辑 ClickHouse作为一款高性能的OLAP数据库,其配置优化需要遵循三个黄金法则:资源隔离、瓶颈定位和场景适配。我见过太多团队一上来就盲目调整参数,结果反而导致性能下降。正确的做法应该是先理解系统行为&#…...
从变砖到重生:红魔全系9008深度救砖指南与实战解析
1. 什么是9008模式?为什么能救砖? 当你发现红魔手机卡在开机界面、反复重启甚至完全黑屏时,大概率是遇到了传说中的"变砖"。这时候高通芯片隐藏的9008模式就是最后的救命稻草。简单来说,9008模式相当于电脑的BIOS界面&…...
5步快速上手:百度网盘直链解析工具实现高速下载
5步快速上手:百度网盘直链解析工具实现高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度限制而烦恼吗?百度网盘直链解…...
如何快速实现Tale博客系统国际化:多语言博客搭建完整指南
如何快速实现Tale博客系统国际化:多语言博客搭建完整指南 【免费下载链接】tale 🦄 Best beautiful java blog, worth a try 项目地址: https://gitcode.com/gh_mirrors/ta/tale Tale博客系统是一款优雅的Java博客程序,提供了强大的内…...
舰艇推进电机供电流程优化方案
舰艇推进电机供电流程优化方案 第一章 绪论 1.1 背景与意义 现代舰艇(如驱逐舰、潜艇、全电推进船舶)广泛采用综合电力系统。传统的供电流程中,推进电机作为最大的非线性负载,其负载突变(如急加速、倒车、波浪冲击导致的螺旋桨甩尾)会通过直流母线回馈至发电机组,导致…...
