从 SDK 编译到镜像固化|SBC‑TLT153 单板机 Linux 系统深度开发指南(三)
4.2配置Kernel
4.2.1请设备树配置
参考“配置编译设备树文件”章节配置设备树文件。
4.2.2配置Linux内核选项
请参考“配置内核选项”章节配置内核选项。
4.3编译Kernel
在LinuxSDK源码目录下执行如下命令,配置编译选项,单独编译Linux内核。
Host# ./build.sh kernel


执行如下命令,打包生成新的内核镜像boot.fex。
Host# ./build.sh pack



4.4替换Kernel
我司已提供Linux内核镜像文件(boot_xxx.fex)、Linux内核模块压缩包(modules文件夹),位于产品资料“4-软件资料\Linux\Kernel\image\linux-5.10.198-[版本号]-[Git系列号]_bsp-[版本号]-[Git系列号]\”目录下。
其中nand目录下的内核镜像文件、内核模块适配NAND FLASH配置单板机,emmc目录下的内核镜像文件、内核模块适配eMMC配置单板机。
4.4.1替换内核镜像
请将Linux内核镜像拷贝至单板机root目录下(镜像名称请以实际情况为准),执行如下命令固化至NAND FLASH。
Target#flash_erase /dev/mtd9 0 0 //擦除/dev/mtd9分区的所有块
Target#nandwrite -p /dev/mtd9 boot.fex //将boot.fex写入/dev/mtd9分区
Target#reboot


备注:
(1)如需固化至系统启动卡,请参考如下命令进行操作。
(2)如需固化至eMMC,请将以下命令中的"mmcblk0p4"替换为"mmcblk2p4"。
Target#dd if=boot.fex of=/dev/mmcblk0p4 conv=fsync //将boot.fex写入系统启动卡的第4分区
Target#reboot

4.4.2替换内核模块
内核模块需与内核版本保持一致,否则会因版本不一致而导致内核模块无法加载。替换内核镜像后,请按如下方法替换对应版本的内核模块。
将内核模块压缩包解压后拷贝至单板机系统root目录下,执行如下命令,替换原有的内核模块。
备注:Git系列号请以实际为准。除了使用我司提供的内核模块压缩包,也可使用SDK根目录下的"/out/t153/sbc-tlt153-xxxx/ubuntu/lib/modules/"。
Target# rm /lib/modules/* -rf
Target# cp $(uname -r) /lib/modules/ -r
Target# sync
Target# reboot

5 Rootfs开发
5.1 Rootfs源码说明
Rootfs(根文件系统)是Linux内核启动后挂载的第一个文件系统,它包含了Linux系统启动和运行所必需的所有文件和目录。

5.2 修改Rootfs
本次操作以增加文件为例,演示rootfs根文件系统的修改方法。
rootfs根文件系统修改前需添加qemu-arm-static工具,请执行如下命令进行安装。
Host# sudo apt update
Host# sudo apt install qemu-user-static


执行如下命令创建mount_dir目录,挂载rootfs根文件系统。
Host# mkdir mount_dir
Host# tar -xzf /mnt/hgfs/SharedFolders/Tronlong-Desktop-22.04-v1.0-g73b96f4-nand.tar.gz -C /home/tronlong/mount_dir/
Host# sudo mount -t proc /proc mount_dir/proc/
Host# sudo mount -t sysfs /sys mount_dir/sys/
Host# sudo mount -o bind /dev mount_dir/dev/
Host# sudo mount -o bind /dev/pts mount_dir/dev/pts/

执行如下命令,使用chroot进入根文件系统。
Host# sudo chroot mount_dir

执行如下命令,在根文件系统新增test文件。
备注:如需修改或删除文件,操作同理。
Host# touch test

执行如下命令,退出并卸载rootfs根文件系统。
Host# exit
Host# sudo umount mount_dir/proc
Host# sudo umount mount_dir/sys
Host# sudo umount mount_dir/dev/pts
Host# sudo umount mount_dir/dev

