嘗試從 eMMC 掛載 ext4 分區會出現“無效參數”錯誤
我正在嘗試在基於 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 獲取起始扇區成功掛載分區,然後通過 losttup -o 設置循環設備(開始扇區 * 扇區大小)/dev/loop0 /dev/mmcblk0,然後最後掛載 /dev/loop0。為什麼我必須通過這種方法而不是只能掛載 /dev/mmcblk0p2 等?
好的,事實證明問題在於並非所有分區都列在 /dev 下。eMMC 有 15 個分區,但只列出了 1 - 7 個。我認為 1 - 7 只是 ext4 分區,而其他分區(未格式化為 ext4)就不會出現在那裡。因此,當我認為我正在掛載 ext4 分區時,它正在嘗試掛載其他分區,但它無法掛載,因此出現了錯誤。問題源於核心配置,特別是 CONFIG_MMC_BLOCK_MINORS,我認為它預設為 8,所以只有前幾個分區出現。我重新編譯了核心,值為20,其餘分區顯示在/dev/mmcblk0p8、9、10等下,我可以很好地掛載它們。