一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Linux主設(shè)備號和次設(shè)備號的獲取

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-05-23 17:18 ? 次閱讀

Linux的設(shè)備管理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,稱為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉和讀寫這些設(shè)備文件,完成對設(shè)備的操作,就像操作普通的數(shù)據(jù)文件一樣。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號,每個(gè)設(shè)備號又分為主設(shè)備號和次設(shè)備號。主設(shè)備號用來區(qū)分不同種類的設(shè)備,而次設(shè)備號用來區(qū)分同一類型的多個(gè)設(shè)備。對于常用設(shè)備,Linux有約定俗成的編號,如硬盤的主設(shè)備號是3。

一個(gè)字符設(shè)備或者塊設(shè)備都有一個(gè)主設(shè)備號和次設(shè)備號。主設(shè)備號和次設(shè)備號統(tǒng)稱為設(shè)備號。主設(shè)備號用來表示一個(gè)特定的驅(qū)動(dòng)程序。次設(shè)備號用來表示使用該驅(qū)動(dòng)程序的各設(shè)備。例如一個(gè)嵌入式系統(tǒng),有兩個(gè)LED指示燈LED燈需要獨(dú)立的打開或者關(guān)閉。那么,可以寫一個(gè)LED燈的字符設(shè)備驅(qū)動(dòng)程序,可以將其主設(shè)備號注冊成5號設(shè)備,次設(shè)備號分別為1和2。這里,次設(shè)備號就分別表示兩個(gè)LED燈。

設(shè)備文件通常都在 /dev 目錄下。如:

如上,前面第一個(gè)字符為c 的表示字符設(shè)備。在字符設(shè)備里,有主設(shè)備號和次設(shè)備號。如上1,4,7 分別是主設(shè)備號,0,1,3,7,70,71都是次設(shè)備號。一般的,主設(shè)備號標(biāo)識出與設(shè)備關(guān)聯(lián)的設(shè)備驅(qū)動(dòng)。如 /dev/null 和 /dev/full 由 1 號驅(qū)動(dòng)來管理,/dev/vcs 和/dev/vcs1由 7 號驅(qū)動(dòng)來管理,/dev/ttyS6 由 4 號驅(qū)動(dòng)來管理。

現(xiàn)在的 Linux 內(nèi)核允許多個(gè)驅(qū)動(dòng)共享一個(gè)主設(shè)備號,但更多的設(shè)備都遵循一個(gè)驅(qū)動(dòng)對一個(gè)主設(shè)備號的原則。

內(nèi)核由次設(shè)備號確定當(dāng)前所指向的是哪個(gè)設(shè)備。根據(jù)所編寫的驅(qū)動(dòng)程序,可以從內(nèi)核那里得到一個(gè)直接指向設(shè)備的指針,或者使用次設(shè)備號作為一個(gè)設(shè)備本地?cái)?shù)組的索引。但不論如何,內(nèi)核自身幾乎不知道次設(shè)備號的什么事情。

設(shè)備號的內(nèi)部表示在內(nèi)核中,dev_t 類型( 在 linux/types.h 頭文件有定義 ) 用來表示設(shè)備號,包括主設(shè)備號和次設(shè)備號兩部分。對于 2.6.x 內(nèi)核,dev_t 是個(gè) 32 位量,其中 12 位用來表示主設(shè)備號,20 位用來表示次設(shè)備號。

在 linux/types.h 頭文件里定義有

主設(shè)備號和次設(shè)備號的獲取

為了寫出可移植的驅(qū)動(dòng)程序,不能假定主設(shè)備號和次設(shè)備號的位數(shù)。不同的機(jī)型中,主設(shè)備號和次設(shè)備號的位數(shù)可能是不同的。應(yīng)該使用MAJOR宏得到主設(shè)備號,使用MINOR宏來得到次設(shè)備號。下面是兩個(gè)宏的定義:(linux/kdev_t.h)

#define MINORBITS 20 /*次設(shè)備號*/

#define MINORMASK ((1U << MINORBITS) - 1) ????????????/*次設(shè)備號掩碼*/ ?

#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) /*dev右移20位得到主設(shè)備號*/

