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

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


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


目錄


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


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


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


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


API 函數(shù)

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


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

// 動(dòng)態(tài)注冊(cè)設(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)和動(dòng)態(tài)注冊(cè),主要的區(qū)別就在于:主設(shè)備號(hào)由誰(shuí)來(lái)主導(dǎo)分配!


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


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


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


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


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


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


strcut cdev *cdev_alloc(void);


動(dòng)態(tài)申請(qǐng) cdev 內(nèi)存。


void cdev_put(strcut cdev *p);


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


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


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


void cdev_del(struct cdev *);


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


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


編寫(xiě)驅(qū)動(dòng)

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


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


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

$ 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ā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
    換一批
    延伸閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    42 篇文章

    關(guān)注

    發(fā)布文章

    編輯精選

    技術(shù)子站

    關(guān)閉