0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

fireflyROC-RK3308B主板CC-Buildroot开发简介

firefly 来源:firefly 作者:firefly 2019-12-20 09:18 次阅读
Buildroot开发
Buildroot开发基础
Buildroot版本

当前Buildroot版本为Buildroot-2018.02

Buildroot 配置选择及编译

按照以下步骤配置完后,执行 make 即可。

source buildroot/build/envsetup.sh You're building on Linux Lunch menu...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

修改完成后,通过命令保存配置:

make busybox-update-config
交叉编译工具

Buildroot 编译完成后,会在指定的输出目录 host 目录下生成交叉编译工具,我们可以用来编译目标程序。默认配置生成的交叉编译工具目录为:

cdbuildroot/output/firefly_rk3308_release/host/usr/bin/

我们可以直接用交叉编译工具编译程序,例如:

./buildroot/output/firefly_rk3308_release/host/usr/bin/aarch64-rockchip-linux-gnu-gcc main.c -otest

浮点支持(以下配置打开 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/manual/rebuilding-packages.txt

也可以直接看mk文件,了解原理:

package/pkg-generic.mk

要想重新执行哪一个步骤,相应的就要删掉其对应的标志文件。假如你想重新编译某软件包源码,只需删掉该目录下的.stamp_built和.stamp_target_installed,然后再编译整个Buildroot就可以了。

Buildroot有更快捷的实现方法。

  • 执行makeshow-targets显示出本次配置所要编译所有的目标,即packages。

  • 执行make将构建并安装该软件包及其依赖项。

同时我们还可以通过make-,对软件包单独调用构建中的某一步骤,如下:

Package-specific:-Buildandinstallandallitsdependencies-source-Onlydownloadthesourcefilesfor-extract-Extractsources-patch-Applypatchesto-depends-Build's dependencies-configure-Builduptotheconfigurestep-build-Builduptothebuildstep-graph-depends-Generateagraphof's dependencies-dirclean-Removebuilddirectory-reconfigure-Restartthebuildfromtheconfigurestep-rebuild-Restartthebuildfromthebuildstep

因此,如果我们想重新编译xxx模块软件包,执行makexxx-rebuild即可。

关于make的更多用法,可通过makehelp获得。

新增本地源码包

以上介绍都是在 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.0FIREFLYDEMO_SITE=$(TOPDIR)/../external/fireflydemo/srcFIREFLYDEMO_SITE_METHOD=localdefine FIREFLYDEMO_BUILD_CMDS$(TARGET_MAKE_ENV)$(MAKE)CC=$(TARGET_CC)CXX=$(TARGET_CXX)-C$(@D)endefdefine FIREFLYDEMO_CLEAN_CMDS$(TARGET_MAKE_ENV)$(MAKE)-C$(@D)cleanendefdefine FIREFLYDEMO_INSTALL_TARGET_CMDS$(TARGET_MAKE_ENV)$(MAKE)-C$(@D)installendefdefine FIREFLYDEMO_UNINSTALL_TARGET_CMDS$(TARGET_MAKE_ENV)$(MAKE)-C$(@D)uninstallendef$(eval$(generic-package))endif
  • 创建源码目录

external/fireflydemo/src/
  • 编写源码 demo.c

#include#includeintmain(intargc,char*argv[]){printf("hello world\n");return0;}
  • 编写Makefile

DEPS=OBJ=demo.oCFLAGS=%.o:%.c$(DEPS)$(CC)-c -o$@$<$(CFLAGS)demo:$(OBJ)$(CXX)-o$@$^$(CFLAGS).PHONY:cleanclean:rm -f *.o *~ demo.PHONY:installinstall:cp -f demo$(TARGET_DIR)/usr/bin/.PHONY:uninstalluninstall: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 配置:

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi index acd0dab..939db3c 100644 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi @@ -11,7 +11,7 @@ compatible = "firefly,rk3308-firefly", "firefly,rk3308"; chosen { - bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=squashfs rootwait"; + bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=ext2 rootwait"; }; adc-keys {
  • 修改device/rockchip/rk3308/rockimg/对应的 parameter 文件,确保 rootfs 分区大小足够存放分区镜像。

  • 修改 device\rockchip\rk3308\BoardConfig.mk 中 rootfs 文件系统类型:

diff --git a/device/rockchip/rk3308/BoardConfig.mk b/device/rockchip/rk3308/BoardConfig.mk index abb9e96..97662b3 100755 --- a/device/rockchip/rk3308/BoardConfig.mk +++ b/device/rockchip/rk3308/BoardConfig.mk @@ -28,7 +28,7 @@ TARGET_PRODUCT=rk3308 # Set rootfs type, see buildroot. # ext4 squashfs -ROOTFS_TYPE=squashfs +ROOTFS_TYPE=ext2 # Set data partition type. # ext2 squashfs
  • rootfs 分区 ext2 文件系统镜像会自动打包生成,也可以直接在以下路径获取:

buildroot/output/firefly_rk3308_release/images/rootfs.ext2
外部存储设备

TF卡设备挂载目录:/sdcard

U盘设备挂载目录:/udisk

支持文件系统格式:ext2,vfat,ntfs等。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11354

    浏览量

    210658
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6087

    浏览量

    35672
  • Firefly
    +关注

    关注

    2

    文章

    538

    浏览量

    7147
  • RK3308
    +关注

    关注

    1

    文章

    40

    浏览量

    1231
  • Buildroot
    +关注

    关注

    1

    文章

    48

    浏览量

    1427
收藏 人收藏

    评论

    相关推荐

    一文详解RK3308开发板Qt开发的流程

    应用程序,而无需下载编译 SDK 代码。在SDK中编译QT工具链准备工作:Ubuntu系统RK3308 Linux SDKQt Creator开发板:ROC-RK3308B-CC 或者
    发表于 08-16 16:58

    使用DKCook进行ROC-RK3308-CC Buildroot SDK的编译

    Docker镜像内配置好了编译SDK所需的依赖环境,无需在本地配置编译环境,进入对应的docker容器内进行SDK编译即可。目前暂时只支持ROC-RK3308-CC Buildroot SDK的编译。安装
    发表于 08-22 17:19

    firefly RK3308开发板ROC-RK3308-CC四核64位AIOT主板规格

    ROC-RK3308-CC 四核64位AIOT主板
    的头像 发表于 11-03 11:08 5094次阅读
    firefly <b class='flag-5'>RK3308</b><b class='flag-5'>开发</b>板ROC-<b class='flag-5'>RK3308-CC</b>四核64位AIOT<b class='flag-5'>主板</b>规格

    fireflyROC-RK3308B-CC固件编译工具简介

    Docker镜像内配置好了编译SDK所需的依赖环境,无需在本地配置编译环境,进入对应的docker容器内进行SDK编译即可。 目前暂时只支持ROC-RK3308B-CC Buildroot SDK
    的头像 发表于 12-20 09:30 2057次阅读

    fireflyROC-RK3308B-CC--启动模式说明

    ROC-RK3308B-CC 有着非常灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3308B-CC 主板是不会变砖的。
    的头像 发表于 12-20 09:20 3043次阅读

    fireflyROC-RK3308B主板CC教程简介

    确认主板配件连接无误后,通过 USB Type-C 线给 ROC-RK3308B-CC 供电。
    的头像 发表于 12-20 09:32 2470次阅读

    微雪电子RK3308主板CC启动模式介绍

    ROC-RK3308-CC 有着非常灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3308-CC 主板是不会变砖的。
    的头像 发表于 12-23 15:47 2691次阅读

    微雪电子RK3308主板CC上手介绍

    确认主板配件连接无误后,通过 USB Type-C 线给 ROC-RK3308-CC 供电。
    的头像 发表于 12-23 15:50 2449次阅读

    Core 3308Y固件ROC RK3308B CC PLUS Buildroot NoUI

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS Buildroot NoUI.txt》资料免费下载
    发表于 09-13 10:01 1次下载
    Core <b class='flag-5'>3308</b>Y固件ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> PLUS <b class='flag-5'>Buildroot</b> NoUI

    Core 3308Y固件ROC RK3308B CC PLUS Buildroot MiniGUI

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS Buildroot MiniGUI.txt》资料免费下载
    发表于 09-13 10:00 3次下载
    Core <b class='flag-5'>3308</b>Y固件ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> PLUS <b class='flag-5'>Buildroot</b> MiniGUI

    ROC RK3308B CC PLUS Buildroot QT Desktop固件

    电子发烧友网站提供《ROC RK3308B CC PLUS Buildroot QT Desktop固件.txt》资料免费下载
    发表于 09-13 10:08 0次下载
    ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> PLUS <b class='flag-5'>Buildroot</b> QT Desktop固件

    Core 3308Y固件ROC RK3308B CC Buildroot NoUI固件

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC Buildroot NoUI固件.txt》资料免费下载
    发表于 09-13 09:51 0次下载
    Core <b class='flag-5'>3308</b>Y固件ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> <b class='flag-5'>Buildroot</b> NoUI固件

    ROC RK3308B CC Buildroot Qt Desktop固件

    电子发烧友网站提供《ROC RK3308B CC Buildroot Qt Desktop固件.txt》资料免费下载
    发表于 09-13 09:49 0次下载
    ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> <b class='flag-5'>Buildroot</b> Qt Desktop固件

    IoT四核64位开源主板ROC RK3308B CC规格书

    电子发烧友网站提供《IoT四核64位开源主板ROC RK3308B CC规格书.pdf》资料免费下载
    发表于 09-13 09:35 2次下载
    IoT四核64位开源<b class='flag-5'>主板</b>ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b>规格书

    四核64位开源主板ROC RK3308B CC Plus规格书

    电子发烧友网站提供《四核64位开源主板ROC RK3308B CC Plus规格书.pdf》资料免费下载
    发表于 09-13 09:33 0次下载
    四核64位开源<b class='flag-5'>主板</b>ROC <b class='flag-5'>RK3308B</b> <b class='flag-5'>CC</b> Plus规格书