buildroot添加自定义应用过程

发布时间:2026/9/9 18:29:31

buildroot添加自定义应用过程 ---## 场景设定我们要为嵌入式系统添加一个名为 hello-buildroot 的应用它会向控制台打印 Hello from Buildroot!。### 项目结构~/my_project/├── buildroot/ # Buildroot源码树└── app_src/ # 外部应用源码└── hello-buildroot/├── hello.c├── Makefile└── README---## 第一阶段准备应用源码### 1. 创建应用源码**创建应用目录**bashmkdir -p ~/my_project/app_src/hello-buildrootcd ~/my_project/app_src/hello-buildroot**编写 hello.c**c#include stdio.h#include unistd.hint main(int argc, char **argv) {int count 0;printf(Hello from Buildroot!\n);printf(Application running on: );// 打印系统信息#ifdef __linux__printf(Linux);#endif#ifdef __arm__printf( (ARM architecture));#endif#ifdef __x86_64__printf( (x86_64 architecture));#endifprintf(\n\n);// 每秒打印一次当前计数演示程序在运行while(1) {printf(Count: %d\n, count);sleep(1);}return 0;}**编写 Makefile**makefile# 交叉编译工具链变量将由Buildroot自动传入CC $(TARGET_CC)CFLAGS -Wall -O2LDFLAGS TARGET hello-buildrootSOURCES hello.cOBJECTS $(SOURCES:.c.o)all: $(TARGET)$(TARGET): $(OBJECTS)$(CC) $(CFLAGS) -o $ $^ $(LDFLAGS)%.o: %.c$(CC) $(CFLAGS) -c -o $ $clean:rm -f $(OBJECTS) $(TARGET)install:# 安装到目标系统由Buildroot的INSTALL_TARGET_CMDS处理echo Manual install handled by Buildroot.PHONY: all clean install---## 第二阶段创建Buildroot软件包### 2. 创建包目录结构bashcd ~/my_project/buildrootmkdir -p package/hello-buildroot### 3. 编写 Config.in在 package/hello-buildroot/Config.in 中添加kconfigconfig BR2_PACKAGE_HELLO_BUILDROOTbool hello-buildroothelpA simple demo application that prints Hello from Buildroot!This package demonstrates how to add a custom applicationto the Buildroot system.https://example.com/hello-buildroot### 4. 编写 hello-buildroot.mk这是最关键的文件定义如何构建和安装应用。makefile################################################################################# hello-buildroot################################################################################# 版本号可以是日期、git hash或自定义版本HELLO_BUILDROOT_VERSION 1.0.0# 源码位置使用本地源码外部目录HELLO_BUILDROOT_SITE $(TOPDIR)/../app_src/hello-buildrootHELLO_BUILDROOT_SITE_METHOD local# 许可证信息HELLO_BUILDROOT_LICENSE MITHELLO_BUILDROOT_LICENSE_FILES README# 依赖项如果有的话# HELLO_BUILDROOT_DEPENDENCIES libfoo libbar# 定义构建命令define HELLO_BUILDROOT_BUILD_CMDS# $(D) 是解压后的源码目录# 使用Buildroot的交叉编译工具链$(MAKE) CC$(TARGET_CC) LD$(TARGET_LD) \CFLAGS$(TARGET_CFLAGS) \LDFLAGS$(TARGET_LDFLAGS) \-C $(D) allendef# 定义安装到目标系统的命令define HELLO_BUILDROOT_INSTALL_TARGET_CMDS# 创建目标目录如果不存在mkdir -p $(TARGET_DIR)/usr/bin# 安装二进制文件$(INSTALL) -D -m 0755 $(D)/hello-buildroot $(TARGET_DIR)/usr/bin/hello-buildroot# 可选创建配置文件或数据文件# mkdir -p $(TARGET_DIR)/etc/hello# $(INSTALL) -D -m 0644 $(D)/hello.conf $(TARGET_DIR)/etc/hello/hello.confendef# 可选安装到 staging用于开发头文件/库# define HELLO_BUILDROOT_INSTALL_STAGING_CMDS# $(INSTALL) -D -m 0644 $(D)/hello.h $(STAGING_DIR)/usr/include/hello.h# endef# 注册包类型generic是最通用的$(eval $(generic-package))### 5. 将包注册到Buildroot主配置编辑 package/Config.in添加你的包bash# 在合适位置添加比如在 Custom packages 菜单下vi package/Config.in找到合适位置例如文件末尾添加kconfigmenu Custom packagessource package/hello-buildroot/Config.inendmenu---## 第三阶段构建系统### 6. 配置Buildroot进入Buildroot配置界面bashcd ~/my_project/buildroot# 如果没有配置过先选择目标平台以QEMU ARM为例make qemu_arm_vexpress_defconfig# 打开menuconfig选择你的应用make menuconfig在menuconfig中导航到Target packages ---Custom packages ---[*] hello-buildroot保存并退出。### 7. 构建整个系统bash# 开始构建首次会比较慢因为要下载很多依赖make构建完成后输出文件在 output/images/。---## 第四阶段验证安装### 8. 检查安装结果**查看构建日志**bash# 查看是否编译了hello-buildrootgrep hello-buildroot output/build/build-time.log# 查看安装的文件ls -la output/target/usr/bin/hello-buildrootfile output/target/usr/bin/hello-buildroot**查看根文件系统镜像内容**bash# 如果使用ext4格式mkdir -p /tmp/rootfs_checksudo mount -o loop output/images/rootfs.ext4 /tmp/rootfs_checkls -la /tmp/rootfs_check/usr/bin/hello-buildrootsudo umount /tmp/rootfs_check**查看最终的镜像大小**bashls -lh output/images/rootfs.*---## 第五阶段测试运行### 9. 在QEMU中测试假设使用ARM平台bash# 启动QEMU模拟器qemu-system-arm -M vexpress-a9 \-kernel output/images/zImage \-dtb output/images/vexpress-v2p-ca9.dtb \-append root/dev/mmcblk0 consolettyAMA0 \-drive fileoutput/images/rootfs.ext4,ifsd,formatraw \-nographic# 在QEMU中登录后运行应用# 用户名: root (无密码)/usr/bin/hello-buildroot预期输出Hello from Buildroot!Application running on: Linux (ARM architecture)Count: 0Count: 1Count: 2...---## 第六阶段调试与迭代### 10. 修改并重新编译应用当需要修改应用时bash# 1. 修改源码vi ~/my_project/app_src/hello-buildroot/hello.c# 2. 只重新编译你的应用不重建整个系统cd ~/my_project/buildrootrm -rf output/build/hello-buildroot-*make hello-buildroot# 3. 重新生成根文件系统镜像make ext4-rootfs# 4. 重新测试qemu-system-arm ... (同上)---## 完整脚本一键添加应用为了简化过程这里提供一个自动化脚本bash#!/bin/bash# 文件名: add-custom-app.shAPP_NAMEhello-buildrootAPP_SRC_DIR$HOME/my_project/app_src/$APP_NAMEBR_DIR$HOME/my_project/buildrootecho Step 1: Create application source...mkdir -p $APP_SRC_DIRcat $APP_SRC_DIR/hello.c EOF#include stdio.hint main() {printf(Hello from Buildroot!\n);return 0;}EOFcat $APP_SRC_DIR/Makefile EOFCC $(TARGET_CC)CFLAGS -Wall -O2TARGET hello-buildrootSOURCES hello.cOBJECTS $(SOURCES:.c.o)all: $(TARGET)$(TARGET): $(OBJECTS)$(CC) $(CFLAGS) -o $ $^clean:rm -f $(OBJECTS) $(TARGET).PHONY: all cleanEOFecho Step 2: Create Buildroot package...mkdir -p $BR_DIR/package/$APP_NAMEcat $BR_DIR/package/$APP_NAME/Config.in EOFconfig BR2_PACKAGE_HELLO_BUILDROOTbool hello-buildroothelpCustom demo application.EOFcat $BR_DIR/package/$APP_NAME/$APP_NAME.mk EOF################################################################################# hello-buildroot################################################################################HELLO_BUILDROOT_VERSION 1.0.0HELLO_BUILDROOT_SITE \$(TOPDIR)/../app_src/hello-buildrootHELLO_BUILDROOT_SITE_METHOD localHELLO_BUILDROOT_LICENSE MITdefine HELLO_BUILDROOT_BUILD_CMDS\$(MAKE) CC\$(TARGET_CC) -C \$(D) allendefdefine HELLO_BUILDROOT_INSTALL_TARGET_CMDS\$(INSTALL) -D -m 0755 \$(D)/hello-buildroot \$(TARGET_DIR)/usr/bin/hello-buildrootendef\$(eval \$(generic-package))EOFecho Step 3: Register package...if ! grep -q hello-buildroot $BR_DIR/package/Config.in; thenecho source package/hello-buildroot/Config.in $BR_DIR/package/Config.infiecho Done! Now run:echo cd $BR_DIRecho make menuconfig # Enable hello-buildrootecho make---## 关键概念总结| 步骤 | 文件/位置 | 作用 ||------|-----------|------|| 源码准备 | app_src/hello-buildroot/ | 应用程序源代码 || 包描述 | package/hello-buildroot/Config.in | 在menuconfig中显示选项 || 构建规则 | package/hello-buildroot/hello-buildroot.mk | 定义如何编译和安装 || 包注册 | package/Config.in | 让Buildroot知道你的包 || 输出位置 | output/target/ | 安装后的文件构建时 || 最终镜像 | output/images/rootfs.* | 可烧录的根文件系统镜像 |---## 常见陷阱与解决方案1. **问题**编译时找不到头文件**解决**在 .mk 文件中添加依赖makefileHELLO_BUILDROOT_DEPENDENCIES libfoo2. **问题**应用无法运行缺少共享库**解决**检查依赖并添加makefileHELLO_BUILDROOT_DEPENDENCIES libcurl openssl3. **问题**修改源码后 make 没有重新编译**解决**删除构建目录bashrm -rf output/build/hello-buildroot-*make hello-buildroot4. **问题**应用安装到了错误的位置**解决**检查 INSTALL_TARGET_CMDS 中的路径makefile$(INSTALL) -D -m 0755 $(D)/hello-buildroot $(TARGET_DIR)/usr/bin/hello-buildroot---## 拓展添加启动脚本如果想让应用开机自动运行可以添加启动脚本makefile# 在 hello-buildroot.mk 中添加define HELLO_BUILDROOT_INSTALL_INIT_SYSV$(INSTALL) -D -m 0755 package/hello-buildroot/S99hello \$(TARGET_DIR)/etc/init.d/S99helloendef创建 package/hello-buildroot/S99hellobash#!/bin/shcase $1 instart)echo Starting hello-buildroot.../usr/bin/hello-buildroot ;;stop)killall hello-buildroot;;esacexit 0这样应用就会在系统启动时自动运行了。---
延伸阅读

