當(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格式)。目錄示例程序目標(biāo)編寫驅(qū)動程序編寫應(yīng)用程序卸載驅(qū)動模塊別人的經(jīng)驗,我們的階梯!大家好,我是道哥。...

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


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


目錄


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


大家好,我是道哥。


在前幾篇文章中,我們一塊討論了:在Linux系統(tǒng)中,編寫字符設(shè)備驅(qū)動程序的基本框架,主要是從代碼流程和 API 函數(shù)這兩方面觸發(fā)。


這篇文章,我們就以此為基礎(chǔ),寫一個有實際應(yīng)用功能的驅(qū)動程序:


  1. 在驅(qū)動程序中,初始化 GPIO 設(shè)備,自動創(chuàng)建設(shè)備節(jié)點;


  2. 在應(yīng)用程序中,打開 GPIO 設(shè)備,并發(fā)送控制指令設(shè)置 GPIO 口的狀態(tài);


示例程序目標(biāo)

編寫一個驅(qū)動程序模塊:mygpio.ko。


當(dāng)這個驅(qū)動模塊被加載的時候,在系統(tǒng)中創(chuàng)建一個mygpio類設(shè)備,并且在/dev目錄下,創(chuàng)建4個設(shè)備節(jié)點:


/dev/mygpio0


/dev/mygpio1


/dev/mygpio2


/dev/mygpio3


因為我們現(xiàn)在是在x86平臺上來模擬 GPIO的控制操作,并沒有實際的GPIO硬件設(shè)備。


因此,在驅(qū)動代碼中,與硬件相關(guān)部分的代碼,使用宏MYGPIO_HW_ENABLE控制起來,并且在其中使用printk輸出打印信息來體現(xiàn)硬件的操作。


在應(yīng)用程序中,可以分別打開以上這4個GPIO設(shè)備,并且通過發(fā)送控制指令,來設(shè)置GPIO的狀態(tài)。


編寫驅(qū)動程序

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


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

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


#include

  • #include

  • #include

  • #include

  • #include


  • // GPIO 硬件相關(guān)宏定義
    #define MYGPIO_HW_ENABLE

    // 設(shè)備名稱
    #define MYGPIO_NAME "mygpio"

    // 一共有4個 GPIO 口
    #define MYGPIO_NUMBER 4

    // 設(shè)備類
    static struct class *gpio_class;

    // 用來保存設(shè)備
    struct cdev gpio_cdev[MYGPIO_NUMBER];

    // 用來保存設(shè)備號
    int gpio_major = 0;
    int gpio_minor = 0;

    #ifdef MYGPIO_HW_ENABLE
    // 硬件初始化函數(shù),在驅(qū)動程序被加載的時候(gpio_driver_init)被調(diào)用
    static void gpio_hw_init(int gpio)
    {
    printk("gpio_hw_init is called: %d. \n", gpio);
    }

    // 硬件釋放
    static void gpio_hw_release(int gpio)
    {
    printk("gpio_hw_release is called: %d. \n", gpio);
    }

    // 設(shè)置硬件GPIO的狀態(tài),在控制GPIO的時候(gpio_ioctl)被調(diào)研
    static void gpio_hw_set(unsigned long gpio_no, unsigned int val)
    {
    printk("gpio_hw_set is called. gpio_no = %ld, val = %d. \n", gpio_no, val);
    }
    #endif

    // 當(dāng)應(yīng)用程序打開設(shè)備的時候被調(diào)用
    static int gpio_open(struct inode *inode, struct file *file)
    {

    printk("gpio_open is called. \n");
    return 0;
    }

    // 當(dāng)應(yīng)用程序控制GPIO的時候被調(diào)用
    static long gpio_ioctl(struct file* file, unsigned int val, unsigned long gpio_no)
    {
    printk("gpio_ioctl is called. \n");

    // 檢查設(shè)置的狀態(tài)值是否合法
    if (0 != val
  • 本站聲明: 本文章由作者或相關(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ī)器人 編寫

    GPIO全稱General Purpose Input Output即通用輸入/輸出,其實GPIO的本質(zhì)就是芯片的一個引腳,通常在ARM中所有的I/O都是通用的。不過由于每個開發(fā)板上都會設(shè)計不同的外圍電路,這就造成GPI...

    關(guān)鍵字: GPIO 芯片

    北京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í)

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

    42 篇文章

    關(guān)注

    發(fā)布文章

    編輯精選

    技術(shù)子站

    關(guān)閉