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中添加自己的软件包相关推荐

  1. 如何在html添加css样式表,网页中添加CSS样式表的四种方式

    本文向大家描述一下网页中添加CSS样式表的四种方式,首先让我们来看一下CSS样式表文件的优势,主要体现在两个方面,请看下文详细介绍. CSS样式表文件的优势表现在两个方面: ***,简化了网页的格式代 ...

  2. C++ 实验四 NO. 3 书店的前台收银销售类, 请完成该类定义,实验并且要满足: 1)向购物车中添加书籍;2):查看购物车;3):结算

    //************************************************************************************************** ...

  3. ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云

    向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平 ...

  4. [unreal4入门系列之十四] 在UE4中添加碰撞触发事件

    一.在HUD中显示消息 1) 在MyHUD.h中定义一个结构来表示我们的消息: #pragma once #include "GameFramework/HUD.h" #inclu ...

  5. 向linux kernel中添加cmdline的四种方式

    cmdline 1. 在dts中的bootargs中添加 2.在BoardConfig中添加 3.在uboot中添加 4.在android的Makefile中添加 ★★★ 友情链接 : 个人博客导读首 ...

  6. 学习淘淘商城第三十四课(在业务逻辑中添加缓存)

    上节课我们一起学习了如何用Spring容器来管理Redis单机版和集群版实现.这节我们来学习下在业务中添加缓存. Redis添加缓存有两种方式,一种是set,另一种是hset,这两种方式的不同之处是h ...

  7. Python编曲实践(四):向MIDI文件中添加鼓组音轨

    前言 在前面三篇文章中,我介绍了如何通过Python的Mido库添加旋律.和弦和模拟滑音.颤音.然而,鼓的作用也是不可忽视的,它就像骨骼一样支撑起整个音乐,而编辑鼓点的样式也为想象力的发挥提供了无限空 ...

  8. OpenSim教程四——在人体肌骨模型中添加三维模型

    本文目标 OpenSim自带的人体模型只有骨骼.肌肉和关节,如果需要研究人体与其他物体的相互作用(比如说人提起一个重物时胳膊各肌肉的受力分析),就需要在原模型中添加实体模型(该模型需在三维CAD软件中 ...

  9. 计算机系统是日语,如何在计算机系统中添加日语输入法

    ·如何添加和删除XP的内置输入法 ·XP系统无法添加日语输入法 ·如何为每个Windows系统版本修改所需的输入法 ·如何安装王码五笔输入法 ·如何为每个国家/地区添加输入法 ·如何安装王码五笔输入法 ...

最新文章

  1. java new arraylist_Java中ArrayList用法详解
  2. Python自定义:粒子群优化算法
  3. C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
  4. 市场规模占全国4成,广东物联网市场发展强劲
  5. 二进制python_利用Python对二进制数据进行按位处理
  6. 一般程序句柄多少linux,一个进程能够打开最大文件句柄数设到多大才合适(Linux)...
  7. elementui带输入建议查询_elementUi简单实现搜索提词功能
  8. 【Linux】部署cobbler
  9. java hssfsheet_Java中,使用HSSFSheet创建excel模板如何创建一列两行的数据?
  10. 不能将紧实的字段 绑定到_紫光芯城市政配套建设项目样板段预计下月完成
  11. JAVA计算机毕业设计疫情监测管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  12. CCSK云安全认证-M2-云基础设施安全
  13. 计算机用固态硬盘无法启动不了,windows10系统安装固态硬盘开启AHCI后开不了机怎么办...
  14. 【转载】IntelliJ IDEA 完美破解(2099年到期)
  15. CSP-J2019普及组复赛T4:加工零件
  16. VUE·17:事件处理之 @keyup、@keydown 等键盘按键触发及 @keyup.enter 等别名
  17. Beta函数和Gamma函数的关系
  18. 分块矩阵求行列式的一道题
  19. 如何打造一个抗住千万级流量短信服务(续)
  20. 设计模式之委派模式(不属于23种经典设计模式之一)

热门文章

  1. 美国权威机构:2005年美国商学院排座次
  2. [解锁新姿势] 封装通用返回值
  3. 参数估计 点估计概述
  4. 解读阿里Q2财报:阿里云的跨周期引擎
  5. python not用法_python中not、and和or的优先级与详细用法介绍
  6. 为什么手游创业项目首选游戏平台加盟?
  7. 模型训练中的过拟合\欠拟合
  8. 霍尔效应测磁场matlab实现代码
  9. 云原生训练营课程大纲
  10. 像设计师一样展示自己