我正在尝试在基于 Intel Atom (Baytrail) 的 Android 平板电脑上设置自定义 Linux 安装,使用 Qt 5.5 进行设备创建。构建系统基于 Yocto 项目并构建嵌入式 Linux 映像。为了在平板电脑(最初是 Android 平板电脑)上运行此映像,我将启动分区替换为包含内核、initramfs 和初始启动脚本的映像,并将系统分区替换为完整映像,然后使用英特尔制造工具将这些闪存到设备。
到目前为止,我已经使用 initramfs 将设备引导到新内核,并运行 init 脚本。当尝试在嵌入式闪存上安装主分区时会出现问题。挂载系统分区的命令失败并显示“无效参数”。
cat proc/filesystems 显示支持 ext4,parted -l 显示内部 MMC 上的分区都是 ext4,第一个例外,即 EFI 引导分区。我无法挂载任何 ext4 分区,但我可以挂载 EFI 分区,所以我认为这意味着整个 MMC 应该可以访问。
运行 fdisk -l 仅显示第一个分区(EFI 启动分区),但我认为这是因为 fsdisk 不支持 GPT。
有谁知道为什么我无法挂载 ext4 分区?它们都在 /dev 中列出:
mmcblk0 mmcblk0p1 mmcblk0p2 mmcblk0p3 mmcblk0p4 mmcblk0p5 mmcblk0p6 mmcblk0p7
mmcblk0p1是可挂载的,并且是EFI引导分区。
抱歉,我无法发布任何实际输出,所以这全部来自记忆,但当我开始写这篇文章时,设备上的电池刚刚耗尽。如果再次充电后需要的话,我应该能够从命令中获得一些实际输出。
更新
所以我重新编译了Busybox,在fdisk中启用GPT支持,fdisk列出了分区。我还在设备上安装了 TestDisk,并且可以使用 TestDisk 浏览文件系统。尝试挂载 /dev/mmcblk0p(2 - 7) 下列出的分区仍然不起作用,但我可以通过从 fdisk -l 获取起始扇区成功挂载分区,然后通过 losetup -o 设置循环设备(起始扇区*扇区大小)/dev/loop0 /dev/mmcblk0,最后挂载/dev/loop0。为什么我必须通过此方法而不是只能挂载 /dev/mmcblk0p2 等?
答案1
好的,事实证明问题是并非所有分区都列在 /dev 下。 eMMC 有 15 个分区,但只列出了 1 - 7 个。我认为 1 - 7 只是 ext4 分区,其他分区(未格式化为 ext4)不会显示在那里。因此,当我认为我正在挂载 ext4 分区时,它试图挂载其他分区,但它无法挂载,因此出现错误。该问题源于内核配置,特别是 CONFIG_MMC_BLOCK_MINORS,我认为它默认为 8,因此只显示了前几个分区。我重新编译了内核,值为 20,其余分区显示在 /dev/mmcblk0p8、9、10 等下,我可以很好地挂载它们。