我用的firefly rockchip系列芯片的SDK,这个SDK可以制作芯片系统的所有文件,虽然给的链接是rk3399-jd4版本的SDK,但是在一个SDK是能够编译所有rk系列芯片的linux固件的。这个SDK既可以制作ubuntu,debian等linux固件,也可以制作buildroot固件。SDK的架构如下:
├── linux_sdk
│ ├── app
│ ├── buildroot buildroot根文件系统的编译目录
│ ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本
│ ├── device 编译相关配置文件
│ ├── distro debian根文件系统生成目录
│ ├── docs 文档
│ ├── envsetup.sh -> buildroot/build/envsetup.sh
│ ├── external 存放文件系统工具、demo等源码
│ ├── kernel 内核
│ ├── Makefile -> buildroot/build/Makefile
│ ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh rockdev链接更新脚本
│ ├── prebuilts 存放编译工具
│ ├── rkbin 存放初始化ddr的.bin文件
│ ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本
│ ├── debian debian根文件系统编译目录
│ ├── tools 烧写、打包工具
│ └── u-boot u-boot
buildroot普通开发的一般流程是:
1,在linux_sdk目录下使用source envsetup.sh命令选择芯片,比如用的3399就选择44,make menuconfig配置依赖环境
2,在buildroot目录下 make,先把交叉编译环境默认的组件全部编译完,大概要花好几个小时。
3,在linux_sdk目录下 ./mkfirmware.sh 就可以在rockdev目录下生成buildroot的全套固件,也可以./build.sh直接一键编译打包
4,如果自己有app应用要加进buildroot,就要:
1)在linux_sdk/buildroot/package下面或者linux_sdk/buildroot/package/rockchip目录下面写配置连接文件.
~/firefly/linux_sdk/buildroot/package/rockchip/demo$ tree
.
├── Config.in
└── demo.mk
Config.in://此文件为配置文件,这样就能在make menuconfig里面搜索到BR2_PACKAGE_DEMO开关
config BR2_PACKAGE_DEMO
bool "rockchip demo"
demo.mk://此文件为链接文件,make的时候源文件所在地
DEMO_SITE = $(TOPDIR)/../external/demo
DEMO_SITE_METHOD = local
define DEMO_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 755 $(@D)/demo $(TARGET_DIR)/usr/bin/
endef
$(eval $(cmake-package))
2)在linux_sdk/external下面放app工程文件例如文件夹名为demo
3)在linux_sdk/buildroot/package/rockchip/Config.in文件中要把刚才app的Config.in加进去
4)在linux_sdk/buildroot目录下make demo就能单独编译该固件
5)下载固件的话之前有烧过就不用全部img都烧录进去了,每次修改demo这个工程make好之后直接:
cd ~/firefly/linux_sdk/rockdev
rm rootfs.img
ln -s ../buildroot/output/rockchip_rk3399/images/rootfs.ext4 rootfs.img
sudo ./upgrade_tool ul MiniLoaderAll.bin
sudo ./upgrade_tool di -p parameter.txt
sudo ./upgrade_tool di -rootfs rootfs.img
sudo ./upgrade_tool rd
或者,如果你的工程不是系统库文件,是可以直接./跑起来的话,那么直接把生成好的可执行文件拷贝到机器上就行,例如:
adb push ../buildroot/output/rockchip_rk3399/build/demo/ /userdata/demo
buildroot移植开源库修改流程:
这里说一下menuconfig里面支持的库选项比如opencv,menuconfig里面没有的话就要按上面的流程来了。
1,在menuconfig里面把opencv3选好打上勾,将firefly/linux_sdk/buildroot/dl下opencv3-3.4.3.tar.gz拷贝出来,作为你修改源码的主项目
2,修改好源码之后打包成opencv3-3.4.3.tar.gz,替换掉原来的firefly/linux_sdk/buildroot/dl下opencv3-3.4.3.tar.gz
3,将firefly/linux_sdk/buildroot/package/opencv3目录下的opencv3.hash文件删除,这是为了防止校验。接下来make即可
参考:
完整的目录结构如下:
~/firefly/linux_sdk$ tree -L 2
.
├── app
│ ├── camera
│ ├── demo
│ ├── gallery
│ ├── music
│ ├── QLauncher
│ ├── settings
│ └── video
├── buildroot
│ ├── arch
│ ├── board
│ ├── boot
│ ├── build
│ ├── CHANGES
│ ├── Config.in
│ ├── Config.in.legacy
│ ├── configs
│ ├── COPYING
│ ├── DEVELOPERS
│ ├── dl
│ ├── docs
│ ├── fs
│ ├── linux
│ ├── Makefile
│ ├── Makefile.legacy
│ ├── output
│ ├── package
│ ├── README
│ ├── support
│ ├── system
│ ├── toolchain
│ └── utils
├── build.sh -> device/rockchip/common/build.sh
├── debian
│ ├── mk-base-debian.sh
│ ├── mk-image.sh
│ ├── mk-rootfs-buster.sh
│ ├── mk-rootfs.sh
│ ├── mk-rootfs-stretch-arm64.sh
│ ├── mk-rootfs-stretch.sh
│ ├── overlay
│ ├── overlay-debug
│ ├── overlay-firmware
│ ├── packages
│ ├── packages-patches
│ ├── readme.md
│ └── ubuntu-build-service
├── device
│ └── rockchip
├── distro
│ ├── Config.in
│ ├── configs
│ ├── download
│ ├── envsetup.sh
│ ├── Makefile
│ ├── make.sh
│ ├── overlay
│ ├── package
│ ├── scripts
│ └── support
├── docs
│ ├── Develop reference documents
│ ├── Linux reference documents
│ ├── Platform support lists
│ ├── RKTools manuals
│ ├── Rockchip Linux软件开发指南.pdf
│ ├── Rockchip 休眠唤醒 开发指南__ V0.1-20160729.pdf
│ └── SoC platform related
├── envsetup.sh -> buildroot/build/envsetup.sh
├── external
│ ├── alsa-config
│ ├── audioservice
│ ├── bluez-alsa
│ ├── camera_engine_cifisp
│ ├── camera_engine_rkisp
│ ├── ffmpeg
│ ├── gst-plugins-rockchip
│ ├── gstreamer-camera
│ ├── gstreamer-rockchip
│ ├── libdrm
│ ├── libmali
│ ├── linux-rga
│ ├── minigui
│ ├── mpp
│ ├── mpv
│ ├── powermanager
│ ├── recovery
│ ├── rgademo
│ ├── rk3399demo
│ ├── rknn_demo
│ ├── rknpu
│ ├── rk_pcba_test
│ ├── rkscript
│ ├── rkssd
│ ├── rkupdate
│ ├── rkwifibt
│ ├── rtspdemo
│ ├── security
│ ├── softapDemo
│ ├── softapServer
│ ├── tensorflow
│ └── zsxl
├── IMAGE
│ ├── RK3399PRO-FIREFLY-AIOJD4_20191205.1727_RELEASE_TEST
│ ├── RK3399PRO-FIREFLY-AIOJD4_20191206.0837_RELEASE_TEST
│ └── RK3399PRO-FIREFLY-AIOJD4_20191206.1611_RELEASE_TEST
├── kernel
│ ├── android
│ ├── arch
│ ├── backported-features
│ ├── block
│ ├── boot.img
│ ├── build.config.cuttlefish.aarch64
│ ├── build.config.cuttlefish.x86_64
│ ├── certs
│ ├── config.ini
│ ├── COPYING
│ ├── CREDITS
│ ├── crypto
│ ├── defconfig
│ ├── Documentation
│ ├── drivers
│ ├── firmware
│ ├── fs
│ ├── include
│ ├── init
│ ├── ipc
│ ├── Kbuild
│ ├── Kconfig
│ ├── kernel
│ ├── kernel.img
│ ├── lib
│ ├── logo.bmp
│ ├── MAINTAINERS
│ ├── Makefile
│ ├── mm
│ ├── modules.builtin
│ ├── modules.order
│ ├── Module.symvers
│ ├── net
│ ├── README
│ ├── REPORTING-BUGS
│ ├── resource.img
│ ├── samples
│ ├── scripts
│ ├── security
│ ├── sound
│ ├── System.map
│ ├── tools
│ ├── upgrade_tool
│ ├── usr
│ ├── verity_dev_keys.x509
│ ├── virt
│ ├── vmlinux
│ ├── vmlinux.o
│ └── zboot.img
├── Makefile -> buildroot/build/Makefile
├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh
├── prebuilts
│ └── gcc
├── rkbin
│ ├── bin
│ ├── README
│ ├── RKBOOT
│ ├── RKBOOT.ini
│ ├── RKTRUST
│ ├── scripts
│ └── tools
├── rkflash.sh -> device/rockchip/common/rkflash.sh
├── rockdev
│ ├── boot.img -> /home/xxx/firefly/linux_sdk/kernel/boot.img
│ ├── config.ini
│ ├── MiniLoaderAll.bin -> /home/xxx/firefly/linux_sdk/u-boot/rk3399pro_loader_v1.20.115.bin
│ ├── misc.img -> /home/xxx/firefly/linux_sdk/device/rockchip/rockimg/wipe_all-misc.img
│ ├── oem.img
│ ├── parameter.txt -> /home/xxx/firefly/linux_sdk/device/rockchip/rk3399pro/parameter-buildroot.txt
│ ├── recovery.img -> /home/xxx/firefly/linux_sdk/buildroot/output/rockchip_rk3399pro_recovery/images/recovery.img
│ ├── rootfs.img -> /home/xxx/firefly/linux_sdk/buildroot/output/rockchip_rk3399pro/images/rootfs.ext4
│ ├── trust.img -> /home/xxx/firefly/linux_sdk/u-boot/trust.img
│ ├── uboot.img -> /home/xxx/firefly/linux_sdk/u-boot/uboot.img
│ ├── upgrade_tool
│ └── userdata.img
├── tools
│ ├── linux
│ └── windows
└── u-boot
├── api
├── arch
├── board
├── cmd
├── common
├── config.mk
├── configs
├── disk
├── doc
├── Documentation
├── drivers
├── dts
├── env
├── examples
├── fs
├── include
├── Kbuild
├── Kconfig
├── lib
├── Licenses
├── MAINTAINERS
├── Makefile
├── make.sh
├── net
├── post
├── PREUPLOAD.cfg
├── README
├── rk3399pro_loader_v1.20.115.bin
├── scripts
├── snapshot.commit
├── spl
├── System.map
├── test
├── tools
├── tpl
├── trust.img
├── u-boot
├── u-boot.bin
├── u-boot.cfg
├── u-boot.cfg.configs
├── u-boot.dtb
├── u-boot-dtb.bin
├── uboot.img
├── u-boot.lds
├── u-boot.map
├── u-boot-nodtb.bin
├── u-boot.srec
└── u-boot.sym