概要
buildroot添加编译自定义APP源码, 首先在package/Config.in中添加指向新增APP目录的Config.in;
然后在package中新增目录APP,并在里面添加Config.in和app.mk;最后添加对应的APP源码目录。
1、修改添加package/Config.in入口
系统在make menuconfig的时候就可以找到对应的APP的Config.in,就是在package/Config.in的最下面增加如下内容:
menu "Source code written by private"
source "package/libiconv/Config.in"
source "package/ftp/Config.in"
source "package/7za/Config.in"
source "package/clamav/Config.in"
endmenu
如果在make menuconfig的时候选中自定义增加的APP,在make savedefconfig的时候就会打开BR2_PACKAGE_APP=y。
2、配置APP对应的Config.in和mk文件
APP/Config.in文件,通过make menuconfig可以对APP进行选择。只有在BR2_PACKAGE_APP=y条件下,才会调用app.mk进行编译。
Config.in文件写法以FTP举例如下:
config BR2_PACKAGE_FTP
bool "ftp"
help
ftp mod by private
MK文件写法以FTP举例如下:
buildroot编译APP所需要的设置app.mk,包括源码位置、安装目录、权限设置等。
以下是源码压缩包方式放入dl/ftp目录下,源码压缩包名称及版本号需要与mk文件一致,只需设置FTP_SOURCE ,FTP_SITE 可不设置,如下:
################################################################################
#
# ftp mod by private
#
################################################################################
FTP_VERSION = 1.0.1
FTP_SOURCE = ftp-$(FTP_VERSION).tar.gz
FTP_SITE = NONE
FTP_INSTALL_STAGING = YES
FTP_LICENSE = ftp license
FTP_LICENSE_FILES = README
define FTP_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)
endef
define FTP_INSTALL_STAGING_CMDS
cp -a $(@D)/ftp/ftp $(TARGET_DIR)/usr/bin
endef
$(eval $(generic-package))
root@user-PC:/buildroot-2021.08.1/dl/ftp# ls
ftp-1.0.1.tar.gz
以下是源码非压缩包方式放入dl/ftp目录下,源码路径需要与mk文件一致。只需设置FTP_SITE ,FTP_SOURCE 可不设置,如下:。
################################################################################
#
# ftp mod by private
#
################################################################################
FTP_VERSION = 1.0.1
FTP_SITE = /buildroot-2021.08.1/dl/ftp
HELLOWORLD_SITE_METHOD = local
FTP_LICENSE = ftp license
FTP_LICENSE_FILES = README
define FTP_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)
endef
define FTP_INSTALL_STAGING_CMDS
cp -a $(@D)/ftp/ftp $(TARGET_DIR)/usr/bin
endef
$(eval $(generic-package))
如果源码在git或svn上,需要如下设置:
DMA_TEST_VERSION:=master--------------------------------------仓库分支名称
DMA_TEST_SITE:=http://.../dma.git-----------------------------仓库git地址
DMA_TEST_SITE_METHOD:=git-------------------------------------获取源码的方式
参数解释:
_VERSION结尾的变量是源码的版本号;_SITE_METHOD结尾的变量是源码下载方法;_SITE结尾变量是源码下载地址。
_BUILD_CMDS结尾的变量会在buildroot框架编译的时候执行,用于给源码的Makefile传递编译选项和链接选项,调用源码的Makefile。
_INSTALL_TARGET_CMDS结尾的变量是在编译完之后,自动安装执行,一般是让buildroot把编译出来的的bin或lib拷贝到指定目录。
( e v a l (eval (eval(generic-package)) 最核心的就是这个东西了,一定不能够漏了,不然源码不会被编译,这个函数就是把整个.mk构建脚本,通过Buildroot框架的方式,展开到Buildroot/目录下的Makfile中,生成的构建目标。