新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動開發之:字符設備驅動編程

        嵌入式Linux設備驅動開發之:字符設備驅動編程

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257111.htm

        表11.9給出了kfree()函數的語法格式。

        表11.9 kfree()函數語法要點

        所需頭文件

        #includelinux/malloc.h>

        函數原型

        voidkfree(void*obj)

        函數傳入值

        obj:要釋放的內存指針

        函數返回值

        成功:寫入的數據長度
        失敗:-EFAULT

        表11.10給出了以頁為單位的分配函數get_free_page類函數的語法格式。

        表11.10 get_free_page類函數語法要點

        所需頭文件

        #includelinux/malloc.h>

        函數原型

        unsignedlongget_zeroed_page(intflags)
        unsignedlong__get_free_page(intflags)
        unsignedlong__get_free_page(intflags,unsignedlongorder)
        unsignedlong__get_dma_page(intflags,unsignedlongorder)

        函數傳入值

        flags:同kmalloc()

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

        函數返回值

        成功:返回指向新分配的頁面的指針
        失敗:-EFAULT

        表11.11給出了基于頁的內存釋放函數free_page族函數的語法格式。

        表11.11 free_page類函數語法要點

        所需頭文件

        #includelinux/malloc.h>

        函數原型

        unsignedlongfree_page(unsignedlongaddr)
        unsignedlongfree_pages(unsignedlongaddr,unsignedlongorder)

        函數傳入值

        addr:要釋放的內存起始地址

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

        函數返回值

        成功:寫入的數據長度
        失敗:-EFAULT

        (9)打印信息。

        就如同在編寫用戶空間的應用程序,打印信息有時是很好的調試手段,也是在代碼中很常用的組成部分。但是與用戶空間不同,在內核空間要用函數printk()而不能用平常的函數printf()。printk()和printf()很類似,都可以按照一定的格式打印消息,所不同的是,printk()還可以定義打印消息的優先級。

        表11.12給出了printk()函數的語法格式。

        表11.12 printk類函數語法要點

        所需頭文件

        #includelinux/kernel>

        函數原型

        intprintk(constchar*fmt,…)

        函數傳入值

        fmt:
        日志級別

        KERN_EMERG:緊急時間消息

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

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

        KERN_ERR:錯誤報告

        KERN_WARNING:對可能出現的問題提出警告

        KERN_NOTICE:有必要進行提示的正常情況

        KERN_INFO:提示性信息

        KERN_DEBUG:調試信息

        …:與printf()相同

        函數返回值

        成功:0
        失敗:-1

        這些不同優先級的信息輸出到系統日志文件(例如:“/var/log/messages”),有時也可以輸出到虛擬控制臺上。其中,對輸出給控制臺的信息有一個特定的優先級console_loglevel。只有打印信息的優先級小于這個整數值,信息才能被輸出到虛擬控制臺上,否則,信息僅僅被寫入到系統日志文件中。若不加任何優先級選項,則消息默認輸出到系統日志文件中。

        注意

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

        4.proc文件系統

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

        表11.13列出了/proc文件系統的主要目錄內容。

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

        目錄名稱

        目錄內容

        目錄名稱

        目錄內容

        apm

        高級電源管理信息

        locks

        內核鎖

        cmdline

        內核命令行

        meminfo

        內存信息

        cpuinfo

        CPU相關信息

        misc

        雜項

        devices

        設備信息(塊設備/字符設備)

        modules

        加載模塊列表

        dma

        使用的DMA通道信息

        mounts

        加載的文件系統

        filesystems

        支持的文件系統信息

        partitions

        系統識別的分區表

        interrupts

        中斷的使用信息

        rtc

        實時時鐘

        ioports

        I/O端口的使用信息

        stat

        全面統計狀態表

        kcore

        內核映像

        swaps

        對換空間的利用情況

        kmsg

        內核消息

        version

        內核版本

        ksyms

        內核符號表

        uptime

        系統正常運行時間

        loadavg

        負載均衡

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凉城县| 红原县| 湄潭县| 吴堡县| 灵寿县| 肇东市| 泗洪县| 苏尼特左旗| 杭锦旗| 汉阴县| 灵山县| 那曲县| 甘孜县| 遵义市| 阜新| 大埔区| 伊春市| 河曲县| 浮山县| 大城县| 石景山区| 镇宁| 横山县| 南澳县| 耒阳市| 长兴县| 南京市| 和林格尔县| 红桥区| 广西| 海丰县| 垣曲县| 桂东县| 苗栗县| 南城县| 天柱县| 肃宁县| 浮梁县| 大新县| 金沙县| 宕昌县|