buildroot添加用户APP
step1
workspace 下创建工程目录
liyongjun@Box:~/project/board/buildroot-2021.05$ mkdir override/hello/
step2
完成工程代码
hello.c
#include <stdio.h>
int main()
{
print("hello\n")
return 0;
}
Makefile
all: hello
hello: hello.o
$(CC) -o hello hello.o
step3
在 package/Config.in 中添加如下
menu "app user"
source "package/hello/Config.in"
endmenu
这样在执行 make menuconfig 时就会展示 package/hello/Config.in 中的选项
step4
创建 package/hello 并完善其内容
mkdir package/hello
Config.in
config BR2_PACKAGE_HELLO
bool "hello"
help
This is a demo to add local app.
hello.mk
################################################################################
#
# hello
#
################################################################################
HELLO_VERSION = 1.0.0
HELLO_SITE_METHOD:=local
HELLO_SITE = $(TOPDIR)/override/hello
HELLO_INSTALL_TARGET:=YES
define HELLO_BUILD_CMDS
$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
endef
define HELLO_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/hello $(TARGET_DIR)/bin
endef
define HELL_PERMISSIONS
/bin/hello f 4755 0 0 - - - - -
endef
$(eval $(generic-package))
注意1:
所有变量必须以相同的前缀开始 。 此前缀始终是软件包名称的大写版本。
注意2:
_VERSION 结尾的变量是源码的版本
_SITE 结尾变量是源码的下载地址
_SITE_METHOD 结尾的变量是源码下载方法,包括:wget、scp、svn、cvs、git、hg、bzr、file(为本地 tarball,压缩包形式)、local(为本地源码目录,已经解压过)
_BUILD_CMDS 结尾的变量会在 buildroot 框架编译的时候执行,用于给源码的 Makefile 传递编译选项和链接选项,调用源码的 Makefile
_INSTALL_TARGET_CMDS 结尾的变量是在编译完之后,自动安装执行,一般是让 buildroot 把编译出来的的 bin 或 lib 拷贝到指定目录
$(eval$(generic-package)) 最核心的就是这个,一定不能漏掉,不然源码不会被编译,该函数就是把整个 .mk 构建脚本,通过 buildroot 框架的方式,展开到 buildroot/ 目录下的 Makfile 中,生成的构建目标
注意3:
以下是系统内置的变量
$(TARGET_CC)
,$(TARGET_LD)
用来获得目标交叉编译工具
$(@D)
源码拷贝或解压到的位置,用于编译
step5
make menuconfig 将 → Target packages → app user
下的 hello 选项选中表示进行编译。
step6
编译
$ make O=RPi3/ hello
>>> hello 1.0.0 Syncing from source dir /home/liyongjun/project/board/buildroot-2021.05/override/hello
rsync -au --chmod=u=rwX,go=rX --exclude .svn --exclude .git --exclude .hg --exclude .bzr --exclude CVS /home/liyongjun/project/board/buildroot-2021.05/override/hello/ /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0
touch /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0/.files-list.before ; touch /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0/.files-list-staging.before ; touch /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0/.files-list-host.before ;
>>> hello 1.0.0 Configuring
>>> hello 1.0.0 Building
/usr/bin/make -j5 CC="/home/liyongjun/project/board/buildroot-2021.05/RPi3/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc" LD="/home/liyongjun/project/board/buildroot-2021.05/RPi3/host/bin/arm-buildroot-linux-uclibcgnueabihf-ld" -C /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0 all
/home/liyongjun/project/board/buildroot-2021.05/RPi3/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc -c -o hello.o hello.c
/home/liyongjun/project/board/buildroot-2021.05/RPi3/host/bin/arm-buildroot-linux-uclibcgnueabihf-gcc -o hello hello.o
>>> hello 1.0.0 Installing to target
/usr/bin/install -D -m 0755 /home/liyongjun/project/board/buildroot-2021.05/RPi3/build/hello-1.0.0/hello /home/liyongjun/project/board/buildroot-2021.05/RPi3/target/bin
编译后变将 hello 程序拷贝到了 /bin 目录,烧录到板子就可以运行了。