A. Linux的設備和設備號是指什麼可否簡單的解釋一下
Linux中I/O設備分為兩類:字元設備和塊設備。兩種設備本身沒有嚴格限制,但是,基於不同的版功能進行了權分類。
(1)字元設備:提供連續的數據流,應用程序可以順序讀取,通常不支持隨機存取。相反,此類設備支持按位元組/字元來讀寫數據。舉例來說,鍵盤、串口、數據機都是典型的字元設備。
(2)塊設備:應用程序可以隨機訪問設備數據,程序可自行確定讀取數據的位置。硬碟、軟盤、CD-ROM驅動器和快閃記憶體都是典型的塊設備,應用程序可以定址磁碟上的任何位置,並由此讀取數據。此外,數據的讀寫只能以塊(通常是512B)的倍數進行。與字元設備不同,塊設備並不支持基於字元的定址。
總結一下,這兩種類型的設備的根本區別在於它們是否可以被隨機訪問。字元設備只能順序讀取,塊設備可以隨機讀取。
B. linux 設備的含義
inux 中的設備有2種類型:字元設備(無緩沖且只能順序存取)、塊設備(有緩沖且可以隨機存取)。這些設備中,有些設備是對實際存在的物理硬體的抽象,而有些設備則是內核自身提供的功能(不依賴於特定的物理硬體,又稱為"虛擬設備")。每個設備在 /dev 目錄下都有一個對應的文件(節點)。
常見設備及相應/dev/下的文件名:
/dev/usb/hiddev0 | /dev/usb/hiddev1 --- USB 字元設備(滑鼠/鍵盤/游戲桿/手寫版等人操作計算機的設備)
/dev/uba | /dev/ubb --- USB 塊設備(U盤之類)
/dev/sda | /dev/sdb --- 第n個 SCSI 磁碟(整個磁碟)
/dev/hda | /dev/hdb --- 第n個 IDE 磁碟(整個磁碟)
/dev/sdc1 | /dev/sdc2 --- 第3個 SCSI 磁碟的第n個 分區 Linux/i386來說,分區1-4是主分區,5-15是邏輯分區。
/dev/scd0 | /dev/scd1 --- 第n個 SCSI CD-ROM
/dev/tty0 | /dev/tty1 --- 當前虛擬控制台、第n個虛擬控制台 TTY(終端)設備
Linux系統Mount點:mount的時候,mount的目標文件夾/media/cdrom要手動創建
mount /dev/cdrom /media/cdrom
C. linux 字元設備文件有什麼作用
/dev/audio是字元設備文件,其他的是塊設備文件 補充:對audio的存取是以位元組流方式來進行的。其它的設回備/dev/cdrom, /dev/fd0, /dev/had都是答磁碟(光碟機,軟碟機,主硬碟),它們的存取是通過數據塊來進行的
D. 嵌入式linux塊設備有哪些
塊設備太多了,具體可能看linux kernel源代碼目錄下Documentation/devices.txt。
最常用的主要是存儲有關的設備版,如:權U盤、SD卡、Flash、RAM Disk、loop back設備等。
U盤一般為scsi 磁碟設備
SD卡一般為mmc block設備
Flash一般為 mtd block設備
這些塊設備都會在/dev/下建立訪問節點,通過這個入口進行訪問。
E. linux 中mtd設備一般用來幹啥的 mtdblock呢,又是幹啥的
mtd是字元設備,mtdblock是塊設備
可以看看dd命令的實現,在busybox里有
補充:
/dev/mtd/* 或者 /dev/mtd* 這兩種表示方式一般表示的是字元設備/dev/mtdblock/* 或者 /dev/mtdblock* 這兩種是塊設備的表示方式mount 的一般都是塊設備貌似dd只對字元設備進行操作
舉例:
The mtd0 is char device of mtdblock0.
Create char mtd devices >
> mknod /dev/mtd0 c 90 0
> mknod /dev/mtd1 c 90 2
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 (_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/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此設備號,定義在/include/linux/mtd/mtd.h中 :#define MTD_CHAR_MAJOR 90#define MTD_BLOCK_MAJOR 313. 其中,mtd的塊設備的大小,可以通過查看分區信息獲得:# cat /proc/partitionsmajor minor #blocks name31 0 1024 mtdblock031 1 8192 mtdblock131 2 204800 mtdblock231 3 65536 mtdblock331 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。
F. unlx/linux操作系統中將設備分為字元設備和塊設備進行管理,有什麼特點
字元設備是一些串列埠的設備,比如鍵盤、滑鼠等,它的特點是串列讀專取,不能夠截斷輸出屬(也就是不能隨機訪問)。比如滑鼠,它的移動是滑動而不是跳躍。
塊設備一般是存儲設備,比如硬碟、軟盤等。它的特點是讓系統隨機訪問,比如硬碟,你可以在硬碟的不同塊讀寫,也可以隨機訪問硬碟的數據。
G. linux中普通文件和塊設備文件的區別
1,概述
一直都搞不明白普通文件跟塊文件的區別,總覺得一個普通的文件是存放在磁碟塊上,那它既屬於普通文件又屬於塊設備文件。剛好下午睡了一個大頭覺,比較清醒,集中學習了下普通文件和塊設備文件的區別和聯系。
本文從基本概念,定址空間,內核讀寫幾個方面介紹普通文件和塊設備文件的辯證統一。
2,基本概念
普通文件(Regular File)。指普通意義上的文件,如數據文件、可執行文件等。
設備文件(Device File)。類unix操作系統都是基於文件概念的,文件是由位元組序列而構成的信息載體。根據這一點,可以把IO設備當作設備文件這種所謂的特殊文件來處理;因此,與磁碟上的普通文件進行交互所用的同一系統調用可直接用於IO設備。根據設備驅動程序的基本特徵,設備文件可以分為兩種:塊和字元。這兩種硬體設備之間的差異並不容易劃分,但我們至少可以假定以下的差異:[1]
· 塊設備的數據可以隨機地被訪問,而且從人類用戶的觀點看,傳送任何數據塊所需的時間都是較少而且是大致相同的。塊設備的典型例子是硬碟、軟盤[1]。塊設備一般情況下是帶緩沖區的。
· 字元設備的數據或者不可以隨機訪問,或者可以被隨機訪問,但是訪問隨機數據所需的時間很大程度上依賴於數據在設備內的位置[1]。
3, 定址空間的區別
塊設備文件是塊設備的物理定址空間;普通文件是塊設備的虛擬定址空間。普通文件比塊設備文件多一層文件系統的地址轉換機構。
H. Linux塊組是干什麼用的
當文件系統高達數百GB的時候,那麼將inode和block放在一起管理是不明智的選擇,因為數量太大不容易管理,所以就產生了組塊的概念.
每個組塊就相當於一個小的文件系統,有自己的inode和block等,但是superblock就不一定每個組塊都有;但是我們說一個文件系統只有一個superblock,那豈不是自相矛盾?實際上除了第一個組塊的superblock外,後續的組塊superblock不一定有,若是有也是作為第一個superblock的備份,這樣可以作為superblock的救援。