嵌入式Linux内核裁剪与移植实战:国产热门RK3568开发板~ - 实践
最近开始写一些文章,把之前的经验都分享记录一下,刚好我在工作过程中使用的是瑞芯微RK3568开发板,顺便记录一下自己移植、裁剪linux内核的过程,有什么不对的还请各位大佬指正
一、引言
目前随之国产芯片的崛起,工作中也逐渐要求开始使用国产开发板进行开发,在嵌入式系统开发中,Linux内核的裁剪与移植又是一项核心技能,刚好这次公司给我机会进行3568的移植和裁剪,全是自己摸索,觉得挺有意思,就记录一下嵌入式Linux内核裁剪与移植的完整流程,希望可以帮到有需要的友友们~
二、准备工作
1、硬件环境
我这里用的是firefly的ITX-3568开发板,基本参数特性如下:
- 处理器 :RK3568J四核Cortex-A55,主频最高2.0GHz
- 内存 :支持2GB/4GB/8GB LPDDR4
- 存储 :支持eMMC、SD卡、SATA接口
- 图形处理 :Mali-G52 2EE GPU,支持OpenGL ES 3.2/Vulkan 1.1
- AI加速 :集成0.8TOPS算力的NPU
- 视频能力 :支持4K@60fps解码和1080p@60fps编码
- 网络 :千兆以太网、WiFi6、可选5G/4G模块
- 接口 :USB 3.0/2.0、HDMI、PCIe、GPIO、UART、RS232、RS485等
- 工作温度 :-40°C至85°C工业级宽温设计
这些都是手册上说的~嘿嘿!这里要说下,这块开发板没有带串口调试线(USB转TTL),我直接偷懒用的HDMI显示器先修改了IP ,连上ssh后先搭建了一下环境,才搞到的串口线,所以大家使用时需要提前准备
不过大家也可以用迅为RK3568、正点原子RK3568等,对应的都会有USB欻口线、Type-C数据线
同时不管哪一款都需要安装Ubuntu 20.04的PC机
2、 软件环境
- Linux内核源码:firefly官方内核(基于linux-5.10.110)
- 交叉编译器:gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
- 辅助工具:build-essential、git、make、dtc、vim
- 烧录工具:RKDevTool
如果用的其他开发板,也是直接可以用这套工具的!
三、下载SDK源码进行裁剪并编译
1、准备源码
在这里我已经下载好了SDK 的源码到虚拟机里;百度网盘 请输入提取码 :1234
接下来需要改下权限:
//进入下载好的linux-SDK源码路径下,修改下脚本权限
chmod +x ./sdk_tools.sh
在然后需要创建一个干净的目录,官方说放在上一级,我这里用的共享路径,所以直接放在~下。创建了firefly_rk3568_SDK文件夹,这里一定要注意自己是3568还是3588还是其他,因为后面需要软连接,保持名字一致会更舒服~
接下来就直接用脚本解压:
//第一步进行解压
./sdk_tools.sh --unpack -C ~/firefly_rk3568_SDK/
//第二步直接用脚本执行还原
./sdk_tools.sh --sync -C ~/firefly_rk3568_SDK/
cd ~/firefly_rk3568_SDK/
在这里解压完后进入到目录中应该是有以下文件:
如果在这里脚本一直执行失败的话,就使用下面这两句。
.repo/repo/repo sync -l
.repo/repo/repo start firefly --all
接下来执行:
device/rockchip/common/build.sh
选择且查看对应的配置是否存在;
2、编译前配置
不同板型的配置文件存放在``device/rockchip/rk3566_rk3568/``目录下
回到 SDK 根目录执行build.sh选择配置文件:
./build.sh firefly_rk3568_aio-3568j_ubuntu_defconfig
配置文件会链接到 output/defconfig,检查该文件可以验证是否配置成功。
相关配置介绍:
# 预编译的文件系统位置
PREBUILT_ROOTFS_IMG="prebuilt_rootfs/rk356x_ubuntu_rootfs.img"
# 蓝牙用到的 UART
RK_WIFIBT_TTY="ttyS8"
# 内核配置文件
RK_KERNEL_CFG="firefly_linux_defconfig"
# 设备树名称
RK_KERNEL_DTS_NAME="firefly-rk3568-aioj"
# ramdisk 镜像
RK_RAMDISK_IMG="ramdisk.img"
# boot 分区镜像的 Image tree source
RK_BOOT_FIT_ITS="bootramdisk.its"
# 预编译的 recovery 镜像
RK_RECOVERY_RAMDISK="rk356x-recovery-arm64.cpio.gz"
# 分区表
RK_PARAMETER="parameter-ubuntu-fit.txt"
# 使用 FIT 格式镜像
RK_USE_FIT_IMG=y
# 使用 extlinux 方式引导系统
USE_EXTBOOT=y
3、内核裁剪
这块是比较重要的一步了,幸好直接有图形化界面来进行选择,现在直接返回到文件根目录,进入图形界面:
make -C kernel ARCH=arm64 menuconfig
就会出来以下界面咯~
选择完自己需要的,
4、保存
打开需要的配置后,按方向键左右将光标移动到Save并按下 3 次回车进行保存
之后持续双击Esc退出
退出后将修改内容保存到配置文件:
make ARCH=arm64 savedefconfig
mv defconfig arch/arm64/configs/firefly_linux_defconfig
5、编译
回到 SDK 根目录进行编译:
# 编译内核
./build.sh kernel
生成的文件位置:SDK/kernel/boot.img
最后就可以进行烧录了~
希望这篇文章能帮助能够帮到大家,如果有任何问题,欢迎在评论区留言!
喜欢这篇文章的话,别忘了点赞收藏哦~