编译配置项
固件的编译主要取决于两项配置,我们分别称之为:
- Buildroot 文件系统配置
- Boardconfig 硬件板型配置
Buildroot 的配置取决于我们最终生成的固件里运行什么程序;
Boardconfig 的配置决定我们的固件最终在怎样的设备上运行;
不同硬件板型所对应这两项配置可以在硬件介绍页面查阅,根据自己的实际硬件选择。
如何配置
1. 选择 Buildroot 配置,在 SDK/ 目录下输入:
. envsetup.sh
执行脚本后会有选择框如下,在这里选择我们最终想要的产品形态:
xx. rockchip_rv1126_battery_ipc
xx. rockchip_rv1126_evb_tb
xx. rockchip_rv1126_robot
xx. rockchip_rv1126_robot_recovery
xx. rockchip_rv1126_rv1109
xx. rockchip_rv11xx_owl_facial_gate
xx. rockchip_rv1126_rv1109_libs
xx. rockchip_rv1126_rv1109_ramboot_uvcc
xx. rockchip_rv1126_rv1109_recovery
xx. rockchip_rv1126_rv1109_sl
xx. rockchip_rv1126_rv1109_spi_nand
xx. rockchip_rv1126_rv1109_systemd
xx. rockchip_rv1126_rv1109_toolchain
xx. rockchip_rv1126_rv1109_uvcc
xx. rockchip_rv1126_rv1109_uvcc_spi_nand
Which would you like? [0]: 69
我们输入对应项前面的序号并且回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
2. Boardconfig 硬件板型配置,在 SDK/ 目录执行:
./build.sh lunch
这里会弹出选择框,让我们选择对应的 Boardconfig
You're building on Linux
Lunch menu...pick a combo:
xx. default BoardConfig.mk
xx. BoardConfig-38x38-spi-nand.mk
xx. BoardConfig-battery-ipc.mk
xx. BoardConfig-owl-facial_gate.mk
xx. BoardConfig-ramboot-uvc.mk
xx. BoardConfig-robot.mk
xx. BoardConfig-sl.mk
xx. BoardConfig-spi-nand.mk
xx. BoardConfig-tb-v12.mk
xx. BoardConfig-tb-v13.mk
xx. BoardConfig-uvcc-spi-nand.mk
xx. BoardConfig-uvcc.mk
xx. BoardConfig-v10-v11.mk
xx. BoardConfig-v12.mk
xx. BoardConfig.mk
Which would you like? [0]: 3
在这里同样选择输入对应选项前面的序号并回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
这里我们需要注意,由于摄像头模组种类繁多,我们需要确认Boardconfig里面的DTS是否和我们的实际硬件一致,在SDK/目录下输入:
vi device/rockchip/.BoardConfig.mk
将该行改为我们使用的 SENSOR 对应的 DTS
export RK_KERNEL_DTS=rv11xx-owl-38ipc-v10-imx307
比如我们要编译imx415的固件,则改为:
export RK_KERNEL_DTS=rv11xx-owl-38ipc-v10-imx415
需要注意的是,这里不需要后缀 .dts
具体的DTS我们可以在硬件介绍页面查阅
3. 执行编译
./build.sh
第一次编译时间比较长,编译完成后会在IMAGE目录生成最终的固件,
编译期间可能由于网络因素导致有些包不能正常下载,报错404,可以参照issu,将缺少的包从互联网上下载下来,
将下载下来的包放在 SDK/buildroot/dl/ 目录下,无需解压,并重新开始编译,如果报错,也可以删除 SDK/buildroot/output 目录,并重新尝试。
下面是一些实际操作案例
. envsetup.sh
在这里选择我们最终想要的产品的对应的产品形态,执行脚本后会有选择框如下:
xx. rockchip_rv1126_battery_ipc
xx. rockchip_rv1126_evb_tb
xx. rockchip_rv1126_robot
xx. rockchip_rv1126_robot_recovery
xx. rockchip_rv1126_rv1109
xx. rockchip_rv11xx_owl_facial_gate
xx. rockchip_rv1126_rv1109_libs
xx. rockchip_rv1126_rv1109_ramboot_uvcc
xx. rockchip_rv1126_rv1109_recovery
xx. rockchip_rv1126_rv1109_sl
xx. rockchip_rv1126_rv1109_spi_nand
xx. rockchip_rv1126_rv1109_systemd
xx. rockchip_rv1126_rv1109_toolchain
xx. rockchip_rv1126_rv1109_uvcc
xx. rockchip_rv1126_rv1109_uvcc_spi_nand
Which would you like? [0]: 69
我们输入 rockchip_rv11xx_owl_facial_gate 这项对应的序号并且回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
./build.sh lunch
这里会弹出选择框,让我们选择对应的 Boardconfig
You're building on Linux
Lunch menu...pick a combo:
xx. default BoardConfig.mk
xx. BoardConfig-38x38-spi-nand.mk
xx. BoardConfig-battery-ipc.mk
xx. BoardConfig-owl-facial_gate.mk
xx. BoardConfig-ramboot-uvc.mk
xx. BoardConfig-robot.mk
xx. BoardConfig-sl.mk
xx. BoardConfig-spi-nand.mk
xx. BoardConfig-tb-v12.mk
xx. BoardConfig-tb-v13.mk
xx. BoardConfig-uvcc-spi-nand.mk
xx. BoardConfig-uvcc.mk
xx. BoardConfig-v10-v11.mk
xx. BoardConfig-v12.mk
xx. BoardConfig.mk
Which would you like? [0]: 3
在这里同样选择 BoardConfig-owl-facial_gate.mk 对应的选项回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
./build.sh
第一次编译时间比较长,编译完成后会在IMAGE目录生成最终的固件
编译最后可能会报一个警告:
./build.sh: line 607: /home/owlvtech/rv1126-sdk/.repo/repo/repo: No such file or directory
不用在意,因为你的SDK是来自压缩包而非repo sync,没有版本相关信息,不影响使用。
. envsetup.sh
在这里选择我们最终想要的产品的对应的产品形态,执行脚本后会有选择框如下:
xx. rockchip_rv1126_battery_ipc
xx. rockchip_rv1126_evb_tb
xx. rockchip_rv1126_robot
xx. rockchip_rv1126_robot_recovery
xx. rockchip_rv11xx_owl_spi_nand
xx. rockchip_rv1126_rv1109_facial_gate
xx. rockchip_rv1126_rv1109_libs
xx. rockchip_rv1126_rv1109_ramboot_uvcc
xx. rockchip_rv1126_rv1109_recovery
xx. rockchip_rv1126_rv1109_sl
xx. rockchip_rv1126_rv1109_spi_nand
xx. rockchip_rv1126_rv1109_systemd
xx. rockchip_rv1126_rv1109_toolchain
xx. rockchip_rv1126_rv1109_uvcc
xx. rockchip_rv1126_rv1109_uvcc_spi_nand
Which would you like? [0]: 68
我们输入 rockchip_rv11xx_owl_spi_nand 这项对应的序号并且回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
./build.sh lunch
这里会弹出选择框,让我们选择对应的Boardconfig
You're building on Linux
Lunch menu...pick a combo:
xx. default BoardConfig.mk
xx. BoardConfig-owl-38-spi-nand.mk
xx. BoardConfig-battery-ipc.mk
xx. BoardConfig-facial_gate.mk
xx. BoardConfig-ramboot-uvc.mk
xx. BoardConfig-robot.mk
xx. BoardConfig-sl.mk
xx. BoardConfig-spi-nand.mk
xx. BoardConfig-tb-v12.mk
xx. BoardConfig-tb-v13.mk
xx. BoardConfig-uvcc-spi-nand.mk
xx. BoardConfig-uvcc.mk
xx. BoardConfig-v10-v11.mk
xx. BoardConfig-v12.mk
xx. BoardConfig.mk
Which would you like? [0]: 1
在这里同样选择BoardConfig-owl-38-spi-nand.mk对应的选项回车
需要注意的时不同时期的SDK,编号不同,请根据实际编号选择
./build.sh
第一次编译时间比较长,编译完成后会在IMAGE目录生成最终的固件
编译最后可能会报一个警告:
./build.sh: line 607: /home/owlvtech/rv1126-sdk/.repo/repo/repo: No such file or directory
不用在意,因为你的SDK是来自压缩包而非repo sync,没有版本相关信息,不影响使用,可以删除build.sh包含repo的两行。
编译指定SENSOR的固件
由于sensor种类繁多,SDK中默认编译出来的固件是符合imx307的,如果使用的是其它型号的sensor,请修改BoardConfig-owl-38-spi-nand.mk文件
vi device/rockchip/rv1126_rv1109/BoardConfig-owl-38-spi-nand.mk
将该行改为我们使用的SENSOR对应的DTS
export RK_KERNEL_DTS=rv11xx-owl-38ipc-v10-imx307
SENSOR型号 | 对应的DTS |
---|---|
IMX307 | rv11xx-owl-38ipc-v10-imx307 |
OV2718 | rv1109-38-v10-spi-nand |
IMX415 | rv11xx-owl-38ipc-v10-imx415 |
比如我们要编译imx415的固件,则改为:
export RK_KERNEL_DTS=rv11xx-owl-38ipc-v10-imx415
查看所有DTS文件:
ls kernel/arch/arm/boot/dts/rv11*