新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux系統(tǒng)設備驅(qū)動程序的開發(fā)

        嵌入式Linux系統(tǒng)設備驅(qū)動程序的開發(fā)

        作者: 時間:2012-05-08 來源:網(wǎng)絡 收藏

        定義好net_device結(jié)構(gòu)體后,根據(jù)實際情況編寫操作函數(shù),其中hard_start_xmit()函數(shù)是用來發(fā)送數(shù)據(jù)的,set_mac_address()是進行網(wǎng)絡參數(shù)設置的。

        當linux初始化時將調(diào)用初始化函數(shù)int device_init( ),該函數(shù)包括以下內(nèi)容:

        注冊所用。linux用號來標識字符和塊設備。設備號分為主設備號和從設備號,最終形成設備接點。設備節(jié)點在訪問字符設備和塊設備的設備時將使用。通常主設備號標識設備對應的,大多數(shù)設備是“一個主設備號對應一個”,如:虛擬控制臺和串口終端由驅(qū)動程序4管理。次設備號由內(nèi)核使用,用于確定設備文件所指的設備。字符設備和塊設備注冊時必須先定義好設備號。

        字符設備注冊函數(shù)如下:

        int register_chrdev(unsigned int major ,const char *name, struct file_oprations *fops);

        其中 major是主設備號。

        由于對網(wǎng)絡設備驅(qū)動程序的訪問不需要設備節(jié)點,它的注冊函數(shù)如下:

        int register_netdev(struct net_device *dev)

        注冊設備所用的中斷。中斷在現(xiàn)代計算機結(jié)構(gòu)中有重要的地位,操作必須提供程序響應中斷的能力。一般是把一個中斷處理程序注冊到中去。操作在硬件中斷發(fā)生后調(diào)用驅(qū)動程序的處理程序。

        注冊中斷所用的函數(shù)如下:

        int request_irq (unsigned irq,void(*handler)(int,void*,struct pt_regs*),unsigned long flags,const char*device,void* dev_id);

        其中,irq是中斷向量;handler是中斷處理函數(shù);flags是中斷處理中的掩碼;devices是設備名;dev_id是在中斷共享使用的id。

        當linux不使用該設備時,就要調(diào)用清除函數(shù)void_devicie_exit ( ),它同初始化函數(shù)相對應的,主要是:

        注銷設備,字符設備注銷函數(shù)如下:

        int unregister_chrdev(unsigned int major ,const char *name, struct file_oprations *fops);

        注銷中斷,注銷中斷所用的函數(shù)如下:

        int free_irq (unsigned irq,void(*handler)(int,void*,struct pt_regs*),unsigned long flags,const char*device,void* dev_id);

        釋放資源,模塊初始化和清除函數(shù)采用module_init(device_init),module_exit(device_exit) 形式

        編寫服務子程序

        服務于I/O請求的子程序,又稱為驅(qū)動程序的上半部分。調(diào)用這部分是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行的時候.系統(tǒng)仍認為是和進行調(diào)用的進程屬于同一個進程. 只是用戶態(tài)變成了核心態(tài),具有進行此系統(tǒng)調(diào)用的用戶程序的運行環(huán)境.因此可以在其中調(diào)用sleep等與進程運行環(huán)境有關(guān)的函數(shù)。

        中斷服務子程序,又稱為驅(qū)動程序的下半部分。在系統(tǒng)中.并不是直接從中斷向量表中調(diào)用設備驅(qū)動程序的中斷服務子程序,而是由系統(tǒng)來接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務子程序。中斷可以產(chǎn)生在任何一個進程運行的時候,因此在中斷服務程序被調(diào)用的時候.不能依賴于仟何進程的狀態(tài),也就不能調(diào)用任何與進程運行環(huán)境相關(guān)的函數(shù)。因為設備驅(qū)動程序一般支持同一類型的若干設備,所以一般在系統(tǒng)調(diào)用中斷服務程序的時候,都帶有一個或多個參數(shù),以唯一標識請求服務的設備。

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


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 蒙阴县| 宜良县| 大厂| 冕宁县| 花莲县| 越西县| 荥经县| 逊克县| 龙里县| 松原市| 衡东县| 洛川县| 昌都县| 正宁县| 扎鲁特旗| 什邡市| 衡东县| 黑龙江省| 津南区| 布尔津县| 广宗县| 榆中县| 和平县| 平邑县| 寿阳县| 嘉峪关市| 淮北市| 五常市| 宾阳县| 秦皇岛市| 邹平县| 乐平市| 祁连县| 乾安县| 高密市| 英德市| 溆浦县| 彰化县| 榆林市| 自治县| 桃园市|