導航:首頁 > 器材知識 > linux主設備號作用是什麼

linux主設備號作用是什麼

發布時間:2022-05-11 03:15:46

❶ linux 怎麼通過usb通信

USB驅動程序基礎 在動手寫USB驅動程序這前,讓我們先看看寫的USB驅動程序在內核中的結構,如下圖: USB驅動程序存在於不同的內核子系統和USB硬體控制器之間,USB核心為USB驅動程序提供了一個用於訪問和控制USB硬體的介面,而不必考慮系統當前存在的各種不同類型的USB硬體控制器。USB是一個非常復雜的設備,linux內核為我們提供了一個稱為USB的核心的子系統來處理大部分的復雜性,USB設備包括配置(configuration)、介面(interface)和端點(endpoint),USB設備綁定到介面上,而不是整個USB設備。如下圖所示: USB通信最基本的形式是通過端點(USB端點分中斷、批量、等時、控制四種,每種用途不同),USB端點只能往一個方向傳送數據,從主機到設備或者從設備到主機,端點可以看作是單向的管道(pipe)。所以我們可以這樣認為:設備通常具有一個或者更多的配置,配置經常具有一個或者更多的介面,介面通常具有一個或者更多的設置,介面沒有或具有一個以上的端點。驅動程序把驅動程序對象注冊到USB子系統中,稍後再使用製造商和設備標識來判斷是否已經安裝了硬體。USB核心使用一個列表(是一個包含製造商ID和設備號ID的一個結構體)來判斷對於一個設備該使用哪一個驅動程序,熱插撥腳本使用它來確定當一個特定的設備插入到系統時該自動裝載哪一個驅動程序。 上面我們簡要說明了驅動程序的基本理論,在寫一個設備驅動程序之前,我們還要了解以下兩個概念:模塊和設備文件。 模塊:是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。Linux下對於一個硬體的驅動,可以有兩種方式:直接載入到內核代碼中,啟動內核時就會驅動此硬體設備。另一種就是以模塊方式,編譯生成一個.ko文件(在2.4以下內核中是用.o作模塊文件,我們以2.6的內核為准,以下同)。當應用程序需要時再載入到內核空間運行。所以我們所說的一個硬體的驅動程序,通常指的就是一個驅動模塊。 設備文件:對於一個設備,它可以在/dev下面存在一個對應的邏輯設備節點,這個節點以文件的形式存在,但它不是普通意義上的文件,它是設備文件,更確切的說,它是設備節點。這個節點是通過mknod命令建立的,其中指定了主設備號和次設備號。主設備號表明了某一類設備,一般對應著確定的驅動程序;次設備號一般是區分不同屬性,例如不同的使用方法,不同的位置,不同的操作。這個設備號是從/proc/devices文件中獲得的,所以一般是先有驅動程序在內核中,才有設備節點在目錄中。這個設備號(特指主設備號)的主要作用,就是聲明設備所使用的驅動程序。驅動程序和設備號是一一對應的,當你打開一個設備文件時,操作系統就已經知道這個設備所對應的驅動程序。對於一個硬體,Linux是這樣來進行驅動的:首先,我們必須提供一個.ko的驅動模塊文件。我們要使用這個驅動程序,首先要載入它,我們可以用insmod xxx.ko,這樣驅動就會根據自己的類型(字元設備類型或塊設備類型,例如滑鼠就是字元設備而硬碟就是塊設備)向系統注冊,注冊成功系統會反饋一個主設備號,這個主設備號就是系統對它的唯一標識。驅動就是根據此主設備號來創建一個一般放置在/dev目錄下的設備文件。在我們要訪問此硬體時,就可以對設備文件通過open、read、write、close等命令進行。而驅動就會接收到相應的read、write操作而根據自己的模塊中的相應函數進行操作了。 USB驅動程序實踐 了解了上述理論後,我們就可以動手寫驅動程序,如果你基本功好,而且寫過linux下的硬體驅動,USB的硬體驅動和pci_driver很類似,那麼寫USB的驅動就比較簡單了,如果你只是大體了解了linux的硬體驅動,那也不要緊,因為在linux的內核源碼中有一個框架程序可以拿來借用一下,這個框架程序在/usr/src/~(你的內核版本,以下同)/drivers/usb下,文件名為usb-skeleton.c。寫一個USB的驅動程序最基本的要做四件事:驅動程序要支持的設備、注冊USB驅動程序、探測和斷開、提交和控制urb(USB請求塊)(當然也可以不用urb來傳輸數據,下文我們會說到)。 驅動程序支持的設備:有一個結構體struct usb_device_id,這個結構體提供了一列不同類型的該驅動程序支持的USB設備,對於一個只控制一個特定的USB設備的驅動程序來說,struct usb_device_id表被定義為: /* 驅動程序支持的設備列表 */ static struct usb_device_id skel_table [] = { { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) }, { } /* 終止入口 */ }; MODULE_DEVICE_TABLE (usb, skel_table); 對於PC驅動程序,MODULE_DEVICE_TABLE是必需的,而且usb必需為該宏的第一個值,而USB_SKEL_VENDOR_ID和USB_SKEL_PRODUCT_ID就是這個特殊設備的製造商和產品的ID了,我們在程序中把定義的值改為我們這款USB的,如: /* 定義製造商和產品的ID號 */ #define USB_SKEL_VENDOR_ID 0x1234 #define USB_SKEL_PRODUCT_ID 0x2345 這兩個值可以通過命令lsusb,當然你得先把USB設備先插到主機上了。或者查看廠商的USB設備的手冊也能得到,在我機器上運行lsusb是這樣的結果: Bus 004 Device 001: ID 0000:0000 Bus 003 Device 002: ID 1234:2345 Abc Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 得到這兩個值後把它定義到程序里就可以了。 注冊USB驅動程序:所有的USB驅動程序都必須創建的結構體是struct usb_driver。這個結構體必須由USB驅動程序來填寫,包括許多回調函數和變數,它們向USB核心代碼描述USB驅動程序。創建一個有效的struct usb_driver結構體,只須要初始化五個欄位就可以了,在框架程序中是這樣的: static struct usb_driver skel_driver = { .owner = THIS_MODULE, .name = "skeleton", .probe = skel_probe, .disconnect = skel_disconnect, .id_table = skel_table, };

