今天给各位分享关于linux驱动开发详解(linux驱动开发入门与实战)的知识,希望对你有帮助,现在开始把!

1、最近在搞一个linux项目,主要写一些应用模块,内核及其驱动模块涉及很少 。在遇到一些驱动模块的问题时,临时查了一些资料,大致了解了开发驱动模块的基本步骤和常规步骤,又从网上搜集了一些相关资料,所以做了一个简单的总结,记录在这里,以备日后参考,与同事们分享 。什么是linux内核驱动模块?Linux内核的整体结构已经非常庞大,包含了很多组件 。
2、我们如何在内核中包含所有需要的部分?一种 *** 是将所有需要的函数编译到Linux内核中 。这将导致两个问题 。首先,生成的内核会非常大 。
3、其次,如果我们想在现有内核中添加或删除函数,我们必须重新编译内核 。有没有什么机制使得编译后的内核本身不需要包含所有的函数,而是在需要使用这些函数的时候,将相应的代码动态加载到内核中?答案是肯定的,Linux提供了这样一种机制,叫做模块 。该模块具有以下特点:模块本身没有编译到内核映像中,内核映像控制着内核的大小 。
4、一旦模块被加载,它就和内核的其余部分完全一样了 。所以,问题来了 。内核驱动模块怎么写?别急,一步步介绍吧 。
5、[文章福利]边肖整理了一些我个人认为比较好的linux内核学习书籍和视频资料,分享在群文件里 。如有需要,可以私信[内核],免费添加!!!(包括视频教程、电子书、实践项目和代码)
6、首先,从最简单的例子开始 。我们先来看最简单的内核模块HelloWorld 。
7、#include
9、检查系统中已加载的模块列表在Linux中,可以使用l *** od命令获取系统中加载的所有模块及其依赖关系,例如:root@imx6:~$l *** odModuleSizeUsedbyhello15680ohci1394327160ide_scsi167080ide_cd393920cdrom369601ide_cdl *** od命令实际读取并分析/proc/modules文件,上述l *** od命令结果对应的/proc/modules文件如下:root@imx6:~$cat/proc/moduleshello15680-Live0xc8859000ohci1394327160-Live0xc88c8000ieee1394944201ohci1394,Live0xc8840000ide_scsi167080-Live0xc883a000ide_cd393920-Live0xc882f000cdrom369601ide_cd,Live0xc8876000内核中已加载模块的信息也存在于/sys/module目录中 。加载hello.ko后,内核将包含/sys/module/hello目录,该目录又包含一个refcnt文件和一个sections目录 。运行/sys/module/hello目录中的Tree–A以获得以下目录树:root@imx6:~$tree-a.|--refcnt`--sections|--.bss|--.data|--.gnu.linkonce.this_module|--.rodata|--.rodata.str1|--.strtab|--.symtab|--.text`--__versions查看特定模块的详细信息使用modinfo命令可以获取模块的信息,包括模块作者、模块描述、模块支持的参数等 。
10、root@imx6:~$modinfohello.kofilename:hello.kolicense:DualBSD/GPLauthor:SongBaohuadescription:AsimpleHelloWorldModulealias:asimplestmodulevermagic:5686gcc-2depends:模块程序的基本结构Linux内核模块主要由以下部分组成:模块加载函数(一般需要)当通过in *** od或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作 。模块卸载函数(一般需要)当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块卸载函数相反的功能 。模块许可证声明(必须)许可证(LICENSE)声明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核被污染(kerneltainted)的警告 。
推荐阅读
- 开发商五证都是什么 开发商五证是那五证
- linux主目录是什么
- 开发电子商务系统 了解系统的生命周期
- 天津塘沽旅游2线公交车海博馆到开发区黄海路 天津塘沽旅游
- 微信小程序开发简易教程(个人小程序怎么做 个人小程序怎么做)
- 东芝2505打印机驱动 东芝2505复印机说明书
- linux 修改环境变量命令 Linux设置环境变量的命令
- 深圳开发是哪一年
- 如何开发一款app软件 如何做app软件开发
- linux将文件移动到目录 linux将文件移到指定文件夹
