前言

手上的一块Firefly-RK3288开发板,看了下Firefly提供的SDK,压缩包就有15个多G,直接吓退。还好最近看到了韦东山老师提供的教学资料。记下学习步骤及遇到的问题解决办法。

1、开发环境

资料提供的有百问网制作的 ubuntu18.04 虚拟机镜像。但自己已经有搭好的ubuntu18.04.6虚拟机环境,就没用提供的。

2、文件上传到虚拟机环境

可以通过共享文件夹,也可以通过 FileZilla 工具上传。共享文件夹或者FileZilla 实现网上很多教程,不再累述。
将资料光盘中的(07_bsp_sdk/100ask_firefly-rk3288)整个文件夹里的4个压缩文件上传到 ubuntu 系统下/home/owen/workspace/RK3288文件夹下。

3、配置交叉编译工具链

3.1、解压ToolChain

进入/home/owen/workspace/RK3288文件夹下,解压ToolChain.tar.gz

tar -zxvf ToolChain.tar.gz

得到ToolChain文件夹。

3.2、设置交叉编译工具

设置交叉编译工具主要是设置 PATH, ARCH 和 CROSS_COMPILE 三个环境变量。设置这 3 个环境变量有多种方法:

3.2.1、永久生效

修改用户配置文件, 修改如下:

gedit ~/.bashrc

在行尾添加或修改:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin

3.2.2、临时生效

直接在当前终端执行,执行完“export”命令后,该设置只对当前终端有效:

export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

3.2.3、手动指定

先设置 PATH 环境变量,然后在 make 编译时指定 ARCH 架构 CROSS_COMPILE 交叉编译工具链:

export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

3.3、测试交叉编译工具链

4、编译 bootloader

使用版本为 uboot2017.09,韦东山老师提供的源码针对板子进行过修改。

4.1、解压u-boot源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf uboot2017.09.tar.gz

得到uboot2017.09文件夹。

4.2、编译uboot镜像

不同的开发板对应不同的配置文件,配置文件位于 uboot2017.09文件夹下的 configs/ 目录,uboot 的编译过程:

cd uboot2017.09
make distclean
make 100ask_firefly-rk3288_defconfig

尴尬的是uboot2017.09文件夹下找不到"100ask_firefly-rk3288_defconfig"文件,只能使用“firefly-rk3288_defconfig”来配置。编译后烧录,此配置的uboot也可以用。

make firefly-rk3288_defconfig
make
./make.sh trust
./make.sh uboot
./make.sh loader

生成的供 firefly-rk3288 启动 uboot 的镜像文件如下:

ls -lh trust.img uboot.img idbloader.img

rk3588开发板用opencv打开摄像头 rk3288开发板_配置文件

4.2、烧写uboot镜像

通过 dd 命令烧写 uboot 镜像文件,把SD卡连接到虚拟机,连接前后,使用lsblk命名来获取SD卡挂载的设备节点,如下:

SD卡连接前,

rk3588开发板用opencv打开摄像头 rk3288开发板_ubuntu_02


SD卡连接后,

rk3588开发板用opencv打开摄像头 rk3288开发板_ubuntu_03


由此可知,SD卡设备节点为/dev/sdc

使用 dd 命令烧写 img 镜像文件,如下:

sudo dd if=idbloader.img of=/dev/sdc seek=64
sudo dd if=uboot.img of=/dev/sdc seek=16384
sudo dd if=trust.img of=/dev/sdc seek=24576

rk3588开发板用opencv打开摄像头 rk3288开发板_buildroot_04


烧录完成后,插卡到开发板上,从 SD 卡启动。

rk3588开发板用opencv打开摄像头 rk3288开发板_rk3288_05

5、编译 linux kernel

5.1、解压kernel源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf linux-4.4.tar.gz

5.2、编译内核镜像

不同的开发板对应不同的配置文件,配置文件位内核源码 arch/arm/configs/目录。
kernel 的编译过程:

cd linux-4.4
make mrproper
make 100ask_firefly-rk3288_defconfig
make zImage
make dtbs

编译完成后,在 arch/arm/boot 目录下生成 zImage 文件, 在 arch/arm/boot/dts 目录下生成设备树的二进制 rk3288-firefly.dtb 文件。

rk3588开发板用opencv打开摄像头 rk3288开发板_rk3288_06


