第 26 节:虚拟机更改 U 盘分区信息 + 板子设置从 U 盘启动

发布时间:2026/8/23 7:03:40
第 26 节:虚拟机更改 U 盘分区信息 + 板子设置从 U 盘启动 虚拟机里更改U盘分区信息 把sd卡通过读卡器接入虚拟机里。 $cd/media/yhai/b1c100cd-cc74-4e7f-acb8-f0d34c931ee8/ //接入虚拟机后自动识别的目录 yhaiyhai:~$sudoparted/dev/sdc /*查看分区表 编号 起始点 结束点 大小 文件系统 名称 标志21049kB 1180kB 131kB TBC32097kB 2556kB 459kB RP143146kB 3736kB 590kB EBT54194kB 4260kB65.5kB WB065243kB 5439kB 197kB BPF76291kB 6685kB 393kB BPF-DTB87340kB 7406kB65.5kB FX98389kB 8847kB 459kB TOS109437kB 9896kB 459kB DTB //设备树1110.5MB11.3MB 786kB LNX //u-boot1211.5MB11.6MB65.5kB EKS1312.6MB12.8MB 197kB BMP1413.6MB13.8MB 131kB RP4114.7MB 128GB 128GB ext4 APP //存放 rootfsapp的存储场所 */ $sudoboot/extlinux/extlinux.conf /*更改启动分区 把root/dev/mmcblk0p1 改为root/dev/sda1 mmcblk 指“ flash/sd块设备”0 是设备的顺序编号p1 就是第一个分区。 sda 是硬盘的命名规则很多U盘 硬件 ext2格式的文件系统都是按这个去分区 sda表示第一块硬盘 sda1表示第一个分区 sdb表示第二块硬盘板子上:设置从U盘启动 插入到板子USB# run usb_boot //从u盘启动# setenv bootcmd run usb_boot //设置自动启动从u盘启动# saveenv# reset //复位后 发现能成功从U盘启动了第 26 节虚拟机更改 U 盘分区信息 板子设置从 U 盘启动日期2026-08-21 | 来源老师手稿(docx) 课堂录音转写含口误已纠正 这节课要解决的核心问题#问题1从 U 盘启动总共要改哪几处2为什么只改 extlinux.conf 的root内核和别的都不用动3parted分区表里那一堆分区TBC/EBT/BPF/DTB/LNX/APP…各是什么为什么没有专门的内核分区4root/dev/mmcblk0p1为什么要改成root/dev/sda15run usb_boot临时和setenv bootcmd run usb_boot; saveenv永久的区别老师原话「从 U 盘启动其实主要就改两个地方虚拟机里把配置文件改一下、板子上把自启动命令改一下。」 先看几个概念概念一句话解释读卡器把 SD 卡转成 USB 接口让电脑/虚拟机把它当 U 盘识别挂载点U 盘接入后自动挂到的目录如/media/yhai/UUID/parted查看/修改磁盘分区表的命令分区表磁盘上各分区的起始/结束/大小/名称清单APP 分区NVIDIA 官方镜像里存 rootfs 的分区内核也放里面bootcmd上电自动执行的第一条命令术语纠错本节录音口误MMCBRK / BRK0 / MMCBROKNG →mmcblkGSP / USP →usbSU盘 →U 盘「调露台」→rootfsSDBSPAE / SDCE →/dev/sdX。一、从 U 盘启动要改几处总览就两处别的内核、设备树、分区内容都不用动位置改什么为什么① 虚拟机里extlinux.conf 里root/dev/mmcblk0p1→root/dev/sda1设备命名从「SD 卡」变成「U 盘」② 板子上bootcmd从run distro_bootcmd改成run usb_boot让自启动直接走 USB 启动分支why 只改这两处内核还是同一个/boot/Image只是根文件系统所在设备的名字变了mmcblk0 → sda所以要改root启动入口从「遍历所有设备」改成「指定 USB」所以要改bootcmd。二、虚拟机里接 U 盘 查看分区表# 1. 把 SD 卡通过读卡器接入虚拟机或直接用 U 盘自动挂载cd/media/yhai/b1c100cd-cc74-4e7f-acb8-f0d34c931ee8/# 2. 查看 U 盘被识别成哪个设备、有哪些分区sudoparted/dev/sdc printwhy 用 partedLinux 里所有设备都是/dev/sdX形式先parted print看清分区表才能确认根文件系统在哪个分区、分区名对不对。分区表输出编号 起始点 结束点 大小 文件系统 名称 标志 2 1049kB 1180kB 131kB TBC 3 2097kB 2556kB 459kB RP1 4 3146kB 3736kB 590kB EBT 5 4194kB 4260kB 65.5kB WB0 6 5243kB 5439kB 197kB BPF 7 6291kB 6685kB 393kB BPF-DTB 8 7340kB 7406kB 65.5kB FX 9 8389kB 8847kB 459kB TOS 10 9437kB 9896kB 459kB DTB ← 设备树 11 10.5MB 11.3MB 786kB LNX ← u-boot 12 11.5MB 11.6MB 65.5kB EKS 13 12.6MB 12.8MB 197kB BMP 14 13.6MB 13.8MB 131kB RP4 1 14.7MB 128GB 128GB ext4 APP ← rootfs内核也在这里三、分区表详解重点为什么没有内核分区这是 NVIDIA 官方镜像刷机时默认分好的几个关键分区分区名称作用DTB设备树存放设备树device treeLNXu-bootu-boot 镜像位置APProotfs根文件系统占 128GB 绝大部分空间关键洞察整张表里没有专门的内核kernel分区why因为第 25 节讲了内核已经被搬到文件系统里/boot/Image和 rootfs 一起放在 APP 分区。所以不能再用脚本单独刷内核flash.sh -k LNX只能刷 u-boot刷不到内核改内核 进文件系统替换/boot/Image这个文件。关于 APP 分区它不叫rootfs而叫APP本质一样——只是它不只放应用程序内核也放里面所以叫 APP 更贴切。四、改 extlinux.confroot 从 mmcblk0p1 → sda1sudovim/media/yhai/b1c100cd-cc74-4e7f-acb8-f0d34c931ee8/boot/extlinux/extlinux.conf# 把这一行 APPEND ${cbootargs} rootfstypeext4 root/dev/mmcblk0p1 rw rootwait # 改成 APPEND ${cbootargs} rootfstypeext4 root/dev/sda1 rw rootwait为什么必须改启动设备设备命名root 写法SD 卡 / flashmmcblk顺序p分区root/dev/mmcblk0p1U 盘 / 硬盘sd字母分区root/dev/sda1mmcblk0p1flash/SD 块设备第 0 块、第 1 分区。sda1第 1 块 U 盘/硬盘、第 1 分区U 盘一般只有一块就是sda。根文件系统分区号还是第 1 分区没变只是设备名从 mmcblk 变成了 sda。why 名字会变虚拟机里 U 盘被识别成/dev/sdc因为宿主机已有 sda/sdb 两块硬盘但插到板子上时板子没有别的硬盘U 盘就是第一块/dev/sda。改完root/dev/sda1后弹出 U 盘插到板子上就能对上号。五、板子上run usb_boot 试启动# 把改好的 U 盘插到板子 USB 口重新上电进入 u-boot 命令行run usb_boot# 手动执行一次「从 USB 启动」usb_boot是环境变量里现成的启动命令run boot_pci_enum; usb start; if usb dev ...对应boot_targets里的usb0。执行后从 USB 挂载、加载内核、进入系统 成功。验证是不是真从 U 盘启动把 SD 卡拔掉只留 U 盘还能正常起来就说明 rootfs 确实在 U 盘上。六、固化setenv bootcmd saveenv临时用run usb_boot可以但想让每次上电都自动从 U 盘启动setenv bootcmd run usb_boot# 把自启动命令改成「从 USB 启动」saveenv# 写回 SPI Flash 持久化reset# 复位验证自动启动也可以setenv bootcmd usb_boot不加 run效果等价——老师演示时两种都提过本质一样。恢复按优先级启动setenv bootcmd run distro_bootcmd; saveenv。why 要 saveenvsetenv只改内存副本saveenv才写回 SPI Flash第 24 节讲过否则复位后丢失。 常见坑现象原因解决插 U 盘后虚拟机不识别读卡器/USB 接口问题、挂载延迟稍等几秒重新插拔ls /media/yhai/看挂载点parted print显示错误设备U 盘被识别成 sdc/sdd不是 sda用lsblk或df -h确认实际设备名再 parted改完 root 后板子起不来kernel panic设备名/分区号对不上确认是sda1还是sda2usb start; usb tree排查改了 extlinux.conf 没生效改的是宿主机挂载的旧目录 / 没保存确认路径是/media/yhai/UUID/boot/extlinux/改完保存再弹出想恢复 SD 卡启动忘了怎么回bootcmd 被改成了 usb_bootsetenv bootcmd run distro_bootcmd; saveenv刷内核脚本flash.sh -k LNX刷不到内核根本没有内核分区内核在文件系统里改内核 替换/boot/Image不是刷分区✅ 自测题从 U 盘启动总共要改哪两处分别在哪个环境做为什么改的是root而不是内核本身parted分区表里 DTB、LNX、APP 三个分区各存什么为什么整张分区表里没有专门的内核分区root/dev/mmcblk0p1每个字段表示什么U 盘启动为什么要改成sda1run usb_boot和setenv bootcmd run usb_boot; saveenv有什么区别怎么验证系统是真的从 U 盘而不是 SD 卡启动的 自测题答案1. 两处① 虚拟机里改 extlinux.conf 的rootmmcblk0p1 → sda1② 板子上改bootcmdrun distro_bootcmd→run usb_boot。内核、设备树、分区内容都不用动。2. 为什么改 root内核还是同一个/boot/Image没变只是根文件系统所在设备的名字从 SD 卡mmcblk0变成了 U 盘sda所以只改root指向的设备名即可。3. 三个分区DTB存设备树LNX存 u-boot 镜像APP存根文件系统rootfs内核也放里面。4. 没有内核分区因为内核已经被搬到文件系统里/boot/Image和 rootfs 一起放在 APP 分区。所以不能再用脚本单独刷内核改内核 替换/boot/Image文件。5. mmcblk0p1mmcblk flash/SD 块设备、0 第 0 块设备、p1 第 1 分区。U 盘/硬盘按sd字母分区命名板子上 U 盘是第一块设备即sda、第 1 分区即sda1所以要改成sda1。6. 区别run usb_boot只是手动执行一次从 USB 启动重启后还是按原 bootcmdsetenv bootcmd run usb_boot; saveenv是改自启动命令并持久化之后每次上电都自动从 U 盘启动。7. 验证把 SD 卡拔掉只留 U 盘还能正常启动进入系统就说明 rootfs 确实在 U 盘上、是真从 U 盘启动的。 200 字速记摘要从 U 盘启动只需改两处虚拟机里把 extlinux.conf 的root/dev/mmcblk0p1改成root/dev/sda1SD 卡叫 mmcblk、U 盘叫 sda设备名变了但分区号还是第 1 分区板子上把bootcmd从run distro_bootcmd改成run usb_boot再saveenv固化。操作流程U 盘接入虚拟机自动挂载到/media/yhai/UUID/用sudo parted /dev/sdc print查看分区表——NVIDIA 官方镜像分了 14 个区关键的是 DTB设备树、LNXu-boot、APProotfs且没有专门内核分区因为内核已搬进文件系统、和 rootfs 一起在 APP 分区所以改内核是替换/boot/Image而非刷分区。改完弹出 U 盘插到板子run usb_boot试启动拔掉 SD 卡验证是否真从 U 盘起要永久生效就setenv bootcmd run usb_boot; saveenv; reset想恢复就改回run distro_bootcmd。