MTD技術的基本原理

2021-07-02 23:28:31 字數 4378 閱讀 6096

mtd(memory technology device記憶體技術裝置)是用於訪問memory裝置(rom、flash)的linux的子系統。mtd的主要目的是為了使新的memory裝置的驅動更加簡單,為此它在硬體和上層之間提供了乙個抽象的介面,並進行了乙個層次劃分,層次從上到下大致為:裝置檔案、mtd裝置層、mtd原始裝置層、硬體驅動層。mtd的所有源**在/drivers/mtd子目錄下。

mtd字元驅動程式允許直接訪問flash器件,通常用來在flash上建立檔案系統,也可以用來直接訪問不頻繁修改的資料。

mtd塊裝置驅動程式可以讓flash器件偽裝成塊裝置,實際上它通過把整塊的erase block放到ram裡面進行訪問,然後再更新到flash,使用者可以在這個塊裝置上建立通常的檔案系統。

參考: 2

3 45 6

7 89 10

11 12

13 14

15 16

17 18

19 20

21 22

23 24

25 26

27 28

29 30

~ $ ls /dev/mtd* -l

crw-rw----    1 root     root      90,   0 jan  1 00:00 /dev/mtd0

crw-rw----    1 root     root      90,   1 jan  1 00:00 /dev/mtd0ro

crw-rw----    1 root     root      90,   2 jan  1 00:00 /dev/mtd1

crw-rw----    1 root     root      90,   3 jan  1 00:00 /dev/mtd1ro

crw-rw----    1 root     root      90,   4 jan  1 00:00 /dev/mtd2

crw-rw----    1 root     root      90,   5 jan  1 00:00 /dev/mtd2ro

crw-rw----    1 root     root      90,   6 jan  1 00:00 /dev/mtd3

crw-rw----    1 root     root      90,   7 jan  1 00:00 /dev/mtd3ro

brw-rw----    1 root     root      31,   0 jan  1 00:00 /dev/mtdblock0

brw-rw----    1 root     root      31,   1 jan  1 00:00 /dev/mtdblock1

brw-rw----    1 root     root      31,   2 jan  1 00:00 /dev/mtdblock2

brw-rw----    1 root     root      31,   3 jan  1 00:00 /dev/mtdblock3

/dev/mtd:

crw-rw-rw-    1 root     root      90,   0 jan  1 00:00 0

cr--r--r--    1 root     root      90,   1 jan  1 00:00 0ro

crw-rw-rw-    1 root     root      90,   2 jan  1 00:00 1

cr--r--r--    1 root     root      90,   3 jan  1 00:00 1ro

crw-rw-rw-    1 root     root      90,   4 jan  1 00:00 2

cr--r--r--    1 root     root      90,   5 jan  1 00:00 2ro

crw-rw-rw-    1 root     root      90,   6 jan  1 00:00 3

cr--r--r--    1 root     root      90,   7 jan  1 00:00 3ro

/dev/mtdblock:

brw-------    1 root     root      31,   0 jan  1 00:00 0

brw-------    1 root     root      31,   1 jan  1 00:00 1

brw-------    1 root     root      31,   2 jan  1 00:00 2

brw-------    1 root     root      31,   3 jan  1 00:00 3

可以看到有mtdn和對應的/dev/mtd/n、mtdblockn和對應的/dev/mtdblock/n兩類mtd裝置,分別是字元裝置,主裝置號90和塊裝置,主裝置號31。其中/dev/mtd0和/dev/mtd/0是完全等價的,/dev/mtdblock0和/dev/mtdblock/0是完全等價的,而/dev/mtd0和/dev/mtdblock0則是同乙個mtd分割槽的兩種不同應用描述,操作上是有區別的。

/dev/mtdn 是mtd架構中實現的mtd分割槽所對應的字元裝置(將mtd裝置分成多個區,每個區就為乙個字元裝置),其裡面新增了一些ioctl,支援很

多命令,如memgetinfo,memerase等。

mtd-utils中的flash_eraseall等工具,就是以這些ioctl為基礎而實現的工具,實現一些關於flash的操作。比如,mtd 工具中 flash_eraseall中:1 2

3 4 5

if (ioctl(fd, memgetinfo, &meminfo) != 0) 

fprintf(stderr, "%s: %s: unable to get mtd device info\n",exe_name, mtd_device);

return 1;

memgetinfo是linux mtd中的drivers/mtd/mtdchar.c中的ioctl命令,使用mtd字元裝置需要載入mtdchar核心模組。該**解釋了上面的第乙個現象。

/dev/mtdblockn,是

flash驅動

中用add_mtd_partitions()新增mtd裝置分割槽,而生成的對應的塊裝置。mtd塊裝置驅動程式可以讓flash器件偽裝成塊裝置,實際上它通過把整塊的erase block放到ram裡面進行訪問,然後再更新到flash,使用者可以在這個塊裝置上建立通常的檔案系統。

而對於mtd塊裝置,mtd裝置層是不提供ioctl的實現方法的,也就不會有對應的memgetinfo命令之類,因此不能使用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockn去進行操作,否則就會出現上面的現象一,同時也解釋了現象3——用mtd2擦除分割槽後,在用mtdblock2進行umount就會造成混亂。

mtd塊裝置的大小可以通過proc檔案系統進行檢視:1 2

3 45 6

7 89 10

~ $ cat /proc/partitions

major minor  #blocks  name

31     0        512 mtdblock0

31     1       1024 mtdblock1

31     2       5632 mtdblock2

31     3       9216 mtdblock3

254     0   30760960 mmcblk0    

254     1   30756864 mmcblk0p1

後面的兩個是sd塊裝置的分割槽大小。每個block的大小是1kb。

通過proc檔案系統檢視mtd裝置的分割槽情況:1 2

3 45 6 7

~ $ cat /proc/mtd

dev:    size   erasesize  name

mtd0: 00080000 00020000 "boot"

mtd1: 00100000 00020000 "kernel"

mtd2: 00580000 00020000 "roofs70"

可以發現,實際上mtdn和mtdblockn描述的是同乙個mtd分割槽,對應同乙個硬體分割槽,兩者的大小是一樣的,只不過是mtd裝置層提供給上層的檢視不一樣,給上層提供了字元和塊裝置兩種操作檢視——為了上層使用的便利和需要,比如mount命令的需求,你只能掛載塊裝置(有檔案系統),而不能對字元裝置進行掛載,否則會出現上面的現象2:無效引數。

這裡對於mtd和mtdblock裝置的使用場景進行簡單總結:

1. mtd-utils工具只能應用與/dev/mtdn的mtd字元裝置

2. mount、umount命令只對/dev/mtdblockn的mtd塊裝置有效

3. /dev/mtdn和/dev/mtdblockn是同乙個mtd裝置的同乙個分割槽(n一樣)

raid技術基本原理

近年來,cpu的處理效能保持著高速增長,intel公司在2017年最新發布的i9 7980xe處理器晶元更是達到了18核心36執行緒。但與此同時,硬碟裝置的效能提公升卻不是很大,因此逐漸成為當代計算機整體效能的瓶頸。而且,由於硬碟裝置需要進行持續 頻繁 大量的io操作,相較於其他裝置,其損壞機率也大...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

pwm控制的基本原理 PWM控制的基本原理

pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...