rk3588开发板用opencv打开摄像头 rk3288开发板_配置文件_07

5.3、编译内核模块并安装

编译内核模块

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

安装内核模块到 nfs 根文件系统,待用。

sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install

6、构建根文件系统

6.1、解压buildroot源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf buildroot2018.02.tar.gz

6.2、配置文件说明

此源码应该也是韦东山老师针对板子进行过修改。
配置文件为buildroot2018.02/configs/100ask_firefly-rk3288_defconfig

6.3、编译系统

owen@ubuntu:~/workspace/RK3288$ cd buildroot2018.02
owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make clean
owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make 100ask_firefly-rk3288_defconfig

rk3588开发板用opencv打开摄像头 rk3288开发板_buildroot_08


生成的.config文件如下:

rk3588开发板用opencv打开摄像头 rk3288开发板_buildroot_09


RK3288给的文档是基于ARM® Cortex™-A17架构,此处配置给的是Cortex-A15。查看《firefly_rk3288_defconfig》给的也是Cortex-A15。查了下网上两个架构对比:

rk3588开发板用opencv打开摄像头 rk3288开发板_配置文件_10


rk3588开发板用opencv打开摄像头 rk3288开发板_ubuntu_11


也都是基于ARMv7-A指令集。不深究了,就这样吧。

继续menuconfig配置

owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make menuconfig

注意:第一次配置全默认,也会编译Linux 内核和 uboot。但是韦东山老师提供的git链接无法下载uboot和kernel,导致后面的编译报错如下:

rk3588开发板用opencv打开摄像头 rk3288开发板_ubuntu_12

>>> host-uboot-tools 2018.01 Installing to host directory
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/mkimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/mkimage
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/mkenvimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/mkenvimage
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/dumpimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/dumpimage
>>> linux master Downloading
Doing shallow clone
Cloning into 'linux-master'...
fatal: unable to access 'https://git.dev.tencent.com/weidongshan/100ask_firefly-rk3288_kernel.git/': Failed to connect to git.dev.tencent.com port 443: Connection timed out
Shallow clone failed, falling back to doing a full clone
Doing full clone
Cloning into 'linux-master'...
fatal: unable to access 'https://git.dev.tencent.com/weidongshan/100ask_firefly-rk3288_kernel.git/': Failed to connect to git.dev.tencent.com port 443: Connection timed out
--2023-04-12 21:21:34--  http://sources.buildroot.net/linux-master.tar.gz
Resolving sources.buildroot.net (sources.buildroot.net)... 104.26.0.37, 104.26.1.37, 172.67.72.56, ...
Connecting to sources.buildroot.net (sources.buildroot.net)|104.26.0.37|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2023-04-12 21:21:36 ERROR 404: Not Found.

package/pkg-generic.mk:159: recipe for target '/home/owen/workspace/RK3288/buildroot2018.02/output/build/linux-master/.stamp_downloaded' failed
make[1]: *** [/home/owen/workspace/RK3288/buildroot2018.02/output/build/linux-master/.stamp_downloaded] Error 1
Makefile:79: recipe for target '_all' failed
make: *** [_all] Error 2

因此,menuconfig配置,禁止编译 Linux 内核和 uboot。这两项前面已经单独编译。

进入Kernel

rk3588开发板用opencv打开摄像头 rk3288开发板_linux_13


选中上图“Linux Kernel”,键盘按下“N”建,禁止编译linux内核。

rk3588开发板用opencv打开摄像头 rk3288开发板_ubuntu_14

返回,进入Bootloaders,

rk3588开发板用opencv打开摄像头 rk3288开发板_rk3288_15


选中上图“U-Boot”,键盘按下“N”建,禁止编译Uboot。

rk3588开发板用opencv打开摄像头 rk3288开发板_rk3288_16


rk3588开发板用opencv打开摄像头 rk3288开发板_配置文件_17


退出保存

编译 buildroot

owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make -j4

等待编译完成。

rk3588开发板用opencv打开摄像头 rk3288开发板_配置文件_18

因为没有编译 Linux 内核和 uboot,提示的没有uboot.img等信息不管他。

6.4、镜像文件

编译成功后文件输出路径为 output/images

rk3588开发板用opencv打开摄像头 rk3288开发板_linux_19


至此,三大块都已编译完成。

先到这里,继续学习。