mtd是字符設(shè)備,mtdblock是塊設(shè)備

在綿陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站建設(shè),綿陽網(wǎng)站建設(shè)費(fèi)用合理。
可以看看dd命令的實(shí)現(xiàn),在busybox里有
補(bǔ)充:
/dev/mtd/* 或者 /dev/mtd* 這兩種表示方式一般表示的是字符設(shè)備/dev/mtdblock/* 或者 /dev/mtdblock* 這兩種是塊設(shè)備的表示方式mount 的一般都是塊設(shè)備貌似dd只對字符設(shè)備進(jìn)行操作
舉例:
The mtd0 is char device of mtdblock0.
Create char mtd devices
mknod /dev/mtd0 c 90 0
mknod /dev/mtd1 c 90 2
Linux系統(tǒng)中/dev/mtd與/dev/mtdblock的區(qū)別,即MTD字符設(shè)備和塊設(shè)備的區(qū)別
1. /dev/mtdN 是Linux 中的MTD架構(gòu)中,系統(tǒng)自己實(shí)現(xiàn)的mtd分區(qū)所對應(yīng)的字符設(shè)備,其里面添加了一些ioctl,支持很多命令,如MEMGETINFO,MEMERASE等。而mtd-util中的flash_eraseall等工具,就是以這些ioctl為基礎(chǔ)而實(shí)現(xiàn)的工具,實(shí)現(xiàn)一些關(guān)于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驅(qū)動(dòng)中,驅(qū)動(dòng)在用add_mtd_partitions()添加MTD設(shè)備分區(qū),而生成的對應(yīng)的塊設(shè)備。根據(jù)以上內(nèi)容,也就更加明白,為什么不能用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockN去操作了。因?yàn)?dev/mtdblock中不包含對應(yīng)的ioctl,不支持你這么操作。2. mtd char 設(shè)備的主設(shè)備號是90,而mtd block設(shè)備的主設(shè)備號是31:# ls /dev/mtd? -l crw-r----- 1 root root 90, 0 May 30 2007 /dev/mtd0crw-r----- 1 root root 90, 2 May 30 2007 /dev/mtd1crw-r----- 1 root root 90, 4 Jul 17 2009 /dev/mtd2crw-r----- 1 root root 90, 6 May 30 2007 /dev/mtd3crwxrwxrwx 1 root root 90, 8 May 30 2007 /dev/mtd4crwxrwxrwx 1 root root 90, 10 May 30 2007 /dev/mtd5crwxrwxrwx 1 root root 90, 12 May 30 2007 /dev/mtd6crwxrwxrwx 1 root root 90, 14 May 30 2007 /dev/mtd7crwxrwxrwx 1 root root 90, 16 May 30 2007 /dev/mtd8crwxrwxrwx 1 root root 90, 18 May 30 2007 /dev/mtd9# ls /dev/mtdblock? -lbrw-r----- 1 root root 31, 0 May 30 2007 /dev/mtdblock0brw-r----- 1 root root 31, 1 May 30 2007 /dev/mtdblock1brw-r----- 1 root root 31, 2 May 30 2007 /dev/mtdblock2brw-r----- 1 root root 31, 3 May 30 2007 /dev/mtdblock3brwxrwxrwx 1 root root 31, 4 May 30 2007 /dev/mtdblock4brwxrwxrwx 1 root root 31, 5 May 30 2007 /dev/mtdblock5brwxrwxrwx 1 root root 31, 6 May 30 2007 /dev/mtdblock6brwxrwxrwx 1 root root 31, 7 May 30 2007 /dev/mtdblock7brwxrwxrwx 1 root root 31, 8 May 30 2007 /dev/mtdblock8brwxrwxrwx 1 root root 31, 9 May 30 2007 /dev/mtdblock9此設(shè)備號,定義在/include/linux/mtd/mtd.h中 :#define MTD_CHAR_MAJOR 90#define MTD_BLOCK_MAJOR 313. 其中,mtd的塊設(shè)備的大小,可以通過查看分區(qū)信息獲得:# cat /proc/partitionsmajor minor #blocks name31 0 1024 mtdblock031 1 8192 mtdblock131 2 204800 mtdblock231 3 65536 mtdblock331 4 225280 mtdblock4上面中顯示的塊設(shè)備大小,是block的數(shù)目,每個(gè)block是1KB。而每個(gè)字符設(shè)備,其實(shí)就是對應(yīng)著上面的每個(gè)塊設(shè)備。即/dev/mtd0對應(yīng)/dev/mtdblock0,其他以此類推。換句話說,mtdblockN的一些屬性,也就是mtdN的屬性,比如大小。4。對每個(gè)mtd字符設(shè)備的操作,比如利用nandwrite去對/dev/mtd0寫數(shù)據(jù),實(shí)際就是操作/dev/mtdblock0。而這些操作里面涉及到的偏移量offset,都指的是此mtd 分區(qū)內(nèi)的偏移。比如向/dev/mtd1的offset為0的位置寫入數(shù)據(jù),實(shí)際操作的是物理偏移offset=/dev/mtd0的大小=1MB=0x100000。
1.返回到Linux系統(tǒng)的命令終端,再次輸入 fdisk -l 命令,就可以看到新添...
2.輸入fdisk /dev/sdb 開始對新添加的硬盤進(jìn)行分區(qū)操作。
3.輸入n 按回車鍵,然后再輸入 p ,按回車鍵。 n 表示新建一個(gè)分區(qū),p ...
4.輸入Partition number(即:分區(qū)號),按回車鍵。如果在 /dev/sdb ...
5.等待分區(qū)創(chuàng)建完成,輸入 w 保存磁盤分區(qū),并退出磁盤分區(qū)命令。
日常用語
英文縮寫:MTD
英文全稱:Month To Days
中文解釋:月初到今日
編程領(lǐng)域
MTD(memory technology device內(nèi)存技術(shù)設(shè)備)是用于訪問memory設(shè)備(ROM、flash)的Linux的子系統(tǒng)。MTD的主要目的是為了使新的memory設(shè)備的驅(qū)動(dòng)更加簡單,為此它在硬件和上層之間提供了一個(gè)抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。我將CFI接口的MTD設(shè)備分為四層(從設(shè)備節(jié)點(diǎn)直到底層硬件驅(qū)動(dòng)),這四層從上到下依次是:設(shè)備節(jié)點(diǎn)、MTD設(shè)備層、MTD原始設(shè)備層和硬件驅(qū)動(dòng)層。
Linux下常用的分區(qū)工具:
fdisk/sfdisk:命令行工具,各種版本和環(huán)境都能使用,包含在軟件包util-linux中
diskdruid:圖形化分區(qū)工具,只能在安裝REDHAT系統(tǒng)時(shí)使用。
第一步:fdisk
[root@novice ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
[root@novice ~]# fdisk /dev/sdb
Command (m for help): #在輸入上面的命令后會出現(xiàn)左邊的提示,輸入m就會得到一個(gè)幫助菜單,如下:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
#help雖然是英文的,可都很簡單,在這里不再解釋。
#現(xiàn)在,我們正式開始分區(qū)的操作:
Command (m for help): n #新建分區(qū)
Command action
e extended
p primary partition (1-4)
#e/p分別對應(yīng)擴(kuò)展分區(qū) /主分區(qū);我們先分四個(gè)主分區(qū),每個(gè)50M;然后再來增加主分區(qū)或擴(kuò)展分區(qū),看會出現(xiàn)怎樣的狀況,嘿嘿。
p #分區(qū)類型為主分區(qū)
Partition number (1-4, default 1): 1 #分區(qū)號,在這里我們依次選擇1、2、3、4
First sector (2048-496127, default 2048): #指定分區(qū)的起始扇區(qū),一般默認(rèn),按enter鍵即可。
Last sector, +sectors or +size{K,M,G} (2048-496127, default 496127): +50M #指定分區(qū)的終止扇區(qū),根據(jù)前面的提示我們可以做出相應(yīng)的選擇+sectors 或 +size{K,M,G}
Command (m for help): p #用p打印出已建好的分區(qū)列表
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
#剩下的三個(gè)分區(qū)的建立操作同上
#分好四個(gè)主分區(qū)后的情況如下
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 309298 25+ 83 Linux
#已經(jīng)建好四個(gè)主分區(qū)啦,現(xiàn)在我們來看看如果再建主分區(qū)或是擴(kuò)展分區(qū)的話會出現(xiàn)怎樣的情況:
Command (m for help): n
You must delete some partition and add an extended partition first
#看到了吧,不能再建分區(qū)啦!要再建分區(qū)的話必須刪除some分區(qū),再新建一個(gè)擴(kuò)展分區(qū)才行。
#現(xiàn)在,我們刪掉一個(gè)主分區(qū),來新建擴(kuò)展分區(qū)
Command (m for help): d #刪除分區(qū)
Partition number (1-4): 4 #選擇要?jiǎng)h除分區(qū)的分區(qū)號,我們選第四個(gè)
Command (m for help): p #打印,如下,四個(gè)分區(qū)變成了三個(gè)!
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
#新建一個(gè)擴(kuò)展分區(qū)
#如果在沒有建滿三個(gè)主分的區(qū)的情況下建立擴(kuò)展分區(qū),相關(guān)選項(xiàng)會有些不同。
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Selected partition 4
First sector (309248-496127, default 309248): #enter,默認(rèn)
Using default value 309248
Last sector, +sectors or +size{K,M,G} (309248-496127, default 496127): #enter,默認(rèn),使用剩余空間
Using default value 496127
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
#接下來,我們在新建的擴(kuò)展分區(qū)里再新建兩個(gè)邏輯分區(qū),因?yàn)橐呀?jīng)有了三個(gè)主分區(qū),這里不會再顯示是建立邏輯分區(qū)還是主分區(qū)的提示!
Command (m for help): n
First sector (311296-496127, default 311296): #enter
Using default value 311296
Last sector, +sectors or +size{K,M,G} (311296-496127, default 496127): +50M
Command (m for help): n
First sector (415744-496127, default 415744): #enter
Using default value 415744
Last sector, +sectors or +size{K,M,G} (415744-496127, default 496127): #enter
Using default value 496127
Command (m for help): p
Disk /dev/sdb: 254 MB, 254017536 bytes
8 heads, 61 sectors/track, 1016 cylinders, total 496128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 83 Linux
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
/dev/sdb5 311296 413695 51200 83 Linux
/dev/sdb6 415744 496127 40192 83 Linux
#上面的列表,就是我們今天分區(qū)的成果啦!接下來保存退出,重啟計(jì)算機(jī),就可以進(jìn)行下一步的mkfs操作啦!如果忘記了相關(guān)的操作命令,記得按m!!!
Command (m for help): w #保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
另:在建好分區(qū)后,我們還可以更改相關(guān)分區(qū)的文件系統(tǒng)類型
#如,我們要把第二個(gè)主分區(qū)改成Linux下的交換分區(qū),操作如下
Command (m for help): t #更改文件系統(tǒng)類型
Partition number (1-6): 2 #選擇第二個(gè)分區(qū)
Hex code (type L to list codes): L #選擇要更改的文件系統(tǒng)編碼,可以按L來查看相關(guān)編碼信息。
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
............
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): 82 #查找到linux swap的編碼為82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
Command (m for help): p
..............
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104447 51200 83 Linux
/dev/sdb2 104448 206847 51200 82 Linux swap / Solaris
/dev/sdb3 206848 309247 51200 83 Linux
/dev/sdb4 309248 496127 93440 5 Extended
/dev/sdb5 311296 413695 51200 83 Linux
/dev/sdb6 415744 496127 40192 83 Linux
#最后別忘了保存!如果你須要的話!
#擴(kuò)展分區(qū)不能直接使用,邏輯分區(qū)只能建立在擴(kuò)展分區(qū)上!
第二步:mkfs(mkfs時(shí)分區(qū)的格式最好與fdisk設(shè)定的分區(qū)格式一致,不然.......)
mkfs支持ext2 ext3 vfa msdos jfs reiserfs等文件系統(tǒng)。
用法1:mkfs -t
例: mkfs -t ext3 /dev/sdb2
用法2:mkfs.
例:mkfs,vfat /dev/sdb3
mke2fs支持ext2/ext3文件系統(tǒng)
用法:mke2fs [-j]
例:mke2fs -j /dev/sdb5
# 更多更具體的用法請參照相關(guān)命令的man手冊
下面,接著實(shí)驗(yàn):
例一
[root@novice ~]# mkfs -t ext3 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=52428800
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
第三部:掛載
掛載:mount
例:mount /dev/sdb1 /mnt /sdb1
卸載:umonut
例:umount /dev/sdb1
網(wǎng)站名稱:linux分區(qū)命令mtd的簡單介紹
分享URL:http://chinadenli.net/article0/ddgsiio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、Google、微信小程序、網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)