是什么?
- 【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.3 简化总结
为什么?
怎么做?
核心本质
- 需要烧录的文件有哪些,文件是从哪里来的?
- uboot.img、 boot.img、 MiniLoaderAll.bin、 parameter.txt、 misc.img、 rootfs.img、oem.img、 userdata.img、 recovery.img
镜像烧录工具+四种状态
repo同步代码与屏幕配置
- repo 是建立在 Git 上的一个多仓库管理工具,可以组织多个仓库的上传和下载, 用于管理多个 Git 存储仓库
- repo 工具其实就是一个 python 脚本
mkdir ~/bin
# 下载 repo 工具,并赋予其可执行权限
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
# 解压
cd ~/rk3568_linux_sdk/
tar xvf atk-rk3568_linux_release_v1.0_20230620.tgz -C ~/rk3568_linux_sdk
git config --global user.name "xxx"
git config --global user.email "xxx"
git config --list
# 以详细模式同步本地的 Repo 工作区中的所有仓库
repo/repo/repo sync -l -j10
# 在 SDK 源码根目录下,执行如下命令可查询当前 SDK 的 ATK正点 版本
ls .repo/manifests/
# 在 SDK 源码根目录下,执行如下命令可查询当前 SDK 的 RK公司 版本
ls .repo/manifests/rk356x_linux
- 网络环境不稳定或者第三方库文件的下载源发生变更,很容易导致下载失败,进而导致根文件系统编译出错
tar -xzf dl.tgz -C ~/rk3568_linux_sdk/buildroot/
- 设置 DNS 支持 kgithub.com
sudo sed -i '$a 43.154.68.204\tkgithub.com' /etc/hosts
sudo sed -i '$a 43.155.83.75\traw.kgithub.com objects.githubusercontent.kgithub.com' /etc/hosts
- 选择屏幕
- 默认使能了 5.5 寸 720x1280 MIPI屏和 HDMI 屏
- 需要更改为5.5寸 1080x1920 MIPI屏
vi kernel/arch/arm64/boot/dts/rockchip/rk3568-screen_choose.dtsi
#define ATK_LCD_TYPE_MIPI_1080P //正点原子5.5寸 1080*1920 MIPI屏
SDK编译目录 build.sh update.img
目录 | 描述 |
---|---|
app | 存放上层应用 app,包括 Qt 应用程序,以及其他的 C/C++ 应用程序。 |
buildroot | 基于 buildroot 开发的根文件系统。 |
debian | 基于 Debian 开发的根文件系统。 |
device/rockchip | 存放各芯片板级配置文件和 Parameter 分区表文件,以及一些编译与打包固件的脚本和预备文件。 |
docs | 存放芯片模块开发指导文档、平台支持列表、芯片平台相关文档、Linux 开发指南等。 |
external | 存放所需的第三方库,包括音频、视频、网络、recovery 等。 |
kernel | Linux 4.19 版本内核源码。 |
prebuilts | 存放交叉编译工具链。 |
rkbin | 存放 Rockchip 相关的 Binary 和工具。 |
rockdev | 存放编译输出固件,编译 SDK 后才会生成该文件夹。 |
tools | 存放 Linux 和 Windows 操作系统环境下常用的工具,包括镜像烧录工具、SD 卡升级启动制作工具、批量烧录工具等,譬如前面给大家介绍的 RKDevTool 工具以及 Linux_Upgrade_Tool 工具都存放在该目录。 |
u-boot | 基于 v2017.09 版本进行开发的 uboot 源码。 |
yocto | 基于 Yocto 开发的根文件系统。 |
环境前置条件
sudo apt-get install git ssh make libssl-dev liblz4-tool expect expect-dev patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake unzip device-tree-compiler ncurses-dev bzip2 expat cpp-aarch64-linux-gnu libgmp-dev libmpc-dev bc
解决expect 安装问题
sudo apt-get install software-properties-common
sudo apt-add-repository universe
sudo apt-get install expect
conda config --add channels conda-forge
conda install conda-forge::expect
解决Your PATH contains spaces, TABs, and/or newline (n) characters.
- /etc/wsl.conf
[interop]
appendWindowsPath = false
解决buildroot编译
libffi-3.4.4
时,报错:config.log: No such file or directory
- buildroot/output/build/host-libffi-3.4.4/m4/ax_enable_builddir.m4
# 打开libffi 中的文件:
vim output/build/host-libffi-3.4.4/m4/ax_enable_builddir.m4
# 找到119行的位置
test -f $srcdir/config.log && mv $srcdir/config.log .
# 将 mv 改为 cp
test -f $srcdir/config.log && cp $srcdir/config.log .
指定 SDK 的板级配置文件
# 查看 build.sh 脚本的使用方法
./build.sh -h
# 执行如下命令指定 SDK 的板级配置文件
./build.sh lunch
# 由于 SDK 更新,有可能 BoardConfig-rk3568-atk-evb1-ddr4-v10.mk 这个配置的编号不是序号 3
#建议使用./build.sh lunch 找到BoardConfig-rk3568-atk-evb1-ddr4-v10.mk板级配置文件
./build.sh alientek_rk3568_defconfig
整体编译 build.sh update.img
- build.sh 脚本其实是一个软链接文件,实际指向了 device/rockchip/common/build.sh 文件
./build.sh all
# 打包到 SDK/rockdev 目录
./build.sh firmware
# 打包成 update.img 镜像
./build.sh updateimg
- 或者直接使用,比上述多了
- 复制 rockdev 目录下的镜像到 IMAGE/ _ RELEASE_TEST/IMAGES 目录(表示编译日期)
- 保存各个模块的补丁到 IMAGE/ _ RELEASE_TEST/PATCHES 目录
./build.sh
lunch | 选择板级配置文件 | ./build.sh lunch |
---|---|---|
uboot | 编译 u-boot | ./build.sh uboot |
kernel | 编译 kernel | ./build.sh kernel |
modules | 编译内核模块 | ./build.sh modules |
rootfs | 编译根文件系统 | ./build.sh rootfs |
buildroot | 编译 buildroot 根文件系统 | ./build.sh buildroot |
debian | 编译 Debian 根文件系统 | ./build.sh debian |
recovery | 编译 recovery | ./build.sh recovery |
all | 编译整个 SDK,包括 uboot、 kernel、 rootfs、recovery | ./build.sh all |
cleanall | 清理整个 SDK | ./build.sh cleanall |
firmware | 将镜像打包到 rockdev 目录 | ./build.sh firmware |
updateimg | 将所有镜像打包成一个 update.img 固件 | ./build.sh updateimg |
单独编译
./build.sh uboot
./build.sh kernel
./