Linux系統中/dev/mtd與/dev/mtdblock的區別,即MTD字元裝置和塊裝置的區別
1. /dev/mtdN 是Linux 中的MTD架構中,系統自己實現的mtd分割槽所對應的字元裝置,其裡面添加了一些ioctl,支援很多命令,如MEMGETINFO,MEMERASE等。
而mtd-util中的flash_eraseall等工具,就是以這些ioctl為基礎而實現的工具,實現一些關於Flash的操作。比如,mtd 工具中的 flash_eraseall中的:
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/nand/mtdchar.c中的:
static int mtd_ioctl(struct inode *inode, struct file *file,
u_int cmd, u_long arg)
{
。。。。。
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,是Nand Flash驅動中,驅動在用add_mtd_partitions()新增MTD裝置分割槽,而生成的對應的塊裝置。
根據以上內容,也就更加明白,為什麼不能用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockN去操作了。因為/dev/mtdblock中不包含對應的ioctl,不支援你這麼操作。
2. mtd char 裝置的主裝置號是90,而mtd block裝置的主裝置號是31:
# ls /dev/mtd? -l
crw-r----- 1 root root 90, 0 May 30 2007 /dev/mtd0
crw-r----- 1 root root 90, 2 May 30 2007 /dev/mtd1
crw-r----- 1 root root 90, 4 Jul 17 2009 /dev/mtd2
crw-r----- 1 root root 90, 6 May 30 2007 /dev/mtd3
crwxrwxrwx 1 root root 90, 8 May 30 2007 /dev/mtd4
crwxrwxrwx 1 root root 90, 10 May 30 2007 /dev/mtd5
crwxrwxrwx 1 root root 90, 12 May 30 2007 /dev/mtd6
crwxrwxrwx 1 root root 90, 14 May 30 2007 /dev/mtd7
crwxrwxrwx 1 root root 90, 16 May 30 2007 /dev/mtd8
crwxrwxrwx 1 root root 90, 18 May 30 2007 /dev/mtd9
# ls /dev/mtdblock? -l
brw-r----- 1 root root 31, 1 May 30 2007 /dev/mtdblock1
brw-r----- 1 root root 31, 2 May 30 2007 /dev/mtdblock2
brw-r----- 1 root root 31, 3 May 30 2007 /dev/mtdblock3
brwxrwxrwx 1 root root 31, 4 May 30 2007 /dev/mtdblock4
brwxrwxrwx 1 root root 31, 5 May 30 2007 /dev/mtdblock5
brwxrwxrwx 1 root root 31, 6 May 30 2007 /dev/mtdblock6
brwxrwxrwx 1 root root 31, 7 May 30 2007 /dev/mtdblock7
brwxrwxrwx 1 root root 31, 8 May 30 2007 /dev/mtdblock8
brwxrwxrwx 1 root root 31, 9 May 30 2007 /dev/mtdblock9
此裝置號,定義在/include/linux/mtd/mtd.h中 :
#define MTD_CHAR_MAJOR 90
#define MTD_BLOCK_MAJOR 31
3. 其中,mtd的塊裝置的大小,可以通過檢視分割槽資訊獲得:
# cat /proc/partitions
major minor #blocks name
31 0 1024 mtdblock0
31 1 8192 mtdblock1
31 2 204800 mtdblock2
31 3 65536 mtdblock3
31 4 225280 mtdblock4
上面中顯示的塊裝置大小,是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的大小=1MB=0x100000。
5.mtd的字元裝置和塊裝置的命名規則,可以參考下表:
Table 7-1. MTD /dev entries, corresponding MTD user modules, and relevant device major numbers
/dev entry
Accessible MTD user module
Device type
Major number
mtdN
char device
char
90
mtdrN
char device
char
90
mtdblockN
block device, read-only block device, JFFS, and JFFS2
block
31
nftlLN
NFTL
block
93
ftlLN
FTL
block
44
Table 7-2. MTD /dev entries, minor numbers, and naming schemes
/dev entry
Minor number range
Naming scheme
mtdN
0 to 32 per increments of 2
N = minor / 2
mtdrN
1 to 33 per increments of 2
N = (minor - 1) / 2
mtdblockN
0 to 16 per increments of 1
N = minor
nftlLN
0 to 255 per sets of 16
L = set;[2]N = minor - (set - 1) x 16; N is not appended to entry name if its value is zero.
ftlLN
0 to 255 per sets of 16
Same as NFTL.
上表相關內容,請參考附錄2.
【附錄】
2.7.1 MTD-Supported Devices
相關推薦
Linux系統中/dev/mtd與/dev/mtdblock的區別,即MTD字元裝置和塊裝置的區別
1. /dev/mtdN 是Linux 中的MTD架構中,系統自己實現的mtd分割槽所對應的字元裝置,其裡面添加了一些ioctl,支援很多命令,如MEMGETINFO,MEMERASE等。 而mtd-util中的flash_eraseall等工具,就是以這些ioctl為基礎而
linux系統中如何建立與刪除軟連線(方便快捷使用,大量節約時間)
建立軟連線可以給我們帶來很大的好處,舉個例子,咱們在訪問深度較為長的檔案或資料夾時,可以選擇直接使用軟連線,讓我們實現能快速到達檔案所在位置的效果 首先,咱們需要到達的目的地址是:/usr/local
【轉】linux系統中如何進入退出vim編輯器,方法及區別
在linux家族中,vim編輯器是系統自帶的文字編輯器,其功能強大自不必說了。 偶有小白,剛接觸linux,要修改某個文字檔案,不可能像WINDOWS那樣操作,更有甚者,進入VI編輯器後,無法退出以致強抽關機,確是不得以呀。 &nb
linux系統中如何進入退出vim編輯器,方法及區別
進入VIM編輯器 vi /etc/profile 若有這個檔案,就開啟,若沒有,就為新建了 編輯 可以通過上下左右移動游標,跟在windows中沒啥區別 退出vim編輯器 1、儲存退出 esc : W Q esc退出; 等待輸入命令 W
[Linux]字元裝置和塊裝置的區別
前言: 最根本區別在於它們是否可以被隨機訪問,字元裝置可以不定長度依循先後順序存取資料;塊裝置可以隨機存取。 裝置檔案分為Block Device Driver和Character Device Drive兩類。Character Device Drive又被稱為字元裝
Linux系統中有關/dev/null和/dev/zero文件說明及實踐
linux /dev/null 特殊文件 /dev/zero Linux系統中有關/dev/null和/dev/zero文件說明提示:這個題目完全可以作為一個面試題考考運維的應聘者:面試題:請解釋Linux中/dev/null和/dev/zero兩個文件的作用和區別。在類Unix操作系統中,
Linux系統中ssh與sshd服務
一、系統中的ssh與sshd服務 概念簡介 openssh 在主機中開啟了openssh服務,那麼就對外開放了遠端連線的介面 openssh的服務端:sshd openssh的客戶端:ssh ssh————————————>sshd client
linux系統中的防火牆(iptables與firewalld)——iptables
iptables 關閉firewalld開啟iptables 相關概念 IPTABLES 是與最新的 3.5 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Lin
linux系統中的防火牆(iptables與firewalld)——firewalld
防火牆 防火牆是整個資料包進入主機前的第一道關卡。防火牆主要通過Netfilter與TCPwrappers兩個機制來管理的。 1)Netfilter:資料包過濾機制 2)TCP Wrappers:程式管理機制 關於資料包過濾機制有兩個軟體:firewalld與iptables cento
linux系統中的磁碟分割槽與管理
計算機中存放資訊的主要的儲存裝置就是硬碟,但是硬碟不能直接使用,必須對硬碟進行分割,分割成的一塊一塊的硬碟區域就是磁碟分割槽。在傳統的磁碟管理中,將一個硬碟分為兩大類分割槽:主分割槽和擴充套件分割槽。主分割槽是能夠
Linux系統中定時任務cron和crontab命令詳解與配置規則說明
cron機制 cron可以讓系統在指定的時間,去執行某個指定的工作,我們可以使用crontab指令來管理cron機制 crontab引數 -u:這個引數可以讓我們去編輯其他人的crontab,如果沒有加上這個引數的話就會開啟自己的crontab
linux系統中的延時任務與定時任務管理
延時任務與定時任務的簡單管理 摘要:本文主要介紹了延時命令at的使用方法、限定普通使用者的不正確延時任務、使用者級定時任務的配置、系統級定時任務的配置,最後用臨時檔案生成策略配置的實驗證明了crond.
在Linux系統中使用md5sum校驗資料一致性的耗時驗證與分析
我們在Linux系統中校驗檔案一致性時,通常使用md5sum命令來生成檔案的MD5碼,下面先介紹下MD5: MD5演算法常常被用來驗證網路檔案傳輸的完整性,防止檔案被人篡改。MD5 全稱是報文摘要演算法(Message-Digest Algorithm 5),此演算法對任意長度的資訊逐位進行計算,產
Linux下/usr/bin與/usr/local/bin/區別總結 linux 系統中的 /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin 目錄的區別 linux 系統中的 /bin /sbin /usr/bin /usr/s
Linux下/usr/bin與/usr/local/bin/區別總結 2017年10月13日 12:30:17 2puT 閱讀數:15930 一.
詳解Linux系統中軟連線和硬連結的區別與聯絡
Linux 系統中有軟連線和硬連結兩種特殊的“檔案”。 其中軟連線實際上可以看作是Windows中的快捷方式,而硬連結則可以看作類似於一個檔案的 “指標”(也不完全相同) 。 建立方法都很簡單: 1. 軟連線(符號連結) ln -s source target 2
exit()與_exit()函式的區別(Linux系統中)
http://blog.chinaunix.net/uid-12461657-id-3140887.html 注:exit()就是退出,傳入的引數是程式退出時的狀態碼,0表示正常退出,其他表示非正常退出,一般都用-1或者1,標準C裡有EXIT_SUCCESS和EXIT
Shell中的>/dev/null 2>&1 與 2>&1 >/dev/null 與&>/dev/null 的區別
預設情況下,總是有三個檔案處於開啟狀態,標準輸入(鍵盤輸入)、標準輸出(輸出到螢幕)、標準錯誤(也是輸出到螢幕),它們分別對應的檔案描述符是0,1,2 。那麼我們來看看下面的幾種重定向方法的區別: >/dev/null 2>&1 // 實際上,應該等
設定與檢視Linux系統中的環境變數
大家好,我是良許。 大家都知道,在 Linux 系統中,有**環境變數**和 **Shell 變數**這兩種變數。 環境變數是在程式及其子程式中全域性可用的,常常用來儲存像預設的文字編輯器或者瀏覽器,以及可執行檔案的路徑等等這樣的資訊。而 Shell 變數僅在當前 Shell 中可用,可以用來儲存當前使用
老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?
邏輯卷管理 磁盤 每日一題 1.題目老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?2.參考答案01:將一個或多個物理分區創建為一個PV# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" success
linux系統中定時任務
linu tab 一次 腳本 lin edi 路徑 執行 表示 1、查看所有定時任務:命令:“crontab -l” 數字意思解釋如下:從左到右,依次是:分、時、日、月、星期。 2、編輯定時執行計劃:命令:"crontab -e" ,e表示edit修改的意思。 3、修