• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > linux 基礎復習(9)設備驅動入門

    linux 基礎復習(9)設備驅動入門

    作者: 時間:2016-10-08 來源:網絡 收藏

    · get_free_page:獲得一個或幾個連續頁面。

    · get_dma_pages:獲得用于DMA傳輸的頁面。

    與之相對應的釋放內存用也有kfree或free_pages 族。

    kmalloc 函數語法要點

    所需頭文件 #i nclude

    函數原型 void *kmalloc(unsigned int len,int flags)

    Len:希望申請的字節數

    GFP_KERNEL:內核內存的通常分配方法,可能引起睡眠

    GFP_BUFFER:用于管理緩沖區高速緩存

    函數傳入值 flags GFP_ATOMIC:為中斷處理程序或其他運行于進程上下文之外的代碼分

    配內存,且不會引起睡眠

    GFP_USER:用戶分配內存,可能引起睡眠

    GFP_HIGHUSER:優先高端內存分配

    _GFP_DMA:DMA數據傳輸請求內存

    _GFP_HIGHMEN:請求高端內存

    函數返回值 成功:寫入的數據長度

    失敗:-EFAULT

    kfree函數的語法格式

    所需頭文件 #i nclude

    函數原型 void kfree(void * obj)

    函數傳入值 obj:要釋放的內存指針

    函數返回值 成功:寫入的數據長度

    失敗:-EFAULT

    get_free_ page類函數語法要點

    unsigned long get_zeroed_page(int flags)

    unsigned long __get_free_page(int flags)

    函數原型 unsigned long __get_free_page(int flags,unsigned long order)

    unsigned long __get_dma_page(int flags,unsigned long order)

    函數傳入值 flags:同kmalloc

    order:要請求的頁面數,以2為底的對數

    函數返回值 成功:寫入的數據長度

    失敗:-EFAULT

    free_page類函數語法要點

    所需頭文件 #i nclude

    函數原型 unsigned long free_page(unsigned long addr)

    unsigned long free_page(unsigned long addr)

    函數傳入值 flags:同kmalloc

    order:要請求的頁面數,以2為底的對數

    函數返回值 成功:寫入的數據長度

    失敗:-EFAULT

    printk類函數語法要點

    所需頭文件 #i nclude

    函數原型 int printk(const char * fmt,…)

    KERN_EMERG:緊急時間消息

    KERN_ALERT:需要立即采取動作的情況

    KERN_CRIT:臨界狀態,通常涉及嚴重的硬件或軟件操作失敗

    KERN_ERR:錯誤報告

    函數傳入值 fmt: KERN_WARNING:對可能出現的問題提出警告

    日志級別 KERN_NOTICE:有必要進行提示的正常情況

    KERN_INFO:提示性信息

    KERN_DEBUG:調試信息

    …:如printf一樣的格式說明

    函數返回值 成功:0

    失敗:-1

    這些不同優先級的信息可以輸出到控制臺上、/var/log/messages 里。其中,對輸出給控制臺的信息有一個特定的優先級console_loglevel。若優先級小于這個整數值時,則消息才能顯示到控制臺上,否則,消息會顯示在/var/log/messages 里。若不加任何優先級選項,則消息默認輸出到/var/log/messages 文件中。

    要開啟klogd和syslogd服務,消息才能正常輸出。

    proc 文件系統

    /proc 文件系統是一個偽文件系統,它是一種內核和內核模塊用來向進程發送信息的機制。這個偽文件系統讓用戶可以和內核內部數據結構進行交互,獲取有關進程的有用信息,在運行時通過改變內核參數改變設置。與其他文件系統不同,/proc存在于內存之中而不是硬盤上。讀者可以通過“ls”查看/proc文件系統的內容。

    /proc文件系統主要目錄內容

    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} onclick=if(!this.resized) {return true;} else {window.open(this.src);} alt= src=http://blogimg.chinaunix.net/blog/upfile2/080413215654.jpg onload=if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} border=0>

    除此之外,還有一些是以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的PID 號為目錄名,它們是讀取進程信息的接口。進程目錄的結構如下

    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} onclick=if(!this.resized) {return true;} else {window.open(this.src);} alt= src=http://blogimg.chinaunix.net/blog/upfile2/080413215720.jpg onload=if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} border=0>

    用戶可以使用cat命令來查看其中的內容。

    可以看到,/proc文件系統體現了內核及進程運行的內容,在加載模塊成功后,讀者可以使用查看/proc/device文件獲得相關設備的主設備號。


    上一頁 1 2 3 下一頁

    關鍵詞:

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 颍上县| 梅州市| 姜堰市| 郸城县| 浮梁县| 无极县| 普陀区| 泰顺县| 蒲江县| 博罗县| 富源县| 台南县| 定远县| 定日县| 黔西| 得荣县| 乌拉特后旗| 江口县| 元氏县| 辉县市| 元氏县| 新建县| 宜阳县| 正阳县| 潮州市| 黄大仙区| 白城市| 永寿县| 乃东县| 都匀市| 原阳县| 丹凤县| 香河县| 拉孜县| 韶关市| 仁怀市| 涞水县| 高清| 清涧县| 东乌| 湘潭县|