當前位置:首頁 > 公眾號精選 > IOT物聯(lián)網小鎮(zhèn)
[導讀]作?者:道哥,10年嵌入式開發(fā)老兵,專注于:C/C、嵌入式、Linux。關注下方公眾號,回復【書籍】,獲取Linux、嵌入式領域經典書籍;回復【PDF】,獲取所有原創(chuàng)文章(PDF格式)。目錄API函數編寫驅動程序編寫應用程序卸載驅動模塊小結別人的經驗,我們的階梯!大家好,我是道哥...

作  者:道哥,10 年嵌入式開發(fā)老兵,專注于:C/C 、嵌入式、Linux。


關注下方公眾號,回復【書籍】,獲取 Linux、嵌入式領域經典書籍;回復【PDF】,獲取所有原創(chuàng)文章( PDF 格式)。


目錄


別人的經驗,我們的階梯!


大家好,我是道哥,今天我們繼續(xù)討論: Linux 中字符設備的驅動程序


在上一篇文章中Linux驅動實踐:你知道【字符設備驅動程序】的兩種寫法嗎?我們說過:字符設備的驅動程序,有兩套不同的API函數,并且在文中詳細演示了利用舊的API函數來編寫驅動程序。


這篇文章,我們繼續(xù)這個話題,實際演示一下字符設備驅動程序的另一套API函數的使用方法。


API 函數

這里主要關注下面這 3 個函數:


// 靜態(tài)注冊設備
int register_chrdev_region(dev_t from, unsigned count, const char *name);

// 動態(tài)注冊設備
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name);

// 卸載設備
void unregister_chrdev_region(dev_t from, unsigned count);
關于靜態(tài)和動態(tài)注冊,主要的區(qū)別就在于:主設備號由誰來主導分配!


靜態(tài)注冊:由我們的驅動程序來指定主設備號,即參數1:from;


動態(tài)注冊:由操作系統(tǒng)來分配,驅動程序提供一個變量來接收該設備號,即參數1: dev 指針;


另外,在Linux 2.6后期的內核版本中,引入了 cdev 結構來描述一個字符設備,它的結構體成員是:


struct cdev {
struct kobject kobj; // 內嵌的kobject對象
struct module *owner; // 所屬模塊
const struct file_operations *ops;//文件操作結構體
struct list_head list; // 鏈表句柄
dev_t dev; // 設備號
unsigned int count;
};
與這個結構體相關的處理函數有:


void cdev_init(struct cdev *,struct file_operations *);


初始化 cdev 的成員,主要是設置 file_operations。


strcut cdev *cdev_alloc(void);


動態(tài)申請 cdev 內存。


void cdev_put(strcut cdev *p);


與 count 計數相關的操作。


int cdev_add(struct cdev *,dev_t ,unsigned );


向系統(tǒng)中添加一個 cdev,注冊字符設備,需要在驅動被加載的時候調用。


void cdev_del(struct cdev *);


從系統(tǒng)中刪除一個 cdev,注銷字符設備,需要在驅動被卸載的時候調用。


后面在代碼演示的時候,可以看到cdev結構是如何被使用的。


編寫驅動

按照慣例,我們仍然按照步驟,來討論如何利用上述的APIs,來手寫一個字符設備的驅動程序。


以下所有操作的工作目錄,都是與上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。


創(chuàng)建驅動目錄和驅動程序

$ cd linux-4.15/drivers/
$ mkdir my_driver2
$ cd my_driver2
$ touch driver2.c
driver2.c文件的內容如下(不需要手敲,文末有代碼下載鏈接):


#include

  • #include

  • #include

  • #include

  • #include


  • static struct cdev my_cdev;
    static dev_t dev_no;

    int driver2_open(struct inode *inode, struct file *file)
    {
    printk("driver2_open is called. \n");
    return 0;
    }

    ssize_t driver2_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
    {
    printk("driver2_read is called. \n");
    return 0;
    }

    ssize_t driver2_write (struct file *file, const char __user *buf, size_t size, loff_t *ppos)
    {
    printk("driver2_write is called. \n");
    return 0;
    }

    static const struct file_operations driver2_ops={
    .owner = THIS_MODULE,
    .open = driver2_open,
    .read = driver2_read,
    .write = driver2_write,
    };

    static int __init driver2_init(void)
    {
    printk("driver2_init is called. \n");

    // 初始化cdev結構
    cdev_init(
  • 本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
    換一批
    延伸閱讀

    上海2022年9月6日 /美通社/ -- 9月3日上午,《"東數西算"戰(zhàn)略下綠色智算中心產業(yè)發(fā)展研究報告》重磅發(fā)布。該報告由國家信息中心與燧原科技深度合作,聯(lián)合慶陽市人民政府、之江實驗室、中國能建共同...

    關鍵字: 數字經濟 安防 模型 編寫

    (全球TMT2022年8月31日訊)8月25日,"2022算網融合產業(yè)發(fā)展峰會"在北京舉行,會上中國信息通信研究院發(fā)布《"邊緣計算+"技術白皮書》,該白皮書由信通院發(fā)起,浪潮信息等業(yè)界多家領袖企業(yè)參與編寫,為邊緣計算在...

    關鍵字: 邊緣計算 人工智能 機器人 編寫

    北京2022年8月31日 /美通社/ -- 8月25日,"2022算網融合產業(yè)發(fā)展峰會"在北京舉行,大會匯聚工業(yè)和信息化部、中國通信標準化協(xié)會、運營商、阿里巴巴、國家電網、浪潮信息等政府及企...

    關鍵字: 編寫 邊緣計算 AI ECOM

    "為加快推進深圳團體標準建設,提升社會團體的編寫能力" 深圳2022年8月29日 /美通社/ -- 為加快推進深圳團體標準建設,滿足深圳市社會團體對團體標準化能力提升的迫切需求,提升社會團體的標準編...

    關鍵字: 編寫 新能源汽車 汽車產業(yè) 電動汽車

    上海2022年8月10日 /美通社/ -- 工業(yè)一直在我國國民經濟中占有主導地位,在"十四五"規(guī)劃的重要發(fā)展階段,區(qū)塊鏈等新一代信息技術與產業(yè)的融合創(chuàng)新將會催生新產業(yè)新業(yè)態(tài)新模式,壯大經濟發(fā)展新引擎。...

    關鍵字: 編寫 區(qū)塊鏈 應用發(fā)展 中國電子

    北京2022年7月8日 /美通社/ -- 近日,由荷蘭皇家菲仕蘭聯(lián)合中國婦女發(fā)展基金會發(fā)起的“愛育未來”項目11個項目點的志愿者代表和發(fā)起方代表齊聚線上項目總結交流會,對社區(qū)和家庭早教的階段性探索成果和經驗進行交流和討論...

    關鍵字: 可持續(xù)發(fā)展 編寫

    廣州2022年7月1日 /美通社/ -- 近日,SGS攜手中標院為廣州奧太信科技有限公司旗下品牌UEK的一款兒童減負書包頒發(fā)了獨立慧鑒產品認證證書。結合UEK該款認證書包的客觀測試與主觀評價結果,其各項性能、指標符合SG...

    關鍵字: BSP 供應鏈 編寫 防護

    北京2022年5月6日 /美通社/ -- 近日,由中電金信作為核心編寫單位參編的全球首個AI模型開發(fā)管理標準 -- 《人工智能研發(fā)運營一體化(Model/MLOps)能力成熟...

    關鍵字: AI模型 人工智能 機器學習 編寫

    (全球TMT2022年5月6日訊)近日,由中電金信作為核心編寫單位參編的全球首個AI模型開發(fā)管理標準 --?《人工智能研發(fā)運營一體化(Model/MLOps)能力成熟度模型第一部分:開發(fā)管理》正式對外發(fā)布。該標準的發(fā)布...

    關鍵字: AI模型 編寫 人工智能 機器學習

    南京2022年4月20日 /美通社/ -- 能源與流程工業(yè)制造是國民經濟的支柱產業(yè),伴隨著過去幾十年工業(yè)制造的高速發(fā)展,我國工業(yè)生產面臨的能耗高、資源消耗高、產品附加值低、環(huán)境污染等問題越來越突出,亟需通過最新...

    關鍵字: 編寫 工業(yè)控制

    IOT物聯(lián)網小鎮(zhèn)

    42 篇文章

    關注

    發(fā)布文章

    編輯精選

    技術子站

    關閉