跳到主要內容

發表文章

目前顯示的是 5月, 2013的文章

Maximum Partition Number for Each MMC Block Device

今天花時間看一個客戶回報的問題,因為解決方法很簡單,但卻浪費了不少時間,所以將解決過程紀錄下來,作為警惕。:P 問題是這樣的:為什麼對 eMMC  裝置作完 partition 後(切出 3 個 primary partitions, 還有 1 個 extended partition 包含 12 個 logical partitions),只有產生 3 個 primary partitions 以及 1個 extended partition 以及 3 個 logical partitions 的 device node? 我先花了些時間研究 MBR 的格式,然後肉眼觀察 partition 後的 eMMC raw data,看起來 fdisk  與我們加進 Linux kernel 的 host controller driver 應該沒有問題 ,那問題應該就是在 Linux parsing  MBR 的過程,再花了一點時間,觀察 linux/block/partitions/check.c  ,發現會以一個 block device 的 minors 作為 partition 數量的上限 。 好了,所以問題就在於 MMC layer 在將控制權交給 block layer 之前,是如何設定這個數值的。簡單搜尋一下,發現 在這 : 70 /* 71 * The defaults come from config options but can be overriden by module 72 * or bootarg options. 73 */ 74 static int perdev_minors = CONFIG_MMC_BLOCK_MINORS ; 75 呼,真相大白,原來需要調整這個 option...,預設值為 8 ,所以最多只產出 7 個 device node給 partitions 使用。我學到的教訓是:99%的情況下,不要浪費時間懷疑已相當成熟的工具,應先花點時間觀察是否有供使用者調整的選項。 不過從另一方面想,也確實地了解一遍每個步驟以及相互之間的關係,不算損失太多。:P