附录 换电脑 / 换板子后快速恢复到实验二十三结束状态对应课件《第3章 移植U-Boot》3.6 节 《第5章 移植Linux内核》5.4~5.6 节收官形态的恢复手册本篇无新增 Slide系列说明本篇是第 3 章恢复手册01_移植U-Boot/附录_换机换板快速恢复到实验十一结束状态.md的续篇附录不参与专栏实验序号编号放在03_移植Linux内核/目录末尾备查。换了开发板、换了宿主机、源码树丢了或 SD 卡坏了用最少步骤恢复到实验二十三完成时的形态——也就是第 6 章全部实验实验二十四起可以直接开跑的起点。实验二十四根文件系统全景是认知篇、无板上状态所以本篇这份状态就是第 6 章一切实验的地基。全篇回答两个问题哪些东西住在哪、丢了要怎么找回来前一册管 U-Boot 与 SD 卡本册管第 5 章新增的全部家当。一、先分清换的是什么——第 5 章的家当账本一句话总纲U-Boot 与它的使用状态在 SD 卡上出厂件在 eMMC 上我们编的内核树在 Ubuntugit 管着点火产物在 tftp 服务器上。四样各断各的电源先对着下表点货再决定做几步家当住在哪断电/换机后丢了怎么找回来TF-A U-Boottrusted 版SD 卡fsbl1/fsbl2/ssbl 分区第 3 章烧写保留随卡走重烧见第一册附录步骤 3u-boot.stm32可无限重编U-Boot 环境变量bootargs/bootcmd/mybootnet…SD 卡env 区sdb4 内dd 三条不覆盖保留随卡走本册步骤 5 六条配方重设出厂内核 mipi050.dtb板上 eMMCbootfs 分区Ubuntu tftp 服务器各一份eMMC 里的保留资料 zip官方系统内核和设备树.zip重拷出厂根文件系统板上 eMMCrootfs 分区p4保留出厂自带——出厂自带坏了可重刷我们编的内核 dtb源码树Ubuntu~/Desktop/LINUX-gy/Test2/…/linux-stm32mp-5.4.31-r0/linux-5.4.31git WORKING 分支管着换电脑就丢——第 5 章最大的一份家当本册步骤 2bundle 恢复或按文档重做点火产物my_uImage / stm32mp157a-fsmp1a.dtbUbuntutftp 服务器 编译产物目录换电脑就丢源码树在就make重编几分钟源码树也没了先走步骤 2tftpd-hpa 服务器Ubuntuapt 装systemd 自启换电脑重装本册步骤 4五分钟场景必做步骤可以跳过只换开发板卡与电脑不动步骤 5板子侧环境复位→ 步骤 6验收工具链、源码树、编译、tftp 全不用换电脑源码树用 bundle/压缩包带过来了步骤 1三套工具链→ 步骤 3bundle 恢复 重编→ 步骤 4tftpd-hpa→ 步骤 5 → 步骤 623 个补丁、实验二十~二十二的所有源码改动换电脑源码树没带步骤 1 → 步骤 2 路线 b重做实验十九~二十二→ 步骤 3~6无卡坏了 / 全新卡第一册附录步骤 2~4分区 烧 U-Boot 环境复位→ 本册步骤 4~6内核树相关在 Ubuntu没丢只是不小心saveenv存错了 / 开机行为不对步骤 5其余全部最容易白做的一件事进系统失败就去重烧 SD 卡。第 5 章之后点火走的是 tftp——SD 卡上只有 U-Boot 和环境变量没有内核先看第二节判据分清坏在哪一层。二、恢复目标三层判据先认靶子再动手第一层U-Boot 层与第一册附录完全相同四条TF-A 开场无U-Boot SPL横幅Board: stm32mp1 in trusted mode (st,stm32mp157a-dk1)MMC: STM32 SD/MMC: 0, STM32 SD/MMC: 1、Net: eth0: ethernet5800a000无 EQOS/电源/ADC 报错printenvbootdelay 5、ipaddr 192.168.0.8、serverip 192.168.0.100、ethaddr 1A:1F:DB:0E:69:FD在位autoboot 落回STM32MP无出厂192.168.202.x的 TFTP 残留。→ 不达标第一册附录步骤 2~4分区/烧写/环境复位本篇不重复。第二层内核点火层第 5 章新增本册负责STM32MP run mybootnet # tftp 两条my_uImage ≈ 7,315,200 字节、stm32mp157a-fsmp1a.dtb ≈ 63,890 字节 # Image Name: Linux-5.4.31-g8 位哈希 ← git 版本串干净提交后无 -dirty # Machine model: HQYJ STM32MP157 FSMP1A Discovery Board ← 无 MIPI 我们的 dtb # 内核日志滚完 → 挂根 → rootfsmp1a:~# 或对应提示符第三层出厂系统层run bootcmd出厂件组合验收系统健康横幅ST OpenSTLinux - Weston - ... 3.1-snapshot fsmp1a ttySTM0→fsmp1a login: root (automatic login)→rootfsmp1a:~#。看门狗已被 systemd 接管喂狗32s进系统后不会被复位——这是与实验十六 panic 状态最大的行为差异。版本串认接力不认死值三种都算达标版本串形态来源Linux-5.4.31-g8dd24eeb2干净工作区重编第 5 章收官态推荐Linux-5.4.31-g381ee3922-dirty实验二十一/二十二改动未提交时的构建也能用但建议补提交Linux-5.4.31无哈希出厂内核run bootcmd时——别当成自己的三、步骤 1备料换电脑先看这节1.1 两棵源码树的迁移——第 5 章最大的家当U-Boot 树与内核树都是本地 git 仓库换电脑前务必打包带走在旧机器上执行两棵树各一条# 内核树在 ~/Desktop/LINUX-gy/Test2/…/linux-stm32mp-5.4.31-r0/ 里cd…/linux-stm32mp-5.4.31-r0/linux-5.4.31gitbundle create ~/linux-5.4.31-fsmp1a.bundle--all# 全部分支与历史打进一个文件# U-Boot 树同理cd…/u-boot-stm32mp-2020.01gitbundle create ~/u-boot-fsmp1a.bundle--all新机器恢复bundle 里带全部提交工作区改动不在 bundle 里——未提交的改动要先git stash list查一遍、有就git diff /tmp/wip.patch另存gitclone linux-5.4.31-fsmp1a.bundle linux-5.4.31cdlinux-5.4.31gitcheckout WORKING# bundle 里带分支名切回工作分支没做 bundle、树丢了→ 走本册步骤 2 路线 b按实验十九~二十二重做全部有指导约 2~3 小时。1.2 三套工具链各管一段别混用工具链装法管什么验证ST SDK/opt/st/.../stm32env实验一装一次用到毕业U-Boot编译source /stm32env echo $CCgcc-arm-9.2/usr/local/arm/.../etc/profile实验十九步骤 1清华 TUNA 镜像 wget官网已无此版内核 busybox buildroot第 5~6 章arm-none-linux-gnueabihf-gcc报没有输入文件u-boot-toolsmkimage/dtc实验十九步骤 2apt 一条uImage 打头、dtb 编译mkimage -V、dtc --version/etc/profile里那行 PATHgcc-arm-9.2 的 bin 目录换电脑要重加重登录生效。1.3 二进制素材在资料包D:\桌面文件\资料\嵌入式linux逐个点货文件大小丢了怎么办tf-a-stm32mp157a-fsmp1a-trusted.stm32241,984 字节唯一不能重编的从资料包或同学机器拷官方系统内核和设备树.zip出厂 uImage mipi050.dtb内含两个文件资料包重拷tftpboot 与 eMMC bootfs 各有一份副本kernel-初始设备树.zip/kernel-网卡驱动.zip2,226 / 18,708 字节资料包重拷重做实验二十/二十二时用busybox-1.32.0.tar.bz2/buildroot-2020.02.6.tar.bz22.4 / 5.6 MB第 6 章用资料包重拷四、步骤 2内核源码树恢复两条路线路线 abundle 恢复步骤 1 打过包十分钟cd共享目录/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0/gitclone共享目录/linux-5.4.31-fsmp1a.bundle linux-5.4.31cdlinux-5.4.31gitcheckout WORKINGgitlog--oneline|head-4# 期望自上而下8dd24eeb2实验二十一/二十二→ 381ee3922实验二十→ 77fcad789new kernel 基线验一轮改动全在三条 grep全过 实验二十~二十二一个不少grep-n^ARCH : armMakefile# 实验二十步骤 1grep-nstm32mp157a-fsmp1a.dtbarch/arm/boot/dts/Makefile# 实验二十步骤 4grep-nMAXIOdrivers/net/phy/Makefile drivers/net/phy/Kconfig# 实验二十二步骤 2~3grep-csdmmc2\|ethernet0arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi# 实验二十一/二十二的两段节点路线 b从零重做树丢了才走全程有指导按顺序重做每步的完整命令与判据都在对应篇里顺序重做什么参照篇耗时1gcc-arm-9.2TUNA 镜像 u-boot-tools实验十九步骤 1~210 分钟2en.SOURCES 解压 23 补丁 git 基线实验十九步骤 320 分钟3fragment 合并 存档stm32_fsmp1a_defconfig实验十九步骤 410 分钟4Makefile 两行 make uImage LOADADDR0xC200004020~40 分钟实验二十步骤 1~240 分钟5两个 dts 文件放入 dts/Makefile 加行 make dtbs实验二十步骤 3~55 分钟6dtsi 加 sdmmc2 节点 menuconfig 确认 重编实验二十一步骤 1~310 分钟7四处齐动maxio/phy_device/Makefile/Kconfig/dtsi ethernet0 重编实验二十二步骤 1~620 分钟五、步骤 3编译 产物对账cd$KTOP# 或 cd 共享目录/stm32mp1-…/linux-5.4.31makeuImage dtbsLOADADDR0xC2000040ls-larch/arm/boot/uImage arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb# uImage ≈ 7,315,200 字节量级Data Size 64 头dtb ≈ 63,890 字节量级含 sdmmc2/ethernet0 两节点# 版本串 Linux-5.4.31-g当前 HEAD 哈希工作区干净则无 -dirty# 与历史数值有出入属正常——编译时间戳与路径都会影响对账认能点火 Machine model 无 MIPI六、步骤 4tftpd-hpa 服务器 tftpboot 四文件sudoaptinstalltftpd-hpasudonano/etc/default/tftpd-hpa# 四行TFTP_USERNAME/TFTP_DIRECTORY/TFTP_ADDRESS/:69/TFTP_OPTIONS-l -c -ssudoservicetftpd-hpa restartsudoservicetftpd-hpa status# active (running)sudomkdir-p/home/cnu/tftpbootSRC共享目录/stm32mp1-…/linux-5.4.31cp$SRC/arch/arm/boot/uImage /home/cnu/tftpboot/my_uImagecp$SRC/arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /home/cnu/tftpboot/cp共享目录/官方系统内核和设备树解压目录/uImage /home/cnu/tftpboot/uImage# 出厂内核步骤出厂件点火用cp共享目录/官方系统内核和设备树解压目录/stm32mp157a-fsmp1a-mipi050.dtb /home/cnu/tftpboot/chmod644/home/cnu/tftpboot/*ls-l/home/cnu/tftpboot# 四文件在列、权限 644tftpd-hpa 是 systemd 服务装完即开机自启换电脑重启后不用手动拉起systemctl status一眼确认。七、步骤 5板子侧环境恢复换板子/环境乱了才做SD 卡侧U-Boot 三件套 分区 烧写 env default -a清遗留 基线四条全部照第一册附录步骤 2~4本册不重复。第一册做完后补上第 5 章的增量四条STM32MP setenv bootargs consolettySTM0,115200 root/dev/mmcblk2p4 rootwait rw STM32MP setenv mybootnet tftp c2000000 my_uImage;tftp c4000000 stm32mp157a-fsmp1a.dtb;bootm c2000000 - c4000000 STM32MP setenv mybootemmc ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157a-fsmp1a-mipi050.dtb;bootm c2000000 - c4000000 STM32MP setenv bootcmd tftp c2000000 uImage;tftp c4000000 stm32mp157a-fsmp1a-mipi050.dtb;bootm c2000000 - c4000000 STM32MP saveenv STM32MP saveenv变量值作用 / 依据bootargsconsolettySTM0,115200 root/dev/mmcblk2p4 rootwait rw盘号以点火日志实录为准出厂 dtb 下实测 eMMCmmcblk2自己的 dtb 无 mmc 别名按探测顺序可能挪位bootcmd出厂文件名三连run bootcmd 出厂内核点火第 10 章 GUI 用mybootnet自己的my_uImagestm32mp157a-fsmp1a.dtbrun mybootnet 自己的内核点火第 5 章日常mybootemmceMMC bootfs 出厂件ext4load不走网络网线不在时的备胎新板子的 eMMC盘号可能挪位mmcblk1/2是探测顺序点火日志里认3.69 GiB 004GA0 p1~p5那颗root跟着它写。八、步骤 6验收——两条点火都要过STM32MP run mybootnet # 判据Machine model HQYJ STM32MP157 FSMP1A Discovery Board无 MIPI→ 挂根 → 命令行 STM32MP reboot # 回 U-Boot停在命令行超 32 秒不会被复位——systemd 已接管喂狗 STM32MP run bootcmd # 判据出厂内核oe-user 串→ Weston 横幅 → rootfsmp1a:~#第 10 章 GUI 用这条两条都过 恢复到实验二十三结束状态第 6 章可直接开跑。九、换电脑 / 换板子必看的增量三件事串口 COM 号、VMware 三网卡、ASIX 网卡认法——与第 3/4 章完全相同见第一册附录第八节本篇不重复.scmversion还没建那是第 6 章实验二十七的活——所以点火Image Name:带g哈希是正常现象第 7 章加载模块前内核与模块的版本串必须一致板子 LCD 的两种表现要分清run mybootnet我们的内核屏不亮是预期行为没编显示驱动run bootcmd出厂内核屏才亮——第 10 章之前所有看板子反应的实验都走串口判断。十、白做的清单第 5 章增量不要重烧 SD 卡上的 U-Boot——它没变过除非第一册判据不过不要重打 23 个补丁——git 历史里全有bundle 恢复或按文档重做均可但别用重新解压再 patch覆盖一棵干净的树不要手改.config——配置固化在stm32_fsmp1a_defconfig改动走 menuconfig →cp .config arch/arm/configs/…路线不要在出厂系统里改文件——借来的根改了也会在下次重刷时丢。十一、恢复完成标志两棵源码树git log --oneline -1 U-Boote97b6818、内核8dd24eeb2git status --short均无输出arm-none-linux-gnueabihf-gcc报没有输入文件、mkimage -V、dtc --version有输出换电脑自检make uImage dtbs LOADADDR0xC2000040产物字节数在 7,315,200 / 63,890 量级版本串与时间戳不同会微调ls -l /home/cnu/tftpboot四文件在列、权限 644sudo service tftpd-hpa status active (running)run mybootnetMachine model无 MIPI、挂根成功、进命令行run bootcmd出厂内核点火、Weston 横幅、自动登录 root——两条点火都过 恢复完成十二、下一步到这里就是实验二十四第 6 章的开跑状态busybox 根文件系统全景认知篇→ busybox 构建 → etc/dev → NFS 挂根 → buildroot → 微调。见04_构建Linux根文件系统/25_实验二十四_根文件系统全景.md。第 6 章的全部家当busybox/buildroot 压缩包已复制进04_构建Linux根文件系统/tftpd-hpa 服务器与 NFS 目录在本册步骤 4 已就绪都在等这一刻。