执行如下命令,重新挂载rootfs根文件系统,可确认已成功新增test文件。
Host# sudo mount -t proc /proc mount_dir/proc/
Host# sudo mount -t sysfs /sys mount_dir/sys/
Host# sudo mount -o bind /dev mount_dir/dev/
Host# sudo mount -o bind /dev/pts mount_dir/dev/pts/
Host# sudo chroot mount_dir


执行如下命令,退出并卸载rootfs根文件系统。
Host# exit
Host# sudo umount mount_dir/proc
Host# sudo umount mount_dir/sys
Host# sudo umount mount_dir/dev/pts
Host# sudo umount mount_dir/dev

执行如下命令提取Tronlong-Desktop-22.04.tar.gz,提取完成后,将在当前目录生成Tronlong-Desktop-22.04.tar.gz压缩包。
Host# sudo tar -czf Tronlong-Desktop-22.04.tar.gz -C ./mount_dir . //注意有"."

5.3替换Rootfs
如需进行替换Rootfs镜像,请先参考“编译生成系统镜像”章节,打包生成Rootfs镜像,再执行如下命令,将eMMC/NAND FLASH配置对应的Rootfs镜像通过simg2img工具转化为RAW格式(镜像名称请以实际情况为准)。
Host# simg2img rootfs-emmc.fex rootfs_raw.ext4
备注:
(1)若需替换至NAND FLASH,可忽略此步骤。
(2)simg2img工具可通过"sudo apt-get install android-sdk-libsparse-utils"命令安装。

我司已提供相应文件系统镜像文件(rootfs_xxx.fex),位于产品资料“4-软件资料\Linux\Filesystem\image\Tronlong-Desktop-22.04-[版本号]-[Git系列号]\”目录下。
需特别说明的是,Rootfs文件系统替换操作,必须在目标存储设备未被当前系统挂载占用的状态下执行:
(1)若需将Rootfs镜像写入系统启动卡,请先从eMMC/NAND FLASH启动系统,再插入系统启动卡进行镜像替换。
(2)若需将Rootfs镜像写入eMMC/NAND FLASH,请先从系统启动卡启动系统,再执行镜像替换操作 。
5.3.1 eMMC配置
(1)替换至系统启动卡
请从eMMC启动系统,再插入系统启动卡。执行如下命令,查看系统启动卡的用户储存分区,以便存储文件系统镜像。
Target# mount | grep mmcblk0p12

请将Rootfs镜像(rootfs_raw.ext4)拷贝至单板机系统"/run/media/mmcblk0p12"目录下,执行如下命令固化至eMMC配置单板机的系统启动卡。固化完成后,重启单板机。
备注:请确保用于拷贝Rootfs镜像的文件系统目录具备充足的剩余存储空间。
Target# umount /dev/mmcblk0p8 //卸载系统启动卡的第8个分区
Target# dd if=/run/media/mmcblk0p12/rootfs.ext4 of=/dev/mmcblk0p8 bs=1M conv=fsync //读取rootfs.ext4镜像,写入到目标分区

(2)替换至eMMC
请从系统启动卡启动系统,执行如下命令,查看系统启动卡的用户储存分区,以便存储文件系统镜像。
Target# mount |grep mmcblk0p12

请将Rootfs镜像(rootfs.ext4)拷贝至单板机系统"/mnt/UDISK/"目录下,执行如下命令固化至eMMC。固化完成后,重启单板机。
备注:请确保用于拷贝Rootfs镜像的文件系统目录具备充足的剩余存储空间。
Target# umount /dev/mmcblk2p8 //卸载eMMC的第8个分区
Target# dd if=/mnt/UDISK/rootfs.ext4 of=/dev/mmcblk2p8 bs=1M conv=fsync //读取rootfs_raw.ext4镜像,写入到目标分区


浙公网安备 33010602011771号