一、buildroot 编译时间长
buildroot 第一次编译时间通常在8到11个小时,因为第一次编译需要download 依赖的包,因为部分资源在国外服务器下载只有几KB的速度;另外应该就与buildroot自身编译方式有关了。
为避免每次编译都重新download依赖文件,可以将编译好的buildroot/dl/下的文件提交至git仓库,下次取代码重新编译就不用再下载了。
二、buildroot修改源码后重新编译不会生效
修改分两种情况:(1)修改mk等不依赖源码的文件 (2)修改有程序源码,最终编译为可行性程序或lib
(1)这种情况似乎make cleanall后编译也不会生效,因为clean并没清楚中间文件,必须删除buildroot/output文件夹后整编
(2)可以删除"buildroot\output\firefly_rk3308_release\build\adbd\.stamp_*" ,然后重新编译即可(以修改adbd程序为例)
三、编译框架
有点类似kernel的架构
总配置文件路径buildroot\configs --类似kernel\arch\arm64\configs
根据总的配置加载其他目录下配置"buildroot\Config.in" --类似kernel的Kconfig 可以source其他子目录下的Config.in文件
各个目录下的.mk文件 --类似kernel下Makefile的作用
四、新增一个package
(1)在工程的config文件添加宏定义
例如:configs/firefly_rk3308_release_defconfig 添加BR2_PACKAGE_MIC_ARRAY=y
(2)在buildroot/package路径下(或package/rockchip下)新建mic_array文件夹(必须命名为mic_array,否则不会编译)
文件夹内新建mic_array.mk 和Config.in文件
Config.in文件
config BR2_PACKAGE_MIC_ARRAY
bool "mic_array"
default y
help
Use cloudwalk's mic_array
mic_array.mk文件(Cmake编译方式)
#####CMAKE BUILD
MIC_ARRAY_SITE = $(TOPDIR)/package/cloudwalk/mic_array/src
MIC_ARRAY_VERSION = release
MIC_ARRAY_SITE_METHOD = local
define MIC_ARRAY_COPY_LIBS
cp -f $(@D)/libs/* $(TARGET_DIR)/usr/lib64/
endef
MIC_ARRAY_POST_INSTALL_TARGET_HOOKS += MIC_ARRAY_COPY_LIBS
$(eval $(cmake-package))
也可以是Makefile编译方式(仅供参考)
# MIC_ARRAY_VERSION:=1.0.0
# define MIC_ARRAY_BUILD_CMDS
# $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \
# package/cloudwalk/mic-array-service/src/*.cpp -o $(@D)/mic_array
# endef
# define MIC_ARRAY_CLEAN_CMDS
# $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean
# endef
# define MIC_ARRAY_INSTALL_TARGET_CMDS
# $(INSTALL) -D -m 755 $(@D)/io $(TARGET_DIR)/usr/bin/mic_array
# endef
# define MIC_ARRAY_UNINSTALL_TARGET_CMDS
# $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) uninstall
# endef
# $(eval $(generic-package))
src目录下编写CMakelists.txt或Makefile文件
将新建的Config.in文件添加到上一级目录的Config.in里
然后./build.sh buildroot重新编译