rk3308 BSP系统(Linux网关) —— 交叉编译

时间:2024-04-05 19:01:41

我们的整个软件工程目录在:~/workspace/Embedded_kits_rk3308

rk3308 BSP系统(Linux网关) —— 交叉编译

prebuilts 目录存放 U-Boot、Kernel 编译使用的交叉编译工具链;

u-boot 目录存放着 U-Boot 部分的源码;

kernel 为内核部分源码;

buildroot 目录存放 buildroot 开源项目代码,可定制根文件系统;

device 目录存放板级配置及一些预置文件,开机脚本等;

external 目录存放 SDK 相关库及工具源码;

rkbin 目录存放 Rockchip 平台一些关键性二进制文件(编译生成);

rockdev 执行 mkfirmware.sh 会把系统编译的生成的镜像做打包;

apps 存放我们的应用程序和用户数据;

mkfirmware.sh 脚本可对镜像文件进行打包,并统一拷贝至 rockdev/Image-rkxx 目录;

docs 目录存放 SDK 提供的相关文档;

build.sh 为系统编译脚本,执行可进行 SDK 的完整编译。

标红的是我们本章内容重点关注的地方。

U-Boot

在工程项目目录下运行:

cd u-boot

./make.sh evb-rk3308

rk3308 BSP系统(Linux网关) —— 交叉编译

    编译完,会生成 trust.img、rk3308_loader_v1.26.114.bin、uboot.img 三个镜像文件(回想一下上一节课中烧录的固件中,就有这三个):

rk3308 BSP系统(Linux网关) —— 交叉编译

如果我们想把编译的数据清除掉,可以运行make distclean

rk3308 BSP系统(Linux网关) —— 交叉编译

Kernel

在工程项目目录下运行:

cd kernel

make rk3308_linux_defconfig

make rk3308-evb-amic-v10.img

rk3308 BSP系统(Linux网关) —— 交叉编译

编译完成后,在kernel 根目录,生成 boot.img 镜像文件:

rk3308 BSP系统(Linux网关) —— 交叉编译 如果我们想把编译的数据清除掉,可以运行make distclean

rk3308 BSP系统(Linux网关) —— 交叉编译

Rootfs

注意,由于rootfs编译时间非常久,和网络速度以及电脑处理器有关系,基本要2个小时,所以我们打包的这个系统工程中,是已经编译过了的,大家不要进行clean操作(不要运行make clean更不要运行make distclean)。

在工程项目目录下运行:

export TARGET_OUTPUT_DIR=/home/lucker/workspace/Embedded_kits_rk3308/buildroot/output/rockchip_rk3308_release

rk3308 BSP系统(Linux网关) —— 交叉编译

接着输入make进行编译:

rk3308 BSP系统(Linux网关) —— 交叉编译

编译成功:

rk3308 BSP系统(Linux网关) —— 交叉编译

编译成功后,在目录buildroot/output/rockchip_rk3308_release/images下可以看到编译出来的固件,我们用的类型是squashfs:

rk3308 BSP系统(Linux网关) —— 交叉编译

把这个文件重命名为rootfs.img即可(注意路径):

rk3308 BSP系统(Linux网关) —— 交叉编译

APPs

我们把所有的应用程序放在该目录下,比如有一个程序是用来测试串口1的功能,源码文件:apps/tools/test_uart1.c;我们可以直接进行源码的编译,生成开发板可设别和运行的程序(-lpthread是链接线程库):

aarch64-linux-gnu-gcc test_uart1.c -o test_uart1 -lpthread

rk3308 BSP系统(Linux网关) —— 交叉编译

目前APPs还没有Makefile的工程管理,在后面的应用篇中,我们会在该目录下搭建Makefile管理的文件结构。

 将编译完成后得firmware烧录到硬件中,可以顺利运行起来:

rk3308 BSP系统(Linux网关) —— 交叉编译

了解硬件和更多资料可点击:点击了解

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648