更多相关文章

2026/9/7 23:52:29

架构实战第3篇:三个文件消灭90%重复代码-泛型CRUD架构解析

摘要:在Java企业级开发中,单表CRUD是最常见也是最枯燥的代码。每新增一个业务实体,就要写一套几乎相同的Controller、Service——结构雷同,却又不得不写。《鹿鲸项目管理工具》仅用三个文件——IOneEntityService接口、OneEntityServiceImpl抽…

2026/9/3 2:05:45

大学生如何零基础掌握PLC自动化技术?

1. 为什么大学生应该学习PLC自动化技术?工业4.0时代,PLC(可编程逻辑控制器)作为工业自动化的大脑,正在重塑制造业的底层逻辑。对于自动化相关专业的大学生而言,掌握PLC技术不再是加分项,而是必备…

2026/9/9 18:25:08

AI Agent如何终结互联网“免费午餐”:从流量逻辑到任务逻辑

这两年圈子里聊 AI Agent 的人越来越多,从技术群到产品群,从大厂到创业团队,几乎人手一份"Agent 落地"的 PPT。大家嘴上说的是任务编排、工具调用、多模态交互,但我越观察越觉得,真正被戳中命门的不是技术栈…

2026/9/9 18:25:08

MySQL锁等待快速排查3步,从告警到止血不再等DBA

MySQL锁等待快速排查3步,从告警到止血不再等DBA 【免费下载链接】CS-Base 图解计算机网络、操作系统、计算机组成、数据库,共 1000 张图 50 万字,破除晦涩难懂的计算机基础知识,让天下没有难懂的八股文!🚀…

2026/9/9 18:25:08

KernelSU 模式切换避坑:GKI、LKM 与 KMI 内核兼容一次搞懂

KernelSU 模式切换避坑:GKI、LKM 与 KMI 内核兼容一次搞懂 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 刷完 KernelSU 重启进不了系统?八成是模式没选对。G…

2026/9/9 18:25:08

基于Qt开发简易文件管理器:从双视图联动到打包发布全实战

简介:基于 QT 框架制作的简易文件管理器,适合初学 QT 的开发者或希望实现桌面文件操作工具的读者。代码覆盖复制、粘贴、重命名等基本功能,并串联起主窗口、视图控件、对话框、自定义组件与后台线程等多个 GUI 开发要点。项目压缩包共 33 个文…

2026/9/9 18:25:08

机械厂零代码CRM+ERP落地:订单交付率从60%到83%的实践

1. 这家机械厂为什么要动ERP的念头:订单交付失序的连锁反应要说清楚这次零代码CRMERP落地实践,得先还原一下这家机械制造厂当时的真实状态。企业规模不大,一百多号人,主要做非标自动化设备的结构件加工,产品形态以焊接…

2026/9/9 18:20:08

Playwright定位器完全攻略:从基础到动态元素

1. 定位思路:先搞懂Playwright的定位器哲学1.1 为什么传统CSS/XPath定位在Playwright里不够用如果你之前是Selenium的老用户,刚转到Playwright时最不习惯的一件事就是:怎么感觉它的定位方式跟以前不太一样?在Selenium里我们习惯直…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/9 0:00:48

MHS模型硬件标准:让大模型像调用软件一样控制物理设备

让Claude真正看着显微镜说“这个细胞形态不太对”,或者让大模型自己调一版机械臂的运动轨迹,这事儿听上去已经很接近科幻片了。但你真上手试一次就会发现,模型不缺智商,缺的是一个能插进显微镜、机械臂、激光控制器里的“通用插座…

2026/9/9 0:00:48

AI五大核心方向详解:从机器学习到大模型,零基础转行选哪条?

会有人告诉我,他想转行学AI,但打开招聘网站一看直接傻眼:机器学习、深度学习、自然语言处理、计算机视觉、大模型应用……满屏都是这些词,好像每个都会一点,又好像每个都离自己很远。还有人上来就问“学Python还是学Ja…

2026/9/9 0:00:49

从50行最小循环到生产级AI引擎:工程化改造全解析

直接说干货。这一章我写的不是那种"hello world跑通某个模型"的教程,而是把AI引擎当做一个真正要上线、要被人调用、要扛流量的系统来聊。从最初只有50行的最小循环,到能够承载生产流量的AI引擎,中间差的不是代码量,而是…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码