四、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:=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 -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin
endef

define APP_HELLOWORLD_PERMISSIONS
	/bin/helloworld f 4755 0 0 - - - - -
endef

$(eval $(generic-package))

编辑Config.in:

config BR2_PACKAGE_APP_HELLOWORLD
	bool "helloworld"
	help
	  eric 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: helloworld

helloworld: helloworld.o
	$(CC) -o helloworld helloworld.o

clean:
	rm -rf *.o
	rm -rf helloworld

install:
	$(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
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值