嵌入式Linux系统移植

📅 发布时间:2026/7/15 18:07:24 👁️ 浏览次数:
嵌入式Linux系统移植
文章目录移植思路制作映像文件准备文件生成映像文件文件分区创建分区表创建分区烧录文件测试移植思路配置正确的CPU架构指令集问题板级适配外设不同平台相关代码编译测试修改或添加相应配置集成化构建工具buildrootyacto等制作映像文件以STM32MP157A为例准备文件准备好ARM可信任固件程序TF-A、引导程序uboot、根文件系统rootfs如tf-a-stm32mp157a-fsmp1a.stm32、u-boot.stm32、rootfs.tar生成映像文件生成一个空的sdcard.img文件sudoddif/dev/zeroofsdcard.imgcount250752文件分区创建分区表sudoparted-ssdcard.img mklabel msdos创建分区sudosgdisk --resize-table128-a1-n1:34:445-c1:fsbl1-n2:446:857-c2:fsbl2-n3:858:4953-c3:ssbl-n4:4954:250713-c4:rootfs-A4:set:2-psdcard.img-g输出如下信息及成功*************************************************************** Found invalid GPT and valid MBR;converting MBR to GPTformatinmemory. *************************************************************** Setting name!partNum is0Setting name!partNum is1Setting name!partNum is2Setting name!partNum is3Disk sdcard.img:250752sectors,122.4MiB Sector size(logical):512bytes Disk identifier(GUID): B2BD73EF-E825-44C3-828A-709BDB09A14E Partition table holds up to128entries Main partition table begins at sector2and ends at sector33First usable sector is34, last usable sector is250718Partitions will be aligned on1-sector boundaries Totalfreespace is5sectors(2.5KiB)Number Start(sector)End(sector)Size Code Name134445206.0KiB8300fsbl12446857206.0KiB8300fsbl2385849532.0MiB8300ssbl44954250713120.0MiB8300rootfs Warning: The kernel is still using the old partition table. The new table will be used at the nextrebootor after you run partprobe(8)or kpartx(8)The operation has completed successfully.烧录文件将sdcard.img文件关联到Ubuntu的loop设备$sudolosetup-Pf--showsdcard.img /dev/loop16 $ls/dev/loop16 loop16 loop16p1 loop16p2 loop16p3 loop16p4 $ls/dev/disk/by-partlabel/*-llrwxrwxrwx1root root106月1116:10/dev/disk/by-partlabel/EFI\x20System\x20Partition-../../sda2 lrwxrwxrwx1root root146月1118:06 /dev/disk/by-partlabel/fsbl1 -../../loop16p1 lrwxrwxrwx1root root146月1118:06 /dev/disk/by-partlabel/fsbl2 -../../loop16p2 lrwxrwxrwx1root root146月1118:06 /dev/disk/by-partlabel/rootfs -../../loop16p4 lrwxrwxrwx1root root146月1118:06 /dev/disk/by-partlabel/ssbl -../../loop16p3 $ls/dev/loop16* /dev/loop16 /dev/loop16p1 /dev/loop16p2 /dev/loop16p3 /dev/loop16p4loop16因设备而已不一定是16烧录固件和引导程序sudoddiftf-a-stm32mp157a-fsmp1a.stm32of/dev/loop16p1statusprogressconvfsync;sudoddiftf-a-stm32mp157a-fsmp1a.stm32of/dev/loop16p2statusprogressconvfsync;sudoddifu-boot.stm32of/dev/loop16p3statusprogressconvfsync;为第四个分区增加文件系统$sudomkfs.ext4 /dev/loop16p4mke2fs1.46.5 丢弃设备块 完成 创建含有30720个块每块 4k和30720个 inode 的文件系统 正在分配组表 完成 正在写入 inode表 完成 创建日志1024 个块 完成 写入超级块和文件系统账户统计信息 已完成创建备用文件夹sudomkdir/mnt/rootfs挂载第四个分区$sudomount/dev/loop16p4 /mnt/rootfs/ $df-h文件系统 大小 已用 可用 已用% 挂载点 tmpfs 790M2.1M 788M1% /run /dev/sda3 98G 35G 58G38% / tmpfs3.9G03.9G0% /dev/shm tmpfs5.0M4.0K5.0M1% /run/lock /dev/sda2 512M6.1M 506M2% /boot/efi vmhgfs-fuse 735G 686G 49G94% /mnt/hgfs tmpfs 790M 100K 790M1% /run/user/1000 /dev/sr14.6G4.6G0100% /media/linux/Ubuntu22.04.2 LTS amd64 /dev/loop16p4 109M 24K 101M1% /mnt/rootfs将rootfs.tar 文件解压到/mnt/rootfs/cd/mnt/rootfs/;sudotarxvf ~/test/rootfs.tar;卸载/mnt/rootfs/,并且解除关联sudoumount/dev/loop16p4;sudolosetup-d/dev/loop16;测试将sdcard.img文件烧录到tf卡启动板子进行测试sudoddifsdcard.imgof/dev/sdbbs4Mstatusprogressconvfsync