四、buildroot中添加自己的软件包
1、在package中创建包管理目录
mkdir package/app-helloworld
cd package/app-helloworld
touch app-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:=YESdefine APP_HELLOWORLD_BUILD_CMDS$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
endefdefine APP_HELLOWORLD_INSTALL_TARGET_CMDS$(INSTALL) -D -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin
endefdefine APP_HELLOWORLD_PERMISSIONS/bin/helloworld f 4755 0 0 - - - - -
endef$(eval $(generic-package))
编辑Config.in:
config BR2_PACKAGE_APP_HELLOWORLDbool "helloworld"helperic test demo
在package/Config.in 中添加引入新建的菜单菜单
++ menu "SSJ APP"
++ source "package/app-helloworld/Config.in"
++ endmenu
2、添加包源码
在buildroot根目录下添加work目录,在work中添加自己的包
mkdir work
mkdir helloworld
cd work/helloworld
touch helloworld.c Makefile
编辑helloworld.c:
#include <stdio.h>int main()
{printf("Hello world ssj.\n");return 0;
}
编辑makefile:
all: helloworldhelloworld: helloworld.o$(CC) -o helloworld helloworld.oclean:rm -rf *.orm -rf helloworldinstall:$(INSTALL) -D -m 0755 helloworld $(TARGET_DIR)/bin
3、修改配置选项,编译
make menuconfig
Target packages —>
SSJ APP —>
[ ]helloworld
将此选项选中,并保存。
sudo make
在 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的一些实用技巧
打印出帮助菜单
make help
显示出本次配置所要编译所有的目标,这些目标可以单独作为模块,用 make 命令进行单独编译。
make show-targets
单独编译某一模块
make <模块名>
重新编译某一模块
make <模块名>-rebuild
只解压不编译
make <模块名>-extract
只下载包
make <模块名>-source
四、buildroot中添加自己的软件包相关推荐
- 如何在html添加css样式表,网页中添加CSS样式表的四种方式
本文向大家描述一下网页中添加CSS样式表的四种方式,首先让我们来看一下CSS样式表文件的优势,主要体现在两个方面,请看下文详细介绍. CSS样式表文件的优势表现在两个方面: ***,简化了网页的格式代 ...
- C++ 实验四 NO. 3 书店的前台收银销售类, 请完成该类定义,实验并且要满足: 1)向购物车中添加书籍;2):查看购物车;3):结算
//************************************************************************************************** ...
- ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云
向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平 ...
- [unreal4入门系列之十四] 在UE4中添加碰撞触发事件
一.在HUD中显示消息 1) 在MyHUD.h中定义一个结构来表示我们的消息: #pragma once #include "GameFramework/HUD.h" #inclu ...
- 向linux kernel中添加cmdline的四种方式
cmdline 1. 在dts中的bootargs中添加 2.在BoardConfig中添加 3.在uboot中添加 4.在android的Makefile中添加 ★★★ 友情链接 : 个人博客导读首 ...
- 学习淘淘商城第三十四课(在业务逻辑中添加缓存)
上节课我们一起学习了如何用Spring容器来管理Redis单机版和集群版实现.这节我们来学习下在业务中添加缓存. Redis添加缓存有两种方式,一种是set,另一种是hset,这两种方式的不同之处是h ...
- Python编曲实践(四):向MIDI文件中添加鼓组音轨
前言 在前面三篇文章中,我介绍了如何通过Python的Mido库添加旋律.和弦和模拟滑音.颤音.然而,鼓的作用也是不可忽视的,它就像骨骼一样支撑起整个音乐,而编辑鼓点的样式也为想象力的发挥提供了无限空 ...
- OpenSim教程四——在人体肌骨模型中添加三维模型
本文目标 OpenSim自带的人体模型只有骨骼.肌肉和关节,如果需要研究人体与其他物体的相互作用(比如说人提起一个重物时胳膊各肌肉的受力分析),就需要在原模型中添加实体模型(该模型需在三维CAD软件中 ...
- 计算机系统是日语,如何在计算机系统中添加日语输入法
·如何添加和删除XP的内置输入法 ·XP系统无法添加日语输入法 ·如何为每个Windows系统版本修改所需的输入法 ·如何安装王码五笔输入法 ·如何为每个国家/地区添加输入法 ·如何安装王码五笔输入法 ...
最新文章
- java new arraylist_Java中ArrayList用法详解
- Python自定义:粒子群优化算法
- C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
- 市场规模占全国4成,广东物联网市场发展强劲
- 二进制python_利用Python对二进制数据进行按位处理
- 一般程序句柄多少linux,一个进程能够打开最大文件句柄数设到多大才合适(Linux)...
- elementui带输入建议查询_elementUi简单实现搜索提词功能
- 【Linux】部署cobbler
- java hssfsheet_Java中,使用HSSFSheet创建excel模板如何创建一列两行的数据?
- 不能将紧实的字段 绑定到_紫光芯城市政配套建设项目样板段预计下月完成
- JAVA计算机毕业设计疫情监测管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
- CCSK云安全认证-M2-云基础设施安全
- 计算机用固态硬盘无法启动不了,windows10系统安装固态硬盘开启AHCI后开不了机怎么办...
- 【转载】IntelliJ IDEA 完美破解(2099年到期)
- CSP-J2019普及组复赛T4:加工零件
- VUE·17:事件处理之 @keyup、@keydown 等键盘按键触发及 @keyup.enter 等别名
- Beta函数和Gamma函数的关系
- 分块矩阵求行列式的一道题
- 如何打造一个抗住千万级流量短信服务(续)
- 设计模式之委派模式(不属于23种经典设计模式之一)