日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mtd

發布時間:2024/9/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mtd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MTD(memory?technology?device內存技術設備)是用于訪問memory設備(ROM、flash)的Linux的子系統。MTD的主要目的是為了使新的memory設備的驅動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。CFI接口的MTD設備分為四層(從設備節點直到底層硬件驅動),這四層從上到下依次是:設備節點、MTD設備層、MTD原始設備層和硬件驅動層。

基本信息

  • 外文名稱

    MTD

  • 英文全程

    memory technology device

?
  • 中文解釋

    內存技術設備

  • 源代碼

    在/drivers/mtd子目錄下。

目錄 展開
1?基本介紹
2?原始設備
2.1?網絡美圖帝縮寫

基本介紹

MTD(memory technology device內存技術設備)是用于訪問memory設備(ROM、flash)的Linux的子系統。MTD的主要目的是為了使新的memory設備的驅動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。CFI接口的MTD設備分為四層(從設備節點直到底層硬件驅動),這四層從上到下依次是:設備節點、MTD設備層、MTD原始設備層和硬件驅動層。

原始設備

所有組成MTD原始設備的Flash芯片必須是同類型(無論是interleave還是地址相連),在描述MTD原始設備數據結構中采用同一結構描述組成Flash芯片。每個MTD原始設備有一個mtd_info結構,其中的priv指針指向一個map_info結構,map_info結構中的fldrv_priv指向一個cfi_private結構,cfi_private結構的cfiq指針指向一個cfi_ident結構,chips指針指向一個flchip結構的數組。其中mtd_info、map_info和cfi_private結構用于描述MTD原始設備,因為組成MTD原始設備的NOR型Flash相同,cfi_ident結構用于描述Flash芯片信息;而flchip結構用于描述每個Flash芯片專有信息。

根文件系統

文件系統mtd

字符設備節點

MTD字符設備

MTD塊設備

MTD原始設備

FLASH硬件驅動

塊設備節點

一、Flash硬件驅動層:硬件驅動層負責在init時驅動Flash硬件,Linux MTD設備的NOR Flash芯片驅動遵循CFI接口標準,其驅動程序位于drivers/mtd/chips子目錄下。NAND型Flash的驅動程序則位于/drivers/mtd/nand子目錄下

二、MTD原始設備:原始設備層有兩部分組成,一部分是MTD原始設備的通用代碼,另一部分是各個特定的Flash的數據,例如分區。

用于描述MTD原始設備的數據結構是mtd_info,這其中定義了大量的關于MTD的數據和操作函數。mtd_table(mtdcore.c)則是所有MTD原始設備的列表,mtd_part(mtd_part.c)是用于表示MTD原始設備分區的結構,其中包含了mtd_info,因為每一個分區都是被看成一個MTD原始設備加在mtd_table中的,mtd_part.mtd_info中的大部分數據都從該分區的主分區mtd_part->master中獲得。

在drivers/mtd/maps/子目錄下存放的是特定的flash的數據,每一個文件都描述了一塊板子上的flash。其中調用add_mtd_device()、del_mtd_device()建立/刪除 mtd_info結構并將其加入/刪除mtd_table(或者調用add_mtd_partition()、del_mtd_partition() (mtdpart.c)建立/刪除mtd_part結構并將mtd_part.mtd_info加入/刪除mtd_table 中)。

三、MTD設備層:基于MTD原始設備,linux系統可以定義出MTD的塊設備(主設備號31)和字符設備(設備號90)。MTD字符設備的定義在mtdchar.c中實現,通過注冊一系列file operation函數(lseek、open、close、read、write)。MTD塊設備則是定義了一個描述MTD塊設備的結構 mtdblk_dev,并聲明了一個名為mtdblks的指針數組,這數組中的每一個mtdblk_dev和mtd_table中的每一個 mtd_info一一對應。

四、設備節點:通過mknod在/dev子目錄下建立MTD字符設備節點(主設備號為90)和MTD塊設備節點(主設備號為31),通過訪問此設備節點即可訪問MTD字符設備和塊設備。

五、根文件系統:在Bootloader中將JFFS(或JFFS2)的文件系統映像jffs.image(或jffs2.img)燒到flash的某一個分區中,在/arch/arm/mach-your/arch.c文件的 your_fixup函數中將該分區作為根文件系統掛載。

六、文件系統:內核啟動后,通過mount 命令可以將flash中的其余分區作為文件系統掛載到mountpoint上。

設備層和原始設備層的函數調用關系(紅色部分需要我們實現):

一個MTD原始設備可以通過mtd_part分割成數個MTD原始設備注冊進 mtd_table,mtd_table中的每個MTD原始設備都可以被注冊成一個MTD設備,其中字符設備的主設備號為90,次設備號為0、2、4、 6…(奇數次設備號為只讀設備),塊設備的主設備號為31,次設備號為0、1、2、3…

mtd_notifier mtd_notifier

字符設備 mtd_fops 塊設備 mtd_fops

(mtdchar.c) (mtdblock.c) mtdblks

設備層

register_mtd_user()

get_mtd_device()

unregister_mtd_user()

put_mtd_device()

erase_info

mtd_notifiers

mtd_table

mtd_info

mtd_part

(mtdcore.c)

(mtdpart.c)

Your Flash

(your-flash.c)

add_mtd_partitions()

del_mtd_partitions()

原始設備層 add_mtd_device()

del_mtd_device()

mtd_partition

NOR型Flash芯片驅動與MTD原始設備

所有的NOR型Flash的驅動(探測probe)程序都放在 drivers/mtd/chips下,一個MTD原始設備可以由一塊或者數塊相同的Flash芯片組成。假設由4塊devicetype為x8的 Flash,每塊大小為8M,interleave為2,起始地址為0x01000000,地址相連,則構成一個MTD原始設備(0x01000000-0x03000000),其中兩塊interleave成一個chip,其地址從0x01000000到0x02000000,另兩塊interleave成一個chip,其地址從0x02000000到0x03000000。

請注意,所有組成一個MTD原始設備的Flash芯片必須是同類型的(無論是interleave還是地址相連),在描述MTD原始設備的數據結構中也只是采用了同一個結構來描述組成它的Flash芯片。

0x03000000

0x02000000

0x01000000

每個MTD原始設備都有一個mtd_info 結構,其中的priv指針指向一個map_info結構,map_info結構中的fldrv_priv指向一個cfi_private結構,cfi_private結構的cfiq指針指向一個cfi_ident結構,chips指針指向一個flchip結構的數組。其中mtd_info、 map_info和cfi_private結構用于描述MTD原始設備;因為組成MTD原始設備的NOR型Flash相同,cfi_ident結構用于描述Flash芯片的信息;而flchip結構用于描述每個Flash芯片的專有信息(比如說起始地址)

總結

以上是生活随笔為你收集整理的mtd的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。