在最初沒有mmc和emmc時候,android基本使用nand,onenand,nor,ecc nor作為存放裝置,MTD(Memory Technology Devices)是可以直接在這些原始裝置上操作的。android機器啟動後,可以通過命令cat proc/mtd,來查看
mtd裝置上的分區資訊。 下面是本人中興u880上的mtd裝置資訊:
$ cat proc/mtd
cat proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "obm"
mtd1: 00080000 00020000 "bootloader"
mtd2: 00040000 00020000 "ramdisk"
mtd3: 00040000 00020000 "imei"
mtd4: 00700000 00020000 "arbelbinary"
mtd5: 00100000 00020000 "msabinary"
mtd6: 00400000 00020000 "kernel"
mtd7: 00400000 00020000 "maintenance"
mtd8: 00500000 00020000 "recovery"
mtd9: 00040000 00020000 "misc"
mtd10: 01540000 00020000 "cache"
mtd11: 09600000 00020000 "system"
mtd12: 12200000 00020000 "userdata"
mtd13: 00800000 00020000 "nvm"
mtd14: 00800000 00020000 "telephony"
mtd15: 00200000 00020000 "reserved"
mtd16: 00a00000 00020000 "MRVL_BBM"
隨著,mmc,emmc,CompactFlash等帶有FTL(Flash Translate Lay)存放裝置的出現,mtd系統已經不能操作
該類裝置,所以如果當前android手機使用emmc等裝置作為內部存放裝置,當你cat proc/mtd時候,返回的是空的裝置清單。由此引發的另外的一個問題是,當android手機通過recovery模式進行OTA進行升級時候,且升級中會對
boot 或recovery等這些非檔案系統分區升級時候,會出現錯誤,因為老的升級程式還不支援非mtd裝置的操作。在升級指令碼源碼中擦寫分區的映射函數WriteRawImageFn是通過mtd_write_data來執行擦寫MTD分區。