#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) /*與次設(shè)備掩碼與,得到次設(shè)備號*/

MAJOR宏將dev_t向右移動(dòng)20位,得到主設(shè)備號;MINOR宏將dev_t的高12位清零,得到次設(shè)備號。相反,可以將主設(shè)備號和次設(shè)備號轉(zhuǎn)換為設(shè)備號類型(dev_t),使用宏MKDEV可以完成這個(gè)功能。

#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))

MKDEV宏將主設(shè)備號(ma)左移20位,然后與次設(shè)備號(mi)相與,得到設(shè)備號

靜態(tài)分配設(shè)備號

靜態(tài)分配設(shè)備號,就是驅(qū)動(dòng)程序開發(fā)者,靜態(tài)地指定一個(gè)設(shè)備號。對于一部分常用的設(shè)備,內(nèi)核開發(fā)者已經(jīng)為其分配了設(shè)備號。這些設(shè)備號可以在內(nèi)核源碼documentation/ devices.txt文件中找到。如果只有開發(fā)者自己使用這些設(shè)備驅(qū)動(dòng)程序,那么其可以選擇一個(gè)尚未使用的設(shè)備號。在不添加新硬件的時(shí)候,這種方式不會產(chǎn)生設(shè)備號沖突。但是當(dāng)添加新硬件時(shí),則很可能造成設(shè)備號沖突,影響設(shè)備的使用。

動(dòng)態(tài)分配設(shè)備號

由于靜態(tài)分配設(shè)備號存在沖突的問題,所以內(nèi)核社區(qū)建議開發(fā)者使用動(dòng)態(tài)分配設(shè)備號的方法。動(dòng)態(tài)分配設(shè)備號的函數(shù)是alloc_chrdev_region()。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11420

    瀏覽量

    212361
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4616

    瀏覽量

    71348

原文標(biāo)題:嵌入式Linux主設(shè)備號和次設(shè)備號詳解

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式Linux下PCI設(shè)備驅(qū)動(dòng)的設(shè)計(jì)

    ]。Linux因其開放源代碼以及穩(wěn)定的性能,越來越受到廣大用戶青睞。同時(shí),基于Linux內(nèi)核的嵌入式操作系統(tǒng)應(yīng)用勢頭強(qiáng)勁,開發(fā)基于Linux設(shè)備
    發(fā)表于 10-08 09:44

    嵌入式驅(qū)動(dòng)開發(fā) Linux字符設(shè)備驅(qū)動(dòng)

    1.嵌入式設(shè)備驅(qū)動(dòng)概述2.字符設(shè)備驅(qū)動(dòng)框架3.GPIO驅(qū)動(dòng)程序設(shè)計(jì)實(shí)例4.中斷處理和同步機(jī)制1.1驅(qū)動(dòng)程序設(shè)計(jì)是嵌入式Linux開發(fā)中重要的
    發(fā)表于 10-09 17:21

    嵌入式設(shè)備如何獲取公網(wǎng)IP?

    設(shè)備又沒有該程序;方法設(shè)備采用的是嵌入式linux,其中的工具箱busybox中有輕量級的wget應(yīng)用,因此可以用改應(yīng)用獲取
    發(fā)表于 10-27 08:09

    為什么要配置Linux系統(tǒng)嵌入式設(shè)備的串口通信?

    我們查看這些數(shù)據(jù),那么問題來了,當(dāng)我們可以讓一個(gè)設(shè)備從串口使用UART的方式輸出數(shù)據(jù),這個(gè)設(shè)備和一個(gè)搭載Linux系統(tǒng)的嵌入式設(shè)備通信的時(shí)候
    發(fā)表于 12-16 07:24

    如何查看注冊的主設(shè)備

    嵌入式LINUX驅(qū)動(dòng)學(xué)習(xí)之4.字符設(shè)備驅(qū)動(dòng)編程(三)用戶空間實(shí)現(xiàn)代碼之驅(qū)動(dòng)注冊和卸載一、注冊驅(qū)動(dòng) 模塊:二、查看注冊的主設(shè)備三、根據(jù)
    發(fā)表于 12-24 07:03

    嵌入式Linux設(shè)備驅(qū)動(dòng)開發(fā)

    嵌入式Linux設(shè)備驅(qū)動(dòng)開發(fā) Linux 設(shè)備驅(qū)動(dòng)的基本概念Linux
    發(fā)表于 09-10 13:10 ?82次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)開發(fā)

    嵌入式Linux字符設(shè)備驅(qū)動(dòng)的設(shè)計(jì)與應(yīng)用

    描述了基于嵌入式Linux的字符設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)方法和實(shí)現(xiàn)過程。以電機(jī)、數(shù)碼管、串口和mini鍵盤的驅(qū)動(dòng)設(shè)計(jì)為例,詳細(xì)闡述了嵌入式linux
    發(fā)表于 02-23 15:45 ?24次下載

    嵌入式Linux字符設(shè)備驅(qū)動(dòng)的設(shè)計(jì)與應(yīng)用

    描述了基于嵌入式Linux的字符設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)方法和實(shí)現(xiàn)過程。以電機(jī)、數(shù)碼管、串口和mini鍵盤的驅(qū)動(dòng)設(shè)計(jì)為例,詳細(xì)闡述了嵌入式linux
    發(fā)表于 07-14 17:31 ?31次下載

    嵌入式應(yīng)用中的USB主設(shè)備功能

    嵌入式應(yīng)用中的USB主設(shè)備功能 USB已經(jīng)成為設(shè)備和PC之間通信的標(biāo)準(zhǔn)方式,從通用設(shè)備(如閃存設(shè)備和鼠標(biāo))到專用
    發(fā)表于 06-02 07:49 ?712次閱讀

    嵌入式應(yīng)用中的USB主設(shè)備功能

    嵌入式應(yīng)用中的USB主設(shè)備功能 USB已經(jīng)成為設(shè)備和PC之間通信的標(biāo)準(zhǔn)方式,從通用設(shè)備(如閃存設(shè)備和鼠標(biāo))到專用
    發(fā)表于 08-27 10:32 ?506次閱讀

    基于嵌入式Linux LCD設(shè)備驅(qū)動(dòng)分析

    基于嵌入式Linux LCD設(shè)備驅(qū)動(dòng)分析
    發(fā)表于 10-30 16:20 ?14次下載
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> LCD<b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)分析

    嵌入式Linux驅(qū)動(dòng)開發(fā)基礎(chǔ)總結(jié)(下篇)

    14, 字符設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)基礎(chǔ)主設(shè)備設(shè)備(二者一起為
    的頭像 發(fā)表于 03-15 09:17 ?6348次閱讀

    想要駕馭Linux驅(qū)動(dòng)開發(fā),必須深刻理解Linux總線設(shè)備驅(qū)動(dòng)框架

    想要駕馭Linux驅(qū)動(dòng)開發(fā),必須深刻理解Linux總線設(shè)備驅(qū)動(dòng)框架。之所以會形成這樣的框架,主要是為了代碼的可重用性,因?yàn)轵?qū)動(dòng)和設(shè)備的關(guān)系是一對多的。正如
    的頭像 發(fā)表于 03-22 11:08 ?1.1w次閱讀
    想要駕馭<b class='flag-5'>Linux</b>驅(qū)動(dòng)開發(fā),必須深刻理解<b class='flag-5'>Linux</b>總線<b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)框架

    嵌入式Linux UART

    文章目錄前言串口連接串口測試C代碼微信公眾前言這是前篇:嵌入式Linux i.MX開發(fā)板嵌入式Linux NFS
    發(fā)表于 11-01 16:26 ?8次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> UART

    推薦 | 幾個(gè)我星標(biāo)的嵌入式公眾

    小麥大叔 推薦一位我的好朋友的公眾:小麥大叔,主麥?zhǔn)?,萬粉主。CSDN知名博客專家,萬粉博主。麥?zhǔn)骞?b class='flag-5'>號和博客的內(nèi)容博大精深,包括但不限于嵌入
    發(fā)表于 12-01 20:06 ?7次下載
    推薦 | 幾個(gè)我星標(biāo)的<b class='flag-5'>嵌入式</b>公眾<b class='flag-5'>號</b>