❷ linux設備驅動為什麼有主設備號與次設備號

是什麼設備?是一類吧(如tty設備),一個驅動對應多個主設備號不同的設備,open時需要根據主設備號確定是哪一個。

❸ Linux的設備和設備號是指什麼

Linux中I/O設備分為兩類:字元設備和塊設備。兩種設備本身沒有嚴格限制,但是,基於不同的功能進行了分類。 (1)字元設備:提供連續的數據流,應用程序可以順序讀取,通常不支持隨機存取。相反,此類設備支持按位元組/字元來讀寫數據。舉例來說,鍵盤、串口、數據機都是典型的字元設備。 (2)塊設備:應用程序可以隨機訪問設備數據,程序可自行確定讀取數據的位置。硬碟、軟盤、CD-ROM驅動器和快閃記憶體都是典型的塊設備,應用程序可以定址磁碟上的任何位置,並由此讀取數據。此外,數據的讀寫只能以塊(通常是512B)的倍數進行。與字元設備不同,塊設備並不支持基於字元的定址。 總結一下,這兩種類型的設備的根本區別在於它們是否可以被隨機訪問。字元設備只能順序讀取,塊設備可以隨機讀取。

❹ Linux中如何通過設備號找到設備

一個字元設備或者塊設備都有一個主設備號和次設備號。主設備號和次設備號統稱為設備號。主設備號用來表示一個特定的驅動程序。次設備號用來表示使用該驅動程序的各設備。

查看主設備號:

# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
6 lp
7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
216 rfcomm
249 blkwatch_272
250 hidraw
251 usbmon
252 bsg
253 pcmcia
254 rtc

Block devices:
1 ramdisk
2 fd
259 blkext
7 loop
8 sd
9 md
11 sr
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp

如上所示,該命令會顯示字元設備和塊設備的主設備號。如果你想查看某個主設備號,那麼可以

[root@mylnx01 ~]# cat /proc/devices | grep 253
253 pcmcia
253 device-mapper

