在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何寫一個(gè)Linux設(shè)備驅(qū)動(dòng)程序

Wildesbeast ? 來(lái)源:嵌入式在左C語(yǔ)言在右 ? 作者:嵌入式在左C語(yǔ)言在 ? 2020-04-12 10:13 ? 次閱讀

首先說(shuō)明:寫這個(gè)第一個(gè)Linux設(shè)備驅(qū)動(dòng)程序的目的是熟悉Linux驅(qū)動(dòng)的框架以及編程流程,所以是通過(guò)打印的信息來(lái)觀察程序運(yùn)行的情況,并不是真正的實(shí)現(xiàn)了某一個(gè)具體設(shè)備的驅(qū)動(dòng),可以類比于C語(yǔ)言編程中的“Hello World”。

Linux下的設(shè)備驅(qū)動(dòng)架構(gòu)如下圖所示:

在本篇文章中以first_device_driver為例進(jìn)行介紹

一般來(lái)說(shuō),寫出完整的設(shè)備驅(qū)動(dòng)程序需要如下幾個(gè)步驟:

寫出first_drv_open、first_drv_write、first_drv_read和first_drv_ioctl等函數(shù);

定義file_operations結(jié)構(gòu)體并填充其成員函數(shù)first_drv_open、first_drv_write、first_drv_read和first_drv_ioctl等;

模塊加載函數(shù),通過(guò)register_chrdev將字符設(shè)備注冊(cè)到內(nèi)核中;

寫驅(qū)動(dòng)的入口函數(shù);

寫驅(qū)動(dòng)的出口函數(shù);

通過(guò)module_init()來(lái)修飾驅(qū)動(dòng)入口函數(shù);

通過(guò)module_exit()來(lái)修飾驅(qū)動(dòng)出口函數(shù);

聲明模塊許可證;

下面進(jìn)行詳細(xì)講解

步驟一:在新創(chuàng)建的.c文件中編寫如圖例中的代碼

步驟二:編寫Makefile腳本

值得提出的一點(diǎn)是,編寫Makefile是Linux驅(qū)動(dòng)工程師必備的基礎(chǔ),但是要明白我們并不需要完全的掌握Makefile的語(yǔ)法及編程,我們只需要能模仿著其他工程的Makefile文件寫出我們自己想要的Makefile文件即可。

步驟三:在對(duì)應(yīng)目錄中執(zhí)行make命令,生成.ko模塊文件

這一步驟較為簡(jiǎn)單,只是在相應(yīng)目錄輸入make命令即可。

步驟四:通過(guò)U盤或者nfs網(wǎng)絡(luò)文件系統(tǒng)將該.ko文件加載到內(nèi)核中

我們?cè)诩虞d驅(qū)動(dòng)模塊之前可以先通過(guò)命令:cat /proc/devices來(lái)查看字符主設(shè)備號(hào)是否已經(jīng)被占用。proc文件系統(tǒng)是Linux在運(yùn)行時(shí)存在于內(nèi)存中的文件系統(tǒng),它記錄著系統(tǒng)運(yùn)行的實(shí)時(shí)信息,當(dāng)關(guān)閉系統(tǒng)時(shí),proc文件系統(tǒng)也隨之釋放。

然后可通過(guò)命令:insmod first_drv.ko將模塊掛載到內(nèi)核, 通過(guò)命令:cat /proc/devices可以觀察first_drv設(shè)備是否已經(jīng)掛載成功;另外也可以通過(guò)modprobe來(lái)加載驅(qū)動(dòng)模塊,這兩者的區(qū)別在于modprobe可以解決加載模塊時(shí)的依賴關(guān)系,它是通過(guò)/lib/modules/#uname -r/modules.dep(.bb)文件來(lái)查找依賴關(guān)系的,而insmod不能解決模塊間的依賴問(wèn)題。

步驟五:創(chuàng)建dev/first_driver設(shè)備節(jié)點(diǎn)

通過(guò)命令:mknod /dev/first_driver 100 0 來(lái)創(chuàng)建設(shè)備節(jié)點(diǎn)。

步驟六:編寫應(yīng)用程序進(jìn)行測(cè)試

測(cè)試的應(yīng)用程序如下:

在這里我們可以發(fā)現(xiàn)測(cè)試程序里的open()函數(shù)實(shí)際就是調(diào)用了驅(qū)動(dòng)中的first_drv_open()函數(shù),而write()函數(shù)實(shí)際調(diào)用了驅(qū)動(dòng)中的first_drv_write()函數(shù)。本質(zhì)上是這樣的一個(gè)執(zhí)行過(guò)程:用戶空間的open()函數(shù)-》文件系統(tǒng)的sys_open()函數(shù)-》驅(qū)動(dòng)的first_drv_open()函數(shù)。

另外很重要的一點(diǎn),上文中圖例中的程序是需要手動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn),從而提供給用戶程序訪問(wèn)的,如此一來(lái)當(dāng)驅(qū)動(dòng)模塊較多的時(shí)候就很麻煩,所以Linux也提供自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)的接口,建議使用自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)的機(jī)制。如下是自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)的方法:

1、首先創(chuàng)建一個(gè)class設(shè)備類,然后在class類下,創(chuàng)建一個(gè)class_device,即在類下面創(chuàng)建類的設(shè)備;

2、在驅(qū)動(dòng)入口函數(shù)中添加步驟:firstdrv_class= class_create(THIS_MODULE,“first_drv”);irstdrv_class_devs=class_device_create(firstdrv_class,NULL,MKDEV(major,0),NULL,“first_drv”);

3、在驅(qū)動(dòng)出口函數(shù)中添加:class_device_unregister(firstdrv_class_devs);class_destroy(firstdrv_class);

這個(gè)自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)的功能是基于Linux支持的熱拔插功能,Linux內(nèi)核中每當(dāng)設(shè)備出現(xiàn)變動(dòng)時(shí),都會(huì)處理對(duì)應(yīng)的信息,使用戶程序?qū)?dev目錄下的設(shè)備進(jìn)行操作。

最后,此驅(qū)動(dòng)程序運(yùn)行的實(shí)際效果就是打印信息,這個(gè)Linux設(shè)備驅(qū)動(dòng)例程可以類比于C語(yǔ)言中的“Hello World”例程,希望可以幫助大家初步認(rèn)識(shí)Linux的設(shè)備驅(qū)動(dòng)程序。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11351

    瀏覽量

    210497
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7615

    瀏覽量

    137827
  • 驅(qū)動(dòng)程序
    +關(guān)注

    關(guān)注

    19

    文章

    849

    瀏覽量

    48234
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux驅(qū)動(dòng)程序的主要流程和功能

    驅(qū)動(dòng)程序是用于控制和管理硬件設(shè)備的軟件模塊,它主要負(fù)責(zé)與設(shè)備進(jìn)行交互,通過(guò)操作設(shè)備的寄存器和接口,實(shí)現(xiàn)對(duì)硬件的控制和訪問(wèn)。在Linux系統(tǒng)中
    的頭像 發(fā)表于 12-08 14:56 ?2696次閱讀

    如何寫個(gè)簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序

    如何寫個(gè)簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序
    發(fā)表于 12-23 06:26

    linux設(shè)備驅(qū)動(dòng)程序pdf(第三版)

    linux設(shè)備驅(qū)動(dòng)程序是經(jīng)典著作《Linux 設(shè)備驅(qū)動(dòng)程序》的第三版。該版本已針對(duì)
    發(fā)表于 09-10 11:42 ?0次下載

    設(shè)備驅(qū)動(dòng)的入門教程 (教你如何寫驅(qū)動(dòng))

    設(shè)備驅(qū)動(dòng)的入門教程 (教你如何寫驅(qū)動(dòng))
    發(fā)表于 03-28 09:44 ?61次下載

    Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

    本文主要講述的是Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)。
    發(fā)表于 04-22 16:37 ?41次下載

    Linux設(shè)備驅(qū)動(dòng)程序的編寫

    本站提供的Linux設(shè)備驅(qū)動(dòng)程序的編寫資料,希望對(duì)你的學(xué)習(xí)有幫助。 世界各地都有人在鉆研Linux內(nèi)核,大多是在
    發(fā)表于 05-25 16:24 ?108次下載

    Linux字符設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)

    Linux device driver 的概念 系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接
    發(fā)表于 10-21 09:54 ?0次下載

    Linux系統(tǒng)網(wǎng)絡(luò)驅(qū)動(dòng)程序的編寫

    驅(qū)動(dòng)程序編寫 .Linux系統(tǒng)設(shè)備驅(qū)動(dòng)程序概述 1.1 Linux
    發(fā)表于 11-07 10:40 ?0次下載

    可動(dòng)態(tài)安裝的Linux設(shè)備驅(qū)動(dòng)程序

    為了增跟內(nèi)核的靈活性和為了方便,設(shè)各驅(qū)動(dòng)程序應(yīng)被設(shè)計(jì)為個(gè)可動(dòng)態(tài)安裝的內(nèi)核模塊。于是,個(gè)典型的Linu
    發(fā)表于 04-04 10:56 ?1023次閱讀

    Linux設(shè)備驅(qū)動(dòng)程序的平臺(tái)驅(qū)動(dòng)程序和字符驅(qū)動(dòng)程序介紹

    了解Linux設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)知識(shí),重點(diǎn)介紹平臺(tái)驅(qū)動(dòng)程序和字符驅(qū)動(dòng)程序。 提出了簡(jiǎn)單的平臺(tái)驅(qū)動(dòng)程序
    的頭像 發(fā)表于 11-27 06:32 ?4382次閱讀

    如何為Linux編寫用戶空間設(shè)備驅(qū)動(dòng)程序

    了解如何為Linux編寫用戶空間設(shè)備驅(qū)動(dòng)程序。 用戶空間驅(qū)動(dòng)程序為某些設(shè)備提供內(nèi)核空間驅(qū)動(dòng)程序
    的頭像 發(fā)表于 11-22 07:04 ?3821次閱讀

    如何寫linux pci設(shè)備驅(qū)動(dòng)程序

    PCI總線應(yīng)用領(lǐng)域及其廣泛并且令人驚奇。不同的pci設(shè)備有不同的需求以及不同的問(wèn)題。因此,在linux內(nèi)核中pci層支持就非常重要啦。本文檔就是想為驅(qū)動(dòng)程序設(shè)計(jì)開(kāi)發(fā)人員解決pci處理
    發(fā)表于 04-02 14:38 ?545次閱讀

    米爾科技LINUX設(shè)備驅(qū)動(dòng)程序教程

    本書是經(jīng)典著作《Linux設(shè)備驅(qū)動(dòng)程序》的第三版。
    的頭像 發(fā)表于 11-25 09:10 ?2138次閱讀
    米爾科技<b class='flag-5'>LINUX</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動(dòng)程序</b>教程

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    ,需要了解Linux內(nèi)核的基本概念和API。以下是些關(guān)鍵概念: 1.1 內(nèi)核模塊:Linux內(nèi)核模塊是種動(dòng)態(tài)加載和卸載的代碼,可以在不重新啟動(dòng)系統(tǒng)的情況下加載和卸載。
    的頭像 發(fā)表于 08-30 15:02 ?607次閱讀

    Linux設(shè)備驅(qū)動(dòng)程序分類有哪些

    Linux設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Lin
    的頭像 發(fā)表于 08-30 15:11 ?720次閱讀
    主站蜘蛛池模板: 中文字幕一区在线观看视频 | 国产乱理论片在线观看理论 | 亚洲1区2区3区4区 | 午夜精品久久久 | 四虎永久免费影院在线 | 久久久免费视频播放 | 日日操夜夜操免费视频 | 国产精品视频一区二区三区 | 手机看片午夜 | 日本特黄在线观看免费 | 午夜毛片免费看 | 国产高清在线视频 | 一本视频在线 | 一区二区三区伦理 | 国产高清在线精品 | 成年大片免费播放视频人 | 黄色的视频免费看 | 花怜write. as | 色偷偷亚洲男人 | 欧美色视频网 | 日本xxxxxxxxx69 | 最新欧美精品一区二区三区 | 婷婷开心六月久久综合丁香 | 日操夜操天天操 | 天堂网www在线资源 天堂网www在线资源链接 | 五月天综合婷婷 | a天堂中文在线官网 | 求毛片网站 | 一本在线免费视频 | 亚洲伊人久久大香线蕉影院 | 最新黄色免费网站 | 色综久久 | 伊人www | 手机看片自拍自自拍日韩免费 | 午夜在线播放视频在线观看视频 | 乱操视频 | zzji国产精品视频 | 久久久久久久久综合 | 亚洲狠狠网站色噜噜 | 国产精品黄页网站在线播放免费 | 额去鲁97在线观看视频 |