chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何寫一個Linux設備驅動程序

Wildesbeast ? 來源:嵌入式在左C語言在右 ? 作者:嵌入式在左C語言在 ? 2020-04-12 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首先說明:寫這個第一個Linux設備驅動程序的目的是熟悉Linux驅動的框架以及編程流程,所以是通過打印的信息來觀察程序運行的情況,并不是真正的實現了某一個具體設備的驅動,可以類比于C語言編程中的“Hello World”。

Linux下的設備驅動架構如下圖所示:

在本篇文章中以first_device_driver為例進行介紹

一般來說,寫出完整的設備驅動程序需要如下幾個步驟:

寫出first_drv_open、first_drv_write、first_drv_read和first_drv_ioctl等函數;

定義file_operations結構體并填充其成員函數first_drv_open、first_drv_write、first_drv_read和first_drv_ioctl等;

模塊加載函數,通過register_chrdev將字符設備注冊到內核中;

寫驅動的入口函數;

寫驅動的出口函數;

通過module_init()來修飾驅動入口函數;

通過module_exit()來修飾驅動出口函數;

聲明模塊許可證;

下面進行詳細講解

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

步驟二:編寫Makefile腳本

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

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

這一步驟較為簡單,只是在相應目錄輸入make命令即可。

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

我們在加載驅動模塊之前可以先通過命令:cat /proc/devices來查看字符主設備號是否已經被占用。proc文件系統(tǒng)是Linux在運行時存在于內存中的文件系統(tǒng),它記錄著系統(tǒng)運行的實時信息,當關閉系統(tǒng)時,proc文件系統(tǒng)也隨之釋放。

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

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

通過命令:mknod /dev/first_driver 100 0 來創(chuàng)建設備節(jié)點。

步驟六:編寫應用程序進行測試

測試的應用程序如下:

在這里我們可以發(fā)現測試程序里的open()函數實際就是調用了驅動中的first_drv_open()函數,而write()函數實際調用了驅動中的first_drv_write()函數。本質上是這樣的一個執(zhí)行過程:用戶空間的open()函數-》文件系統(tǒng)的sys_open()函數-》驅動的first_drv_open()函數。

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

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

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

3、在驅動出口函數中添加:class_device_unregister(firstdrv_class_devs);class_destroy(firstdrv_class);

這個自動創(chuàng)建設備節(jié)點的功能是基于Linux支持的熱拔插功能,Linux內核中每當設備出現變動時,都會處理對應的信息,使用戶程序對/dev目錄下的設備進行操作。

最后,此驅動程序運行的實際效果就是打印信息,這個Linux設備驅動例程可以類比于C語言中的“Hello World”例程,希望可以幫助大家初步認識Linux的設備驅動程序。

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

    關注

    88

    文章

    11806

    瀏覽量

    219504
  • C語言
    +關注

    關注

    183

    文章

    7646

    瀏覽量

    146100
  • 驅動程序
    +關注

    關注

    19

    文章

    872

    瀏覽量

    50712
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    linux驅動程序的主要流程和功能

    驅動程序是用于控制和管理硬件設備的軟件模塊,它主要負責與設備進行交互,通過操作設備的寄存器和接口,實現對硬件的控制和訪問。在Linux系統(tǒng)中
    的頭像 發(fā)表于 12-08 14:56 ?4313次閱讀

    如何寫簡單的字符設備驅動程序?

    如何寫簡單的字符設備驅動程序
    發(fā)表于 12-23 06:26

    linux設備驅動程序pdf(第三版)

    linux設備驅動程序是經典著作《Linux 設備驅動程序》的第三版。該版本已針對
    發(fā)表于 09-10 11:42 ?0次下載

    設備驅動的入門教程 (教你如何寫驅動)

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

    Linux設備驅動程序開發(fā)

    本文主要講述的是Linux設備驅動程序開發(fā)。
    發(fā)表于 04-22 16:37 ?41次下載

    Linux設備驅動程序的編寫

    本站提供的Linux設備驅動程序的編寫資料,希望對你的學習有幫助。 世界各地都有人在鉆研Linux內核,大多是在
    發(fā)表于 05-25 16:24 ?108次下載

    LINUX設備驅動程序

    LINUX設備驅動程序又名LDD,不想再強調這本書的重要性了,因為行業(yè)內的人都知道!2000年版次
    發(fā)表于 11-03 17:32 ?0次下載

    Linux字符設備驅動程序的實現

    Linux device driver 的概念 系統(tǒng)調用是操作系統(tǒng)內核和應用程序之間的接口,設備驅動程序是操作系統(tǒng)內核和機器硬件之間的接
    發(fā)表于 10-21 09:54 ?0次下載

    Linux系統(tǒng)網絡驅動程序的編寫

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

    可動態(tài)安裝的Linux設備驅動程序

    為了增跟內核的靈活性和為了方便,設各驅動程序應被設計為可動態(tài)安裝的內核模塊。于是,典型的Linu
    發(fā)表于 04-04 10:56 ?1241次閱讀

    Linux設備驅動程序的平臺驅動程序和字符驅動程序介紹

    了解Linux設備驅動程序的基礎知識,重點介紹平臺驅動程序和字符驅動程序。 提出了簡單的平臺驅動程序
    的頭像 發(fā)表于 11-27 06:32 ?5152次閱讀

    如何為Linux編寫用戶空間設備驅動程序

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

    如何寫linux pci設備驅動程序

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

    米爾科技LINUX設備驅動程序教程

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

    Linux設備驅動程序分類有哪些

    Linux設備驅動程序是操作系統(tǒng)與硬件設備之間的橋梁,負責實現硬件設備與操作系統(tǒng)之間的通信和控制。Lin
    的頭像 發(fā)表于 08-30 15:11 ?2160次閱讀