ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

四、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可见,果断修改权限

返回列表