衡阳派盒市场营销有限公司

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

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

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

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)解析

Q4MP_gh_c472c21 ? 2018-01-24 08:42 ? 次閱讀

設(shè)備分為三大類:字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備。內(nèi)核針對(duì)每一類設(shè)備都提供了對(duì)應(yīng)驅(qū)動(dòng)模型架構(gòu),包括基本的內(nèi)核設(shè)施和文件系統(tǒng)接口。

字符設(shè)備:在傳送過程中以字符為單位,一個(gè)字Linux中設(shè)備驅(qū)動(dòng)的分類

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

從上圖可以看到Linux系統(tǒng)將各異的設(shè)備分為三大類:字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備。內(nèi)核針對(duì)每一類設(shè)備都提供了對(duì)應(yīng)驅(qū)動(dòng)模型架構(gòu),包括基本的內(nèi)核設(shè)施和文件系統(tǒng)接口。

字符設(shè)備:在傳送過程中以字符為單位,一個(gè)字節(jié)一個(gè)字節(jié)的讀寫,不能隨機(jī)的讀寫數(shù)據(jù),因?yàn)檫@類設(shè)備讀寫速度比較緩慢(因而其內(nèi)核設(shè)施中不提供緩存機(jī)制),常見的字符設(shè)備有鍵盤,鼠標(biāo)已打印機(jī)設(shè)備等。

塊設(shè)備:是指可以從任意位置讀取數(shù)據(jù)的設(shè)備,對(duì)這種設(shè)備讀寫是按塊為單位讀寫的。它使用緩存區(qū)來暫存數(shù)據(jù),等待條件成熟后,會(huì)一并將數(shù)據(jù)寫入到設(shè)備或者從設(shè)備一次性讀出到緩沖區(qū)。比較U盤,磁盤,SD卡等。

網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備不同于字符設(shè)備和塊設(shè)備,它是面向報(bào)文的。同時(shí)在/dev目錄下沒有設(shè)備節(jié)點(diǎn)這樣一說,在應(yīng)用層是用戶是通過API的socket函數(shù)來使用網(wǎng)絡(luò)設(shè)備的。比如網(wǎng)卡等。

設(shè)備號(hào)的構(gòu)成

● 主設(shè)備號(hào)與次設(shè)備號(hào)

關(guān)于設(shè)備號(hào),我們先通過如下的圖來了解一下

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

從上圖可以看出,c代表的是字符設(shè)備,d代碼的是塊設(shè)備。

對(duì)于紅色區(qū)域來說,1是主設(shè)備號(hào),11是次設(shè)備號(hào)。

對(duì)于綠色區(qū)域來說,7是主設(shè)備號(hào),0-7代表是次設(shè)備號(hào)。

主設(shè)備號(hào)用來標(biāo)識(shí)對(duì)于的設(shè)備驅(qū)動(dòng)程序,而次設(shè)備號(hào)則由驅(qū)動(dòng)程序使用,用來標(biāo)識(shí)它所管理的若干同類設(shè)備。

●設(shè)備號(hào)的表示

在linux系統(tǒng)中,設(shè)備號(hào)用dev_t表示。這是個(gè)32位的無符號(hào)整數(shù)。

在內(nèi)核中,dev_t的低20位用來表示次設(shè)備號(hào),高12位用來表示主設(shè)備號(hào)。隨著Linux系統(tǒng)的演變,上述的主次設(shè)備號(hào)的分發(fā)可能在將來會(huì)發(fā)生變化,所以設(shè)備驅(qū)動(dòng)程序開發(fā)者應(yīng)該避免直接使用主次設(shè)備號(hào)所占的位寬來獲得對(duì)于的主設(shè)備號(hào)或次設(shè)備號(hào)。為了保證以后主次設(shè)備號(hào)所占的位數(shù)發(fā)生變化之后,驅(qū)動(dòng)程序依然可以正常工作,內(nèi)核提供了如下了幾個(gè)宏來操作設(shè)備號(hào)。

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

其中MAJOR宏用來從一個(gè)dev_t類型的設(shè)備號(hào)中提取出主設(shè)備號(hào),MINOR宏從來從一個(gè)dev_t類型的設(shè)備號(hào)中提取出此設(shè)備號(hào)。MKDEV則是將主設(shè)備號(hào)ma和次設(shè)備號(hào)mi合成一個(gè)dev_t類型的設(shè)備號(hào)。

假設(shè)在內(nèi)核版本之后對(duì)主次設(shè)備號(hào)所占的位數(shù)發(fā)生了變化,MINORBITS修改為18位,只要驅(qū)動(dòng)是使用MAJOR和MINOR宏來操作設(shè)備號(hào),就不需要修改驅(qū)動(dòng)代碼也可以在新內(nèi)核中使用。

設(shè)備號(hào)的分配

在內(nèi)核源碼中,設(shè)備號(hào)的分配主要有兩個(gè)函數(shù):

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

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

該函數(shù)是用來在知道主設(shè)備號(hào)的前提下使用,第一個(gè)參數(shù)form表示一個(gè)設(shè)備號(hào),第二個(gè)參數(shù)count表示次設(shè)備的個(gè)數(shù),也就是當(dāng)前驅(qū)動(dòng)程序所管理的同類設(shè)備的個(gè)數(shù),第三個(gè)參數(shù)name表示設(shè)備或者驅(qū)動(dòng)的名稱。成功返回0,失敗返回負(fù)數(shù)。

比如內(nèi)核代碼中使用register_chrdev_region申請(qǐng)?jiān)O(shè)備號(hào)示例:

以上代碼申請(qǐng)了主設(shè)備號(hào)為13,總共存在1024個(gè)次設(shè)備,設(shè)備的名字為input。

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

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

該函數(shù)有系統(tǒng)動(dòng)態(tài)的分配設(shè)備號(hào),是在主設(shè)備號(hào)不知情的情況下,讓系統(tǒng)給分配設(shè)備號(hào)。第一個(gè)參數(shù)dev表示是輸出參數(shù),也就是設(shè)備號(hào),第二個(gè)參數(shù)baseminor表示第一個(gè)次設(shè)備號(hào)編號(hào),第三個(gè)參數(shù)count表示次設(shè)備號(hào)的個(gè)數(shù),第四個(gè)參數(shù)name也就是設(shè)備或者驅(qū)動(dòng)的名稱。

內(nèi)核中使用alloc_chrdev_region的示例:

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

上述示例代碼是通過alloc_chrdev_region函數(shù)申請(qǐng)?jiān)O(shè)備號(hào),設(shè)備的個(gè)數(shù)為16個(gè),設(shè)備的名稱為rtc設(shè)備。

設(shè)備號(hào)釋放

在驅(qū)動(dòng)程序不使用的時(shí)候需要釋放設(shè)備號(hào),因?yàn)樵O(shè)備號(hào)也是系統(tǒng)的資源,不用的使用需要及時(shí)釋放資源。已供其他設(shè)備使用。

基于Linux的設(shè)備號(hào)的構(gòu)成、分配、釋放的詳細(xì)

使用該函數(shù)可以使用申請(qǐng)的設(shè)備號(hào),第一個(gè)參數(shù)from表示要釋放的設(shè)備號(hào),第二個(gè)參數(shù)count表示要釋放的個(gè)數(shù)。

內(nèi)核使用unregister_chrdev_region的示例:

從上面代碼可知,如果調(diào)用unregister_chrdev_region就會(huì)從系統(tǒng)中釋放主設(shè)備號(hào)13的設(shè)備。

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

    關(guān)注

    3

    文章

    1382

    瀏覽量

    40430
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210408
  • 網(wǎng)絡(luò)設(shè)備

    關(guān)注

    0

    文章

    318

    瀏覽量

    29767

原文標(biāo)題:Linux字符設(shè)備學(xué)習(xí)之設(shè)備號(hào)的構(gòu)成、分配、釋放

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于Linux內(nèi)存管理的詳細(xì)介紹

    Linux內(nèi)存管理是指對(duì)系統(tǒng)內(nèi)存的分配釋放、映射、管理、交換、壓縮等一系列操作的管理。在Linux中,內(nèi)存被劃分為多個(gè)區(qū)域,每個(gè)區(qū)域有不同的作用,包括內(nèi)核空間、用戶空間、緩存、交換分
    發(fā)表于 03-06 09:28 ?1091次閱讀

    如何在Ubuntu Linux釋放/boot分區(qū)中的空間

    在Ubuntu Linux上,/boot分區(qū)是用于存儲(chǔ)啟動(dòng)相關(guān)的文件的。隨著時(shí)間的推移,這個(gè)分區(qū)可能會(huì)變滿,導(dǎo)致系統(tǒng)無法安裝新的內(nèi)核和更新。本文將介紹如何釋放/boot分區(qū)中的空間,并提供詳細(xì)的步驟。
    的頭像 發(fā)表于 11-28 10:04 ?955次閱讀

    linux的內(nèi)存釋放操作

    Linux系統(tǒng)下,我們一般不需要去釋放內(nèi)存,因?yàn)橄到y(tǒng)已經(jīng)將內(nèi)存管理的很好。但是凡事也有例外,有的時(shí)候內(nèi)存會(huì)被緩存占用掉,導(dǎo)致系統(tǒng)使用SWAP空間影響性能,此時(shí)就需要執(zhí)行釋放內(nèi)存(清理緩存)的操作
    發(fā)表于 07-26 07:05

    Linux內(nèi)存系統(tǒng): Linux 內(nèi)存分配算法

    ,便于內(nèi)存管理,防止內(nèi)存泄露· 缺點(diǎn):大量的內(nèi)存碎片會(huì)使系統(tǒng)緩慢,內(nèi)存使用率低,浪費(fèi)大2) 如何避免內(nèi)存碎片· 少用動(dòng)態(tài)內(nèi)存分配的函數(shù)(盡量使用棧空間)· 分配內(nèi)存和釋放的內(nèi)存盡量在同一個(gè)函數(shù)中
    發(fā)表于 08-24 07:44

    Linux操作系統(tǒng)具體構(gòu)成

    Linux操作系統(tǒng)為程序運(yùn)行產(chǎn)生的進(jìn)程分配4G的虛擬空間。這4G有1G時(shí)內(nèi)核空間不能使用,其余3G是我們可以使用的空間,其具體構(gòu)成如下:??臻g保存函數(shù)內(nèi)部的局部變量和函數(shù)的形參,由操作系統(tǒng)
    發(fā)表于 12-17 08:21

    LINUX內(nèi)核中的內(nèi)存是如何進(jìn)行分配

    1、devm_kzalloc & devm_kfree函數(shù)devm_kzalloc和kzalloc一樣都是內(nèi)核內(nèi)存分配函數(shù),但是devm_kzalloc是跟設(shè)備(裝置)有關(guān)的,當(dāng)設(shè)備
    發(fā)表于 11-04 14:46

    Linux MTD下獲取Nand flash 各個(gè)參數(shù)的過程的詳細(xì)解析

    Linux MTD下獲取Nand flash 各個(gè)參數(shù)的過程的詳細(xì)解析
    發(fā)表于 10-30 08:38 ?7次下載
    <b class='flag-5'>Linux</b> MTD下獲取Nand flash 各個(gè)參數(shù)的過程的<b class='flag-5'>詳細(xì)</b><b class='flag-5'>解析</b>

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

    靜態(tài)分配設(shè)備號(hào),就是驅(qū)動(dòng)程序開發(fā)者,靜態(tài)地指定一個(gè)設(shè)備號(hào)。對(duì)于一部分常用的設(shè)備,內(nèi)核開發(fā)者已經(jīng)為
    的頭像 發(fā)表于 05-23 17:18 ?6695次閱讀
    嵌入式<b class='flag-5'>Linux</b>主<b class='flag-5'>設(shè)備</b><b class='flag-5'>號(hào)</b>和次<b class='flag-5'>設(shè)備</b><b class='flag-5'>號(hào)</b>的獲取

    Linux DMA Engine框架的介紹

    此會(huì)話描述如何從設(shè)備驅(qū)動(dòng)程序在Linux中使用DMA。 這包括內(nèi)存分配,緩存控制和DMA設(shè)備控制。 詳細(xì)介紹了
    的頭像 發(fā)表于 11-23 06:29 ?6368次閱讀

    學(xué)會(huì)linux驅(qū)動(dòng)程序的步驟

    linux內(nèi)核使用驅(qū)動(dòng)時(shí)候,需要先初始化,包括建立設(shè)備文件,分配內(nèi)存地址空間等,退出的時(shí)候要釋放資源,刪除設(shè)備文件,
    發(fā)表于 04-26 16:19 ?1215次閱讀

    Linux DMA內(nèi)置設(shè)備驅(qū)動(dòng)程序的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux DMA內(nèi)置設(shè)備驅(qū)動(dòng)程序的詳細(xì)資料說明主要內(nèi)容包括; 1.議程,2.內(nèi)存分配,3.內(nèi)核配置,4.緩存控
    發(fā)表于 04-12 08:00 ?1次下載
    <b class='flag-5'>Linux</b> DMA內(nèi)置<b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)程序的<b class='flag-5'>詳細(xì)</b>資料說明

    Linux內(nèi)核之塊分配

    為了解決小塊內(nèi)存的分配問題,Linux 內(nèi)核提供了塊分配器,最早實(shí)現(xiàn)的塊分配器是SLAB 分配器。
    的頭像 發(fā)表于 07-27 09:35 ?1719次閱讀

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

    Linux字符設(shè)備驅(qū)動(dòng)開發(fā)模板中介紹了舊版本的驅(qū)動(dòng)開發(fā)模板,其需要手動(dòng)分配設(shè)備號(hào)后,再進(jìn)行注冊(cè),驅(qū)動(dòng)加載成功后還需要手動(dòng)創(chuàng)建
    的頭像 發(fā)表于 04-14 12:02 ?908次閱讀
    <b class='flag-5'>Linux</b>新字符<b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)開發(fā)方式

    虹科干貨 |?多設(shè)備協(xié)同無憂:Linux環(huán)境下PCAN固定設(shè)備ID/通道分配指南

    插入順序的影響。繼往期文章介紹了Windows環(huán)境下的實(shí)現(xiàn)方法后,本文將詳細(xì)介紹如何在Linux環(huán)境中CharDev和NetDev兩種模式下,通過PCAN實(shí)現(xiàn)設(shè)備ID和通道的固定分配,
    的頭像 發(fā)表于 06-11 15:03 ?525次閱讀
    虹科干貨 |?多<b class='flag-5'>設(shè)備</b>協(xié)同無憂:<b class='flag-5'>Linux</b>環(huán)境下PCAN固定<b class='flag-5'>設(shè)備</b>ID/通道<b class='flag-5'>分配</b>指南

    Linux內(nèi)核中的頁面分配機(jī)制

    Linux內(nèi)核中是如何分配出頁面的,如果我們站在CPU的角度去看這個(gè)問題,CPU能分配出來的頁面是以物理頁面為單位的。也就是我們計(jì)算機(jī)中常講的分頁機(jī)制。本文就看下Linux內(nèi)核是如何管
    的頭像 發(fā)表于 08-07 15:51 ?352次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核中的頁面<b class='flag-5'>分配</b>機(jī)制
    凤凰百家乐官网的玩法技巧和规则 | 百家乐官网双面数字筹码| 尊龙百家乐赌场娱乐网规则| 大发真钱娱乐城| 温州市百家乐ktv招聘| 百家乐官网注册优惠平台| 富田太阳城二期| 百家乐官网代理合作| 百家乐官网稳赚打法| 澳门百家乐博| 百家乐官网出千桌| 蓝山县| 澳门百家乐娱乐城送体验金| 88娱乐城官网| 百家乐规律打法| 网络百家乐官网电脑| 视频百家乐| 百家乐事一箩筐的微博| 玩百家乐官网的好处| 游戏厅百家乐官网技巧| 水果机规律| 百家乐注册赠金| 广州百家乐官网娱乐场| bet365网址器| 百家乐真人博彩的玩法技巧和规则| 足球百家乐官网投注| 最新六合彩开奖结果| 总统百家乐官网的玩法技巧和规则 | 大发888娱乐场开户| 百家乐免佣台| 银河百家乐官网的玩法技巧和规则 | 风水24山子怎么读| 北京太阳城三期| 百家乐洗码| 邯郸百家乐官网园怎么样| 博讯网| 大发888有手机版本吗| 百家乐投注心得和技巧| gt百家乐官网平台| 皇朝娱乐城| 大发888老虎机平台|