本篇内容需要借助硬件开发板应用式学习--笔者是采用瑞芯微的RK3308平台进行梳理(可参考文章结束内容推荐):

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

嵌入式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 的完整编译。

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

1 Uboot

在工程项目目录下运行:

cd u-boot

./make.sh evb-rk3308

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

2 Kernel

在工程项目目录下运行:

cd kernel

make rk3308_linux_defconfig

make rk3308-evb-amic-v10.img

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

3 Rootfs

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

在工程项目目录下运行:

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

嵌入式linux系统交叉编译

接着输入make进行编译:

嵌入式linux系统交叉编译

编译成功:

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

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

嵌入式linux系统交叉编译

4 APPs

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

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

嵌入式linux系统交叉编译

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

 

==================================================================================================================================

交叉编译轻松就学习完啦,就是这样Easy!!

如果觉得对您有帮助并想进一步深入学习交流可以扫描以下微信二维码或加入QQ群:928840648

欢迎共同学习成长,有一群爱学习的小伙伴一起勉励!!一起加油!!也可点击

嵌入式linux系统交叉编译

 

笔者基于嵌入式系统框架内容如下整理编辑:

嵌入式linux系统交叉编译

 

相关文章: