www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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


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


目錄


別人的經(jīng)驗,我們的階梯!


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


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


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


API 函數(shù)

這里主要關(guān)注下面這 3 個函數(shù):


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

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

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


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


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


另外,在Linux 2.6后期的內(nèi)核版本中,引入了 cdev 結(jié)構(gòu)來描述一個字符設(shè)備,它的結(jié)構(gòu)體成員是:


struct cdev {
struct kobject kobj; // 內(nèi)嵌的kobject對象
struct module *owner; // 所屬模塊
const struct file_operations *ops;//文件操作結(jié)構(gòu)體
struct list_head list; // 鏈表句柄
dev_t dev; // 設(shè)備號
unsigned int count;
};
與這個結(jié)構(gòu)體相關(guān)的處理函數(shù)有:


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


初始化 cdev 的成員,主要是設(shè)置 file_operations。


strcut cdev *cdev_alloc(void);


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


void cdev_put(strcut cdev *p);


與 count 計數(shù)相關(guān)的操作。


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


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


void cdev_del(struct cdev *);


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


后面在代碼演示的時候,可以看到cdev結(jié)構(gòu)是如何被使用的。


編寫驅(qū)動

按照慣例,我們?nèi)匀话凑詹襟E,來討論如何利用上述的APIs,來手寫一個字符設(shè)備的驅(qū)動程序。


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


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

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


#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結(jié)構(gòu)
    cdev_init(
  • 本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
    換一批
    延伸閱讀

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

    關(guān)鍵字: 數(shù)字經(jīng)濟(jì) 安防 模型 編寫

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

    關(guān)鍵字: 邊緣計算 人工智能 機(jī)器人 編寫

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

    關(guān)鍵字: 編寫 邊緣計算 AI ECOM

    "為加快推進(jìn)深圳團(tuán)體標(biāo)準(zhǔn)建設(shè),提升社會團(tuán)體的編寫能力" 深圳2022年8月29日 /美通社/ -- 為加快推進(jìn)深圳團(tuán)體標(biāo)準(zhǔn)建設(shè),滿足深圳市社會團(tuán)體對團(tuán)體標(biāo)準(zhǔn)化能力提升的迫切需求,提升社會團(tuán)體的標(biāo)準(zhǔn)編...

    關(guān)鍵字: 編寫 新能源汽車 汽車產(chǎn)業(yè) 電動汽車

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

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

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

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

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

    關(guān)鍵字: BSP 供應(yīng)鏈 編寫 防護(hù)

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

    關(guān)鍵字: AI模型 人工智能 機(jī)器學(xué)習(xí) 編寫

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

    關(guān)鍵字: AI模型 編寫 人工智能 機(jī)器學(xué)習(xí)

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

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

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

    42 篇文章

    關(guān)注

    發(fā)布文章

    編輯精選

    技術(shù)子站

    關(guān)閉