Rockchip(瑞芯微)平台⾼速上⼿指南
Buildroot开发
Buildroot开发基础
具体的开发技巧可到Buildroot官⽹学习。
Buildroot官⽹:
查看
Buildroot版本
当前Buildroot版本为Buildroot-2018.02
Buildroot 配置选择及编译
按照以下步骤配置完后,执⾏ make 即可。
$ source buildroot/build/envsetup.sh
You're building on Linux
pick a combo:
1. firefly_rk3308_release
2. firefly_rk3308_recovery
3. firefly_rk3308_pcba
Which would you like? [1] 1
===========================================
如选择 firefly_rk3308_release,输⼊对应序号 1
$ make
完成编译后执⾏ SDK 根⽬录下的 mkfirmware.sh 脚本⽣成固件
make 编译执⾏过程
执⾏过程:
下载源码;
配置、编译、安装交叉⼯具链;
配置、编译、安装选择的包;
按选择的格式⽣成根⽂件系统;
Buildroot 输出结果保存在 output ⽬录,具体⽬录由配置⽂件决定。 例如,编译配置firefly_rk3308_release,输出结果保存
在buildroot/output/firefly_rk3308_release ⽬录。
后续编译可以在buildroot/output/firefly_rk3308_release ⽬录或是⼯程根⽬录下执⾏(make menuconfig也可以在⼯程根⽬录下执⾏),这个⽬录底下包括⼏个⼦⽬录:
image/:包含压缩好的根⽂件系统镜像⽂件。
build/: 包含所有的源⽂件,包括 Buildroot 所需主机⼯具和选择的包,这个⽬录包含所有模块源码。
staging/:这个⽬录类似根⽂件系统的⽬录结构,包含编译⽣成的所有头⽂件和库,以及其他 开发⽂件,不过他们没有裁剪,⽐较庞⼤,不适⽤于⽬标⽂件系统。
模块配置
整个Buildroot是由Makefile脚本和Kconfig配置⽂件构成的。你可以和编译Linux内核⼀样。
$ make menuconfig
配置界⾯如下:
在Target packages⾥⾯添加和裁剪⼀些⼯具,按需求定制系统功能,常⽤到的libdrm、ssh、vsftpd、wpa_supplicant、pppd等都可在⾥⾯配置。
执⾏以下命令,将会保存当前配置,并⾃动修改 buildroot/configs/ ⽬录下的默认配置⽂件:
$ make savedefconfig
需要注意的是:
进⾏编译时,buildroot根据配置,会⾃动从⽹络获取相关的软件包,包括⼀些第三⽅库,插件,实⽤⼯具等,放在dl/⽬录。
软件包会解压在output/build/⽬录下,然后进⾏编译。
如果要修改软件包的源码,可以通过打补丁的⽅式进⾏修改,补丁集中放在package/⽬录,buildroot会在解压软件包时为其打上相应的补丁。
Busybox 配置修改
配置命令:
$ make busybox-menuconfig
修改完成后,通过命令保存配置:
makefile phony
$ make busybox-update-config
交叉编译⼯具
Buildroot 编译完成后,会在指定的输出⽬录 host ⽬录下⽣成交叉编译⼯具,我们可以⽤来编译⽬标程序。默认配置⽣成的交叉编译⼯具⽬录为:
$ buildroot/output/rockchip_rk3308_release/host/usr/bin/output/host/usr/bin/
我们可以直接⽤交叉编译⼯具编译程序,例如:
$ ./buildroot/output/rockchip_rk3308_release/host/usr/bin/output/host/usr/bin/aarch64-rockchip-linux-gnu-gcc main.c -o test
浮点⽀持(以下配置打开 neon ⽀持),RK3308 ⽀持 crc/crypto/fp/simd 这⼏个 feature,配置如下:
CFLAGS += -mcpu=cortex-a35+crc+crypto
编译
在开发过程中,针对output/build/某个模块源码进⾏了修改,需要单独重新编译该模块软件包。
Buildroot在编译某个包的时候,会将编译的过程,通过⼀些标志⽂件记录下来,保存在对应的软件包源码的⽬录⾥,这些标志⽂件分别有:
.stamp_configured
.stamp_downloaded
.stamp_extracted
.stamp_patched
.stamp_staging_installed
.stamp_target_installed
这些标识⽂件主要控制这个软件包的下载,解压,打包,配置,编译,安装等。具体详细说明可参考:
docs/
也可以直接看mk⽂件,了解原理:
package/pkg-generic.mk
要想重新执⾏哪⼀个步骤,相应的就要删掉其对应的标志⽂件。假如你想重新编译某软件包源码,只需删掉该⽬录下的.stamp_built 和.stamp_target_installed,然后再编译整个Buildroot就可以了。
Buildroot有更快捷的实现⽅法。
执⾏make show-targets显⽰出本次配置所要编译所有的⽬标,即packages。
执⾏make <package>将构建并安装该软件包及其依赖项。
同时我们还可以通过make <package>-<target>,对软件包单独调⽤构建中的某⼀步骤,如下:
Package-specific:
<pkg>                  - Build and install <pkg> and all its dependencies
<pkg>-source          - Only download the source files for <pkg>
<pkg>-extract          - Extract <pkg> sources
<pkg>-patch            - Apply patches to <pkg>
<pkg>-depends          - Build <pkg>'s dependencies
<pkg>-configure        - Build <pkg> up to the configure step
<pkg>-build            - Build <pkg> up to the build step
<pkg>-graph-depends    - Generate a graph of <pkg>'s dependencies
<pkg>-dirclean        - Remove <pkg> build directory
<pkg>-reconfigure      - Restart the build from the configure step
<pkg>-rebuild          - Restart the build from the build step
因此,如果我们想重新编译xxx模块软件包,执⾏make xxx-rebuild即可。
关于make的更多⽤法,可通过make help获得。
新增本地源码包
以上介绍都是在 Buildroot 已有源码包的情况下,我们去选择打开编译即可,如果 Buildroot没有或者我们⾃⼰写的应⽤该如何集成到Buildroot ?
Buildroot ⽀持多种模块编译⽅式,包括 generic-package、cmake-package、autotools-package 等,我们以 generic-package 举例说明。
例⼦:buildroot/package/rockchip/fireflydemo
创建⼯程⽬录
buildroot/package/rockchip/fireflydemo/
新建 Config.in
config BR2_PACKAGE_FIREFLYDEMO
bool "Simple Firefly Demo"
新建 fireflydemo.mk,填⼊以下内容,其中源码⽬录指向 external/fireflydemo/src/
>>>>>>>>>>
>>#
#
## fireflydemo
#
>>>>>>>>>>#
>>#
ifeq ($(BR2_PACKAGE_FIREFLYDEMO), y)
FIREFLYDEMO_VERSION:=1.0.0
FIREFLYDEMO_SITE=$(TOPDIR)/../external/fireflydemo/src
FIREFLYDEMO_SITE_METHOD=local
define FIREFLYDEMO_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) CXX=$(TARGET_CXX) -C $(@D)
endef
define FIREFLYDEMO_CLEAN_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean
endef
define FIREFLYDEMO_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
endef
define FIREFLYDEMO_UNINSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) uninstall
endef
$(eval $(generic-package))
endif
创建源码⽬录
external/fireflydemo/src/
编写源码 demo.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("hello world\n");
return 0;
}
编写Makefile
DEPS =
OBJ = demo.o
CFLAGS =
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
demo: $(OBJ)
$(CXX) -o $@ $^ $(CFLAGS)
.PHONY: clean
clean:
rm -f *.o *~ demo
.PHONY: install
install:
cp -f demo $(TARGET_DIR)/usr/bin/
.PHONY: uninstall
uninstall:
rm -f $(TARGET_DIR)/usr/bin/demo
在将新建包加⼊到 Buildroot 编译系统内;
修改 package/rockchip/Config.in 最后加⼊下⾯这⾏:
source "package/rockchip/fireflydemo/Config.in"
配置选择包,make menuconfig 然后选上 fireflydemo 包;
编译: make fireflydemo
打包进⽂件系统:make
修改源码后重新编译包:make fireflydemo-rebuild
fs-overlay
默认编译出来根⽂件系统,有些配置⽂件可能不能满⾜客制化需求,这时候 fs-overlay 就能排上⽤场,fs-overlay ⽬录会在编译的最后阶段替换到⽂件系统⽬录,打包进根⽂件系统。 fs-overlay路径由默认配置⽂件指定:
BR2_ROOTFS_OVERLAY="board/rockchip/rk3308/fs-overlay"
Rootfs 切换为 ext2
Rootfs 可配置为可读写 ext2 ⽂件系统,⽅便系统调试使⽤。
修改 Kernel 中 bootargs 配置:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论