linux mknod命令解析


linux mknod命令解析

http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html

 

mknod:make node  生成設備節點/文件

     mknod [OPTION]... NAME TYPE [MAJOR MINOR]

DESCRIPTION
options 選項
       Create the special file NAME of the given TYPE.

       Mandatory arguments to long options are mandatory for short options too.

       -m, --mode=MODE   設置設備文件的文件權限
              set file permission bits to MODE, not a=rw - umask

       -Z, --context=CTX   設置selinux的安全上下文
              set the SELinux security context of NAME to CTX

       --help display this help and exit

       --version

       TYPE 類型
       b      create a block (buffered) special file
       c, u   create a character (unbuffered) special file
       p      create a FIFO

 

 

主、次設備號可以在內核源代碼的./Documenttation/devices.txt里查到。當然節點的位置不一定要在/dev下,但是為了方便管理一般都是指定/dev

Linux就這個范兒P552

 

個人覺得linux的軟件設計思想異常強大,比如把所有的設備都當做文件來處理,大大簡化了程序員的負擔,向提出這個思想的大神s致敬!!

先來看看linux系統中設備管理的基本知識:

我們的linux操作系統跟外部設備(如磁盤、光盤等)的通信都是通過設備文件進行的,應用程序可以打開、關閉、讀寫這些設備文件,從而對設備進行讀寫,這種操作就像讀寫普通的文件一樣easy。linux為不同種類的設備文件提供了相同的接口,比如read(),write(),open(),close()。

所以在系統與設備通信之前,系統首先要建立一個設備文件,這個設備文件存放在/dev目錄下。其實系統默認情況下就已經生成了很多設備文件,但有時候我們需要自己手動新建一些設備文件,這個時候就會用到像mkdir, mknod這樣的命令。

mknod 的標准形式為: 

mknod DEVNAME {b | c} MAJOR MINOR

 

1,DEVNAME是要創建的設備文件名,如果想將設備文件放在一個特定的文件夾下,就需要先用mkdir在dev目錄下新建一個目錄;

2, b和c 分別表示塊設備和字符設備:

b表示系統從塊設備中讀取數據的時候,直接從內存的buffer中讀取數據,而不經過磁盤;

c表示字符設備文件與設備傳送數據的時候是以字符的形式傳送,一次傳送一個字符,比如打印機、終端都是以字符的形式傳送數據;

3,MAJOR和MINOR分別表示主設備號和次設備號:

為了管理設備,系統為每個設備分配一個編號,一個設備號由主設備號和次設備號組成。主設備號標示某一種類的設備,次設備號用來區分同一類型的設備。linux操作系統中為設備文件編號分配了32位無符號整數,其中前12位是主設備號,后20位為次設備號,所以在向系統申請設備文件時主設備號不好超過4095,次設備號不好超過2^20 -1。

.

下面,我們就可以用mknod命令來申請設備文件了。

mkdir -p /dev/cobing

mknod /dev/cobing/mydev1 c 128 512

 

在/dev目錄下生成console和null這兩個重要設備文件   Linux就這個范兒 P611
cd  /dev
mknod -m 600 /mnt/m13/dev/console  c 5 1
mknod -m 666 /mnt/m13/dev/console  c 1 3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM