99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Linux的設備號的構成、分配、釋放的詳細解析

Q4MP_gh_c472c21 ? 2018-01-24 08:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

設備分為三大類:字符設備,塊設備和網(wǎng)絡設備。內核針對每一類設備都提供了對應驅動模型架構,包括基本的內核設施和文件系統(tǒng)接口。

字符設備:在傳送過程中以字符為單位,一個字Linux中設備驅動的分類

基于Linux的設備號的構成、分配、釋放的詳細

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

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

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

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

設備號的構成

● 主設備號與次設備號

關于設備號,我們先通過如下的圖來了解一下

基于Linux的設備號的構成、分配、釋放的詳細

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

對于紅色區(qū)域來說,1是主設備號,11是次設備號。

對于綠色區(qū)域來說,7是主設備號,0-7代表是次設備號。

主設備號用來標識對于的設備驅動程序,而次設備號則由驅動程序使用,用來標識它所管理的若干同類設備。

●設備號的表示

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

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

基于Linux的設備號的構成、分配、釋放的詳細

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

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

設備號的分配

在內核源碼中,設備號的分配主要有兩個函數(shù):

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

基于Linux的設備號的構成、分配、釋放的詳細

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

比如內核代碼中使用register_chrdev_region申請設備號示例:

以上代碼申請了主設備號為13,總共存在1024個次設備,設備的名字為input。

●動態(tài)分配設備號

基于Linux的設備號的構成、分配、釋放的詳細

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

內核中使用alloc_chrdev_region的示例:

基于Linux的設備號的構成、分配、釋放的詳細

上述示例代碼是通過alloc_chrdev_region函數(shù)申請設備號,設備的個數(shù)為16個,設備的名稱為rtc設備。

設備號釋放

在驅動程序不使用的時候需要釋放設備號,因為設備號也是系統(tǒng)的資源,不用的使用需要及時釋放資源。已供其他設備使用。

基于Linux的設備號的構成、分配、釋放的詳細

使用該函數(shù)可以使用申請的設備號,第一個參數(shù)from表示要釋放的設備號,第二個參數(shù)count表示要釋放的個數(shù)。

內核使用unregister_chrdev_region的示例:

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

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

    關注

    3

    文章

    1416

    瀏覽量

    41445
  • Linux
    +關注

    關注

    87

    文章

    11511

    瀏覽量

    213851
  • 網(wǎng)絡設備

    關注

    0

    文章

    326

    瀏覽量

    30433

原文標題:Linux字符設備學習之設備號的構成、分配、釋放

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關于Linux內存管理的詳細介紹

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

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

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

    USB設備設備ID按照什么邏輯進行分配?

    電腦上插入多個USB設備,本來以為是按照第一個插入的USB設備,為其分配的ID應該是0,但當我插入第二個USB設備之后,發(fā)現(xiàn)第二個插入的U
    發(fā)表于 07-16 06:29

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

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

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

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

    LINUX內核中的內存是如何進行分配

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

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

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

    嵌入式Linux設備和次設備的獲取

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

    Linux DMA Engine框架的介紹

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

    學會linux驅動程序的步驟

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

    Linux DMA內置設備驅動程序的詳細資料說明

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

    Linux內核之塊分配

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

    Linux新字符設備驅動開發(fā)方式

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

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

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

    Linux內核中的頁面分配機制

    Linux內核中是如何分配出頁面的,如果我們站在CPU的角度去看這個問題,CPU能分配出來的頁面是以物理頁面為單位的。也就是我們計算機中常講的分頁機制。本文就看下Linux內核是如何管
    的頭像 發(fā)表于 08-07 15:51 ?642次閱讀
    <b class='flag-5'>Linux</b>內核中的頁面<b class='flag-5'>分配</b>機制