轉貼備用!
1、/dev/mtdn是linux中的mtd架構中,系統自己實現的mtd分割槽所對應的字元裝置,其裡面新增了一些ioctl,支援很多命令,如memgetinfo,memerase等。
而mtd-util中的flash_eraseall等工具,就是以這些ioctl為基礎而實現的工具,實現一些關於flash的操作,比如,mtd工具中的flash_eraseall中的:
if(ioctl(fd,memgetinfo,&meminfo) != 0)
其中,memgetinfo,就是linux mtd中的\drivers\mtd\nand\mtdchar.c中的:
case memgetinfo:
info.type = mtd->type;
info.flags = mtd->flags;
info.size = mtd->size;
info.erasesize = mtd->erasesize;
info.writesize = mtd->writesize;
info.oobsize = mtd->oobsize;
/* the below fields are obsolete */
info.ecctype = -1;
info.eccsize = 0;
if (copy_to_user(argp, &info, sizeof(struct mtd_info_user)))
return -efault;
break;
而/dev/mtdblockn,是nandflash驅動中,驅動在用add_mtd_partitions()新增mtd裝置分割槽而生成的對應的塊裝置。根據以上內容也更加明白,為什麼不能用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockn去操作了,因為/dev/mtdblock中不包含對應的ioctl,不支援你這麼操作。
2、mtd char裝置的主裝置號是90;而mtdblock裝置的主裝置號是31;
此裝置號定義在\include\linux\mtd\mtd.h中
3、mtd塊裝置的大小可以通過檢視分割槽資訊來得到:
# cat /proc/partitions
major minor #blocks name
31 0 128 mtdblock0
31 1 128 mtdblock1
31 2 512 mtdblock2
31 3 2048 mtdblock3
31 4 32768 mtdblock4
31 5 486400 mtdblock5
上面顯示的塊裝置的大小,是block的數目,每個block是1kb;
而每個字元裝置,其實就是對應著上面的餓每個裝置,即/dev/mtd0對應/dev/mtdblock0,以此類推,換句話說,mtdblockn的一些屬性,也就是mtdn的屬性,比如大小。
4、對每個mtd字元裝置的操作,比如利用nandwrite去對/dev/mtd0寫資料,實際就是操作/dev/mtdblock0。而這些操作裡面涉及到得offset都指的是mtd分區內的偏移。比如向/dev/mtd1的offset為0的位置寫入資料,實際操作的物理偏移是offset=/dev/mtd0的大小=128kb。
5、mtd的字元裝置和塊裝置的命名規則,可以參考下表:
和 區別和聯絡, 和 區別和聯絡
和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...
rpx和樣式和class和flex
5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...
if和switch和for語句
if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...