其中Device Mapper,Device Mapper 是 Linux 2.6 內核中提供的一種從邏輯設備到物理設備的映射框架機制,在該機制下,用戶可以很方便的根據自己的需要制定實現存儲資源的管理策略,當前比較流行的 Linux 下的邏輯卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基於該機制實現的。

次設備號查看

[root@mylnx01 ~]# ls -l /dev 或 ll /dev[root@mylnx01 ~]# ll /dev | grep 253 | grep -v grep
brw-rw---- 1 root root 253, 0 Jul 17 23:08 dm-0
brw-rw---- 1 root root 253, 1 Jul 17 23:08 dm-1
brw-rw---- 1 root root 253, 2 Jul 17 23:08 dm-2
brw-rw---- 1 root root 253, 3 Jul 17 23:08 dm-3
brw-rw---- 1 root root 253, 4 Jul 17 23:09 dm-4
brw------- 1 root root 253, 1 Jul 17 23:09 root

但是在一台伺服器的日誌信息遇到下面錯誤信息,通過/dev 沒有找到次設備號為253:14的塊設備。 如下所示

Jul 19 05:02:01 mylnx01 kernel: BLKWATCH ERR: Attempt to get a sector index out of the bitmap bounds.

Jul 19 05:02:01 mylnx01 kernel: BLKWATCH ERR: Critical error 1 happened for device 253:14. Additional info: Failed to mark block as dirty.

[root@getlnx01 ~]# ll /dev | grep 253 | grep -v grep

關於次設備號的主要用途,這篇博客主設備號和次設備號介紹了部分內容。

1、區分設備驅動程序控制的實際設備;

2、區分不同用途的設備 (misc 系列設備)

3、區分塊設備的分區 (partition)

通常,為了使應用程序區分所控制設備的類型,內核使用主設備號。而存在多台同類設備時,為了選擇其中的一種,設備驅動程序就使用次設備號。

# ll /dev/ | grep sd #或者命令 ll /dev/ | grep disk
brw-r----- 1 root disk 8, 0 Jul 17 23:08 sda
brw-r----- 1 root disk 8, 1 Jul 17 23:10 sda1
brw-r----- 1 root disk 8, 2 Jul 17 23:08 sda2
brw-r----- 1 root disk 8, 3 Jul 17 23:08 sda3
brw-r----- 1 root disk 8, 16 Jul 17 23:08 sdb
brw-r----- 1 root disk 8, 17 Jul 17 23:08 sdb1
brw-r----- 1 root disk 8, 18 Jul 17 23:08 sdb2
brw-r----- 1 root disk 8, 21 Jul 17 23:08 sdb5
brw-r----- 1 root disk 8, 32 Jul 17 23:08 sdc
brw-r----- 1 root disk 8, 33 Jul 17 23:08 sdc1
brw-r----- 1 root disk 8, 34 Jul 17 23:08 sdc2
brw-r----- 1 root disk 8, 37 Jul 17 23:08 sdc5
brw-r----- 1 root disk 8, 48 Jul 17 23:08 sdd
brw-r----- 1 root disk 8, 49 Jul 17 23:08 sdd1
brw-r----- 1 root disk 8, 50 Jul 17 23:08 sdd2
brw-r----- 1 root disk 8, 51 Jul 17 23:08 sdd3
brw-r----- 1 root disk 8, 53 Jul 17 23:08 sdd5
brw-r----- 1 root disk 8, 64 Jul 17 23:08 sde
brw-r----- 1 root disk 8, 65 Jul 17 23:08 sde1
brw-r----- 1 root disk 8, 66 Jul 17 23:08 sde2
brw-r----- 1 root disk 8, 67 Jul 17 23:08 sde3
brw-r----- 1 root disk 8, 69 Jul 17 23:08 sde5
brw-r----- 1 root disk 8, 80 Jul 17 23:08 sdf
brw-r----- 1 root disk 8, 81 Jul 17 23:08 sdf1
brw-r----- 1 root disk 8, 85 Jul 17 23:08 sdf5
brw-r----- 1 root disk 8, 96 Jul 17 23:08 sdg
brw-r----- 1 root disk 8, 97 Jul 17 23:08 sdg1
brw-r----- 1 root disk 8, 98 Jul 17 23:08 sdg2
brw-r----- 1 root disk 8, 101 Jul 17 23:08 sdg5
brw-r----- 1 root disk 8, 112 Jul 17 23:08 sdh
brw-r----- 1 root disk 8, 113 Jul 17 23:08 sdh1
brw-r----- 1 root disk 8, 117 Jul 17 23:08 sdh5

❺ Linux的設備和設備號是指什麼可否簡單的解釋一下

Linux中I/O設備分為兩類:字元設備和塊設備。兩種設備本身沒有嚴格限制,但是,基於不同的版功能進行了權分類。
(1)字元設備:提供連續的數據流,應用程序可以順序讀取,通常不支持隨機存取。相反,此類設備支持按位元組/字元來讀寫數據。舉例來說,鍵盤、串口、數據機都是典型的字元設備。
(2)塊設備:應用程序可以隨機訪問設備數據,程序可自行確定讀取數據的位置。硬碟、軟盤、CD-ROM驅動器和快閃記憶體都是典型的塊設備,應用程序可以定址磁碟上的任何位置,並由此讀取數據。此外,數據的讀寫只能以塊(通常是512B)的倍數進行。與字元設備不同,塊設備並不支持基於字元的定址。
總結一下,這兩種類型的設備的根本區別在於它們是否可以被隨機訪問。字元設備只能順序讀取,塊設備可以隨機讀取。

❻ 什麼是linux他的作用又是什麼

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。

嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU 工程各種工具和資料庫的操作系統。

作用:

1、它能運行主要的UNIX工具軟體、應用程序和網路協議。

2、它支持32位和64位硬體。

3、Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。


(6)linux主設備號作用是什麼擴展閱讀:

linux特性:

1、完全免費

Linux是一款免費的操作系統,用戶可以通過網路或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。

2、完全兼容POSIX1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

3、多用戶、多任務

Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。

4、良好的界面

Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。

5、支持多種平台

Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位晶元架構。

❼ 簡述linux內核如何給設備分配主設備號

標準的設備類型都有固定的主設備號,這個可以查詢到。
如果是自定義的設備,可以讓內核自動分配一個空閑的主設備號。

❽ LINUX驅動設備號有什麼用

你得讓CPU找到你啊,CPU怎麼找你呢,你得告訴他你的設備號,他才懶得記設備的名字,一是麻煩二是容易亂

❾ unix/linux系統中主次設備號各表示什麼含義

定義:mknod - make block or character special files
語法:mknod /dev/ttyUSBn c Major Minor
1,n要等於次設備號Minor,且要小於主設備號Major.
2, c:面向字元設備(b:面向塊設備,如:磁碟、軟盤、磁帶;其他設備基本都為字元設備).
實例:
ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0
mknod /dev/ttyUSB32 c 188 32

❿ 什麼是主設備號和次設備號

在Linux內核看來,主設備號標識設備對應的驅動程序,告訴Linux內核使用哪一個驅動程序為該設備(也就是/dev下的設備文件)服務;而次設備號則用來標識具體且唯一的某個設備。

閱讀全文

與linux主設備號作用是什麼相關的資料

熱點內容
steam令牌換設備了怎麼辦 瀏覽:246
新生測聽力儀器怎麼看結果 瀏覽:224
化學試驗排水集氣法的實驗裝置 瀏覽:156
家用水泵軸承位置漏水怎麼回事 瀏覽:131
羊水鏡設備多少錢一台 瀏覽:125
機械制圖里型鋼如何表示 瀏覽:19
測定空氣中氧氣含量實驗裝置如圖所示 瀏覽:718
超聲波換能器等級怎麼分 瀏覽:800
3萬軸承是什麼意思 瀏覽:110
鑫旺五金製品廠 瀏覽:861
蘇州四通閥製冷配件一般加多少 瀏覽:153
江北全套健身器材哪裡有 瀏覽:106
水表閥門不開怎麼辦 瀏覽:109
花冠儀表盤怎麼顯示時速 瀏覽:106
洗砂機多少錢一台18沃力機械 瀏覽:489
超聲波碎石用什麼材料 瀏覽:607
組裝實驗室製取二氧化碳的簡易裝置的方法 瀏覽:165
怎麼知道天然氣充不了閥門關閉 瀏覽:902
公司賣舊設備掛什麼科目 瀏覽:544
尚葉五金機電 瀏覽:59