当前位置: 首页 > news >正文

四、buildroot中添加自己的软件包

1、在package中创建包管理目录

mkdirpackage/app-helloworldcdpackage/app-helloworldtouchapp-helloworld.mk Config.in

编辑app-helloworld.mk:

################################################################################## helloworld#################################################################################APP_HELLOWORLD_VERSION=1.0.0#源码下载方式为本地APP_HELLOWORLD_SITE_METHOD:=local#源码路径APP_HELLOWORLD_SITE=$(CURDIR)/work/helloworld APP_HELLOWORLD_INSTALL_TARGET:=YES define APP_HELLOWORLD_BUILD_CMDS$(MAKE)CC="$(TARGET_CC)"LD="$(TARGET_LD)"-C$(@D)all endef define APP_HELLOWORLD_INSTALL_TARGET_CMDS$(INSTALL)-D-m0755$(@D)/helloworld$(TARGET_DIR)/bin endef define APP_HELLOWORLD_PERMISSIONS /bin/helloworld f475500- - - - - endef$(eval$(generic-package))

编辑Config.in:

config BR2_PACKAGE_APP_HELLOWORLD bool"helloworld"helperictestdemo

在package/Config.in 中添加引入新建的菜单菜单

++ menu"SSJ APP"++source"package/app-helloworld/Config.in"++ endmenu

2、添加包源码

在buildroot根目录下添加work目录,在work中添加自己的包

mkdirworkmkdirhelloworldcdwork/helloworldtouchhelloworld.c Makefile

编辑helloworld.c:

#include <stdio.h>intmain(){printf("Hello world ssj.\n");return0;}

编辑makefile:

all: helloworld helloworld: helloworld.o$(CC)-ohelloworld helloworld.o clean:rm-rf*.orm-rfhelloworld install:$(INSTALL)-D-m0755 helloworld$(TARGET_DIR)/bin

3、修改配置选项,编译

makemenuconfig

Target packages —>
SSJ APP —>
[ ]helloworld

将此选项选中,并保存。

sudomake

在 target/bin 目录下 出现新编的生成的 helloworld 可执行文件。

4、扩展内容

mk文件的命名规则为<包名>.mk,这样才能被buildroot识别。

*.mk并不能实际代替源代码的Makefile文件,它只是一个上层的make文件,告诉Buildroot,应该到哪个地方拿源代码,应该如何解压源代码,应该给源代码中的Makefile中的变量传递哪些编译参数,编译出来的库和bin文件,应该安装到rootfs的哪个路径下。具体demo_app源代码是如何一步一步编译的,还得靠demo_app源代码本身的Makefile去做。

  • 所有的变量都已DEMO_APP_ 开头,这样Buildroot才能够通过命名框架去解析

  • _VERSION结尾的变量,是下载demo_app源代码的版本号,

  • _SITE_METHOD结尾的变量是demo_app变量的下载方法,_SITE结尾的变量是demo_app的下载地址,其它的变量是干嘛用的,可以慢慢查阅官方手册。

  • 所有define 并以_CMDS结尾的代码块,类似函数的东西,实际上是构建过程中会被Buildroot框架执行的指令,这些指令到底有哪些,具体也得读手册。当然这些类似函数,开头也得是DEMO_APP_, Buildroot中命名规则很重要,重要的话说三遍

  • _BUILD_CMDS结尾的函数,是构建过程函数,一般是给demo_app源代码传递编译和链接选项,调用源代码的Makefile执行编译

  • INSTALL_TARGET_CMDS结尾的函数,就是demo_app编译完之后,自动安装的执行,一般是让Buildroot把编译出来库和bin文件安装到指定的目录

  • $(eval $ (generic-package)) 最核心的就是这个东西了,一定不能够漏了,不然demo_app是编译不出来的,这个函数就是把整个demo_app.mk构建脚本,通过Buildroot框架的方式,展开到Buildroot/目录下的Makfile中,生成demo_app的构建目标

5、buildroot的一些实用技巧

打印出帮助菜单

makehelp

显示出本次配置所要编译所有的目标,这些目标可以单独作为模块,用 make 命令进行单独编译。

makeshow-targets

单独编译某一模块

make<模块名>

重新编译某一模块

make<模块名>-rebuild

只解压不编译

make<模块名>-extract

只下载包

make<模块名>-source

可恶 凭什么不经过我允许把我的文章设为VIP可见,果断修改权限

http://www.jsqmd.com/news/1398578/

相关文章:

  • Maven Helper插件实战:快速定位与解决Java项目依赖冲突
  • 哈尔滨2026年黄金回收节假日行情变化规律,避开低价变现高峰期 - 每日快报资讯
  • C# Modbus插件化架构:10分钟构建可配置的工业数据采集系统
  • 信号产生后,会不会有那么一瞬间在未决信号集相应位里会变为1呢?
  • 盐城吸污车清运化粪池该怎么预约?完整操作流程一文给你讲清 - GrowthUME
  • 国密门禁怎么选?2026专业品牌对比
  • Jupyter Notebook高效配置指南:从安装到一键启动的完整方案
  • AI Agent 面试题 393:如何设计Agent的记忆重要性评分机制?
  • YimMenu使用指南:GTA5免费增强菜单从安装到进阶防护全攻略
  • 暴力破解攻防全解析:从原理到实战的密码安全指南
  • AI情感分析技术解析:从NLP原理到产品伦理的深度思考
  • 免费开源 PLC 编程工具 OpenPLC Editor 从零上手完整指南
  • 最新方法:手把手教你用小程序拼接多图 - 工具软件使用方法推荐
  • Forza Mods AIO 手把手实战:从下载到调出第一台专属座驾的完整流程
  • 图片盲水印入门:把版权标记藏进像素缝隙,一文讲透3个玩法
  • ZonyLrcToolsX:免费开源的跨平台歌词批量下载神器,一条命令补齐整个音乐库
  • IDEA+Maven零基础构建Java Agent:从原理到字节码监控实战
  • AI 不是一个终点行业,而是一种终将消失在行业里的通用能力
  • 加密音乐解锁全攻略:3分钟让被锁定的音乐文件重获自由
  • 2026成都虚拟货币涉刑辩护全解:USDT/OTC/跑分帮信罪怎么判?律师怎么选 - 米諾
  • AI Agent 面试题 410:Agent的多模态记忆(文本+图像+音频)如何统一管理?
  • 大连专业IT技术培训实训机构(大连高新/西安路 /沈阳大东校区)
  • 2026昆明口碑导游推荐 万千网友亲测推荐靠谱云南旅游规划师 云南当地私人导游推荐 - 实用旅游攻略分享
  • 代账公司想从记账升级到经营顾问怎么获客和升单,升级路径与方法 - 欢欢在创业
  • 关系型数据库概述
  • Steam创意工坊下载工具 WorkshopDL 更新解析:一次搞定《文明6》模组批量下载
  • HS2-HF Patch:十分钟装好的 HoneySelect2 汉化去和谐一键整合补丁
  • Mac Mouse Fix 完整指南:如何让第三方鼠标在 macOS 上找回原生手感
  • Django与Vue.js全栈开发实战:从API设计到部署的完整指南
  • Android AudioTrack音频投递全解析:从核心原理到低延迟优化实践