前 言本文档主要演示Linux系统开发流程。包括LinuxSDK的配置与编译、U-Boot、Kernel及Rootfs的开发以及系统镜像的替换方法。同时介绍系统镜像的打包与解包、关键计算单元(CPU、GPU、NPU)和内存子系统(DDR)性能策略配置与管理的详细步骤旨在帮助开发者完成系统开发。开发环境Windows开发环境Windows10 64bit、Windows7 64bitLinux开发环境VMware16.2.5、Ubuntu20.04.6 64bitLinuxSDKLinuxSDK-[版本号]基于rk3562_linux_sdk_release_v1.2.0系统版本Tronlong-Desktop 20.04类Ubuntu、Linux-5.10.209、U-Boot-2017.09交叉编译工具链应用开发交叉编译工具链aarch64-linux-gnu-gcc版本为9.4.0U-Boot开发、内核开发gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf备注本文基于2GByte LPDDR4X、16GByte eMMC配置单板机进行演示。术语表为便于阅读下表对文档出现的关键术语进行解释对于广泛认同释义的术语在此不做注释。注意事项1单板机默认镜像已包含对应的设备树文件支持创龙科技EX-TLBaseUART扩展板、EX-TLMultiUART扩展板、EX-TLMultiETH扩展板的外设更换不同扩展板无需手动切换设备树文件。2Linux系统各镜像可通过命令行方式和瑞芯微开发工具替换具体如下表所示。备注Rootfs镜像需参考“完整镜像打包与解包”章节打包成完整系统镜像后才能替换。3Linux系统相关软件包位于产品资料“4-软件资料\Linux\”目录下具体如下表所示。备注我司推荐使用最新版本的LinuxSDK亦可根据“4-软件资料\Linux\LinuxSDK\LinuxSDK-feature-support.pdf”的变更说明自行替换对应模块如device/rockchip至旧版本LinuxSDK进行使用。4我司提供的单板机内核镜像已包含设备树编译后的二进制文件(.dtb)具体说明如下1 LinuxSDK安装1.1 安装依赖软件请先执行如下命令更新软件列表。Host#sudo apt-get update图 1执行如下命令安装LinuxSDK开发包依赖的库和工具集。备注安装过程中请保证Ubuntu可正常访问互联网若提示*** is already the newest version ***表示该软件已安装请忽略。Host#sudo apt-get install -y git ssh make gcc libssl-dev \liblz4-tool expect expect-dev g patchelf chrpath gawk texinfo chrpath \diffstat binfmt-support qemu-user-static live-build bison flex fakeroot \cmake gcc-multilib g-multilib unzip device-tree-compiler ncurses-dev \libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev \libmpc-dev bc python-is-python3 python2 libpkgconf-dev图 2图 3若安装失败可通过更换软件源解决。点击如下图标进入软件源更新的图形界面。图 4点击Download from。图 5点击Other…出现弹窗找到China即可选择软件源推荐使用清华大学镜像软件源以匹配我司开发文档然后点击Choose Server。图 6图 7图 8输入登录虚拟机Ubuntu的密码然后点击Authenticate。图 9点击Close完成更换软件源。图 10执行如下命令检查主机的Python版本需安装Python 3.6及以上版本。Host#python --version图 111.2解压LinuxSDK打开Ubuntu执行如下命令创建RK3562工作目录并进入该目录。Host#mkdir -p /home/tronlong/RK3562图 12请将产品资料“4-软件资料\Linux\LinuxSDK\”目录下的LinuxSDK-[版本号].tar.gz开发包解压至Ubuntu系统的RK3562工作目录中执行如下命令进行解压。耗时约5min后解压完成生成rk3562_linux_sdk_release_v1.2.0文件夹即为LinuxSDK源码目录。Host#cd /home/tronlong/RK3562/Host#tar -zxf LinuxSDK-v1.0.tar.gz备注LinuxSDK版本号以实际情况为准。图 13执行如下命令查看当前LinuxSDK源码目录。Host#cd rk3562_linux_sdk_release_v1.2.0/Host#ls -l图 142LinuxSDK配置与编译请先参考“LinuxSDK安装”章节正确安装LinuxSDK和依赖软件再执行以下步骤。2.1配置编译选项进入LinuxSDK源码目录,配置LinuxSDK编译选项。Host#./build.sh sbc_tl3562_ubuntu_defconfig配置编译设备树文件我司提供的设备树文件位于LinuxSDK源码kernel/arch/arm64/boot/dts/rockchip目录。设备树文件根据单板机部分复用外设功能进行区分。具体说明如下表。单板机使用的设备树文件存在多级的依赖关系具体如下表所示。表中的下一级设备树文件被上一级设备树文件所引用。LinuxSDK默认编译的设备树文件为sbc-tl3562.dts如需替换为支持对应功能的其他设备树请参考以下步骤修改。本次操作以替换为sbc-tl3562-mipi-lcd.dts设备树支持MIPI显示进行演示如需使用其他设备树修改方法同理。执行如下命令进入内核配置界面。Host#./build.sh sbc_tl3562_ubuntu_defconfigHost#make menuconfig图 15选择Kernel按Enter键进入到下一级配置选项。图 16选择device-tree script name按Enter键后进入编辑页面。图 17进入编辑页面将sbc-tl3562修改为sbc-tl3562-mipi-lcd选择Ok按Enter键退出编辑页面。图 18选择Save按Enter键保存配置。图 19在弹出的界面中按选择Ok按Enter键保存。图 20在弹出的界面中按Enter键完成保存操作。图 21配置完成后连续按下Esc键退出图形配置界面。执行如下命令保存设备树相关的编译配置项并通过查看生成的sbc_tl3562_ubuntu_defconfig文件确定设备树文件是否已正确配置。Host#make savedefconfigHost#cat device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig图 22除上述图形化配置方法外亦可通过执行如下命令直接修改sbc_tl3562_ubuntu_defconfig文件。Host#vim device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig图 23修改内容如下RK_KERNEL_DTS_NAMEsbc-tl3562-mipi-lcd //将sbc-tl3562修改为sbc-tl3562-mipi-lcd图 24配置内核选项我司默认配置的是Linux内核推荐使用。如需修改内核编译选项配置请继续执行make -j8 CROSS_COMPILEaarch64-none-linux-gnu- ARCHarm64 menuconfig命令打开图形配置界面。此命令通过读取当前目录的.config文件以图形界面的方式提供内核编译配置查看和修改方法。如无需修改内核编译选项配置可跳过此步骤。menuconfig是一套图形化的配置工具需要ncurses库支持。ncurses库提供了一系列的API函数供调用者生成基于文本的图形界面因此需要先执行如下命令通过网络安装ncurses库。Host#sudo apt-get install libncurses5-dev图 25Host#sudo apt-get install libncursesw5-dev图 26ncurses库安装完成后执行如下命令配置交叉编译工具链。Host#cd /home/tronlong/RK3562/rk3562_linux_sdk_release_v1.2.0/kernelHost#export PATH/home/tronlong/RK3562/rk3562_linux_sdk_release_v1.2.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH图 27在配置内核前先使用如下命令清理内核Host#make CROSS_COMPILEaarch64-none-linux-gnu- ARCHarm64 distclean图 28执行如下命令配置内核。Host#make -j8 CROSS_COMPILEaarch64-none-linux-gnu- ARCHarm64 rockchip_linux_defconfig图 29ncurses库安装完成后执行如下命令打开图形配置界面。Host#make -j8 CROSS_COMPILEaarch64-none-linux-gnu- ARCHarm64 menuconfig图 30图 31可通过键盘的方向键选中对应菜单栏。在Select被选中的情况下可按Enter键进入子菜单。菜单选项中蓝色高亮的字母代表此菜单选项的快捷键可在键盘上按下对应的字母快速选中对应的菜单选项。每个菜单选项前的括号内容表示当前菜单选项的配置状态。选中对应的菜单选项后按下Y键会将相应的选项配置编译到内核中同时菜单选项前面变为 * 。按下N键不会将相应的选项配置编译到内核中。按下M键会将相应的选项配置编译为内核模块菜单选项前面变为 M 。如需搜索可按下/键打开搜索框然后输入要搜索的内容。配置完毕后选中Save按Enter键保存配置选项。然后选中Exit按Enter键退出。请执行如下命令保存配置选项至arch/arm64/configs/rockchip_linux_defconfig文件再将defconfig文件内容覆盖至rockchip_linux_defconfig文件。Host#make -j8 CROSS_COMPILEaarch64-none-linux-gnu- ARCHarm64 savedefconfigHost#mv defconfig arch/arm64/configs/rockchip_linux_defconfig图 322.2拷贝根文件系统镜像我司已提供Rootfs根文件系统镜像位于“4-软件资料\Linux\Filesystem\Tronlong-Desktop-20.04\image\Tronlong-Desktop-20.04-[版本号]-[Git系列号]\”目录下版本号、Git系列号请以实际情况为准请将其拷贝至LinuxSDK源码目录的ubuntu目录下。图 332.3编译LinuxSDK在编译LinuxSDK时可根据实际需要选择是否多设备树打包功能即将多个设备树文件(.dts)编译为二进制文件(.dtb)并嵌入同一内核镜像中。若仅需单一设备树支持无需将多个设备树文件(.dts)打包进同一内核镜像请执行如下操作禁用多设备树打包功能并重新编译内核。备注若未修改sbc_tl3562_ubuntu_defconfig文件则默认编译设备树为sbc-tl3562.dts。Host#export ENABLE_MULTI_DTBnHost#./build.sh kernel图 34图 35编译完成后生成的内核镜像中仅包含sbc-tl3562.dts编译后的设备树数据。并且生成sbc-tl3562.dtb设备树二进制文件(.dtb)位于kernel/arch/arm64/boot/dts/rockchip/目录。若需打包多设备树文件(.dts)至同一内核镜像请先参考上文“配置编译设备树文件”章节将需要打包的设备树文件(.dts)逐一进行配置并重新编译内核生成对应的设备树二进制文件(.dtb)。本次操作以获取sbc-tl3562-ex-tlbaseuart.dtb文件进行演示。Host#vim device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig图 36修改内容如下RK_KERNEL_DTS_NAMEsbc-tl3562-ex-tlbaseuart //将sbc-tl3562修改为sbc-tl3562-ex-tlbaseuart图 37执行如下命令重新编译内核生成对应的设备树二进制文件(.dtb)文件。Host#./build.sh sbc_tl3562_ubuntu_defconfigHost#./build.sh kernel图 38图 39重复上述步骤编译生成sbc-tl3562-ex-tlmultiuart.dtb和sbc-tl3562-ex-tlmultieth.dtb。编译完成后查看目录下是否有对应设备树二进制文件(.dtb)。Host#ls kernel/arch/arm64/boot/dts/rockchip/sbc-tl3562*.dtb图 40执行如下命令将多个设备树的二进制文件(.dtb)打包进内核镜像中。备注若修改了任一设备树文件(.dts)需重新编译生成对应的二进制文件(.dtb)再执行打包操作。例如当修改sbc-tl3562-ex-tlmultiuart.dts设备树文件后需编译生成sbc-tl3562-ex-tlmultiuart.dtb再执行如下命令将多个设备树进行打包。Host#export ENABLE_MULTI_DTByHost#./build.sh kernel图 41图 42请确保已参照“配置编译选项”章节正确配置LinuxSDK编译选项然后在LinuxSDK的LinuxSDK源码目录下执行如下命令一键编译生成U-Boot、Kernel、文件系统、Recovery等镜像并打包生成系统镜像。备注若未设置ENABLE_MULTI_DTB环境变量进行内核编译时系统将默认启用单设备树打包模式即仅将一个设备树文件(.dts)编译并嵌入内核镜像具体打包的设备树文件由sbc_tl3562_ubuntu_defconfig文件的RK_KERNEL_DTS_NAME选项指定。Host#./build.sh图 43预计耗时约2小时后编译完成最终在rockdev目录下生成U-Boot、Kernel、文件系统、Recovery系统等镜像如下所示。图 44图 452.4系统组件镜像说明编译LinuxSDK后生成的系统组件镜像具体功能和作用如下表所示。由于篇幅过长等原因部分内容均不逐一展示如需获取完整版详细资料请关注Tronlong创龙科技微信公众号或官网或者评论区留言感谢您的支持