驱动开发的准备(2)--熟悉相应的接口

来源:互联网 发布:商标域名注册 编辑:程序博客网 时间:2024/06/10 07:26

第一大点:

驱动开发前需要的函数准备工作:insmod装载模块、测试、rmmod卸载模块

1.insmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表

        2.insmod(install module,安装模块),功能是向当前内核中去安装一个模块,用法是insmod xxx.ko

3.modinfo(module information,模块信息),功能是打印出一个内核模块的自带信息。

用法是modinfo xxx.ko
4.rmmod(remove module,卸载模块),功能是从当前内核中卸载一个已经安装了的模块,用法是rmmod xxx(注意卸载模块时只需要输入模块名即可,不能加.ko后缀)

第二大点:

安装驱动时:先lsmod再insmod看安装前后系统内模块记录。实践测试标明内核会将最新安装的模块放在lsmod显示的最前面

第三点:

使用modinfo查看模块的版本信息

      filename:       /root/driver_test/2.CharDevBasic/5.2.1/module_test.ko
alias:          alias xxx
description:    module test
author:         aston
license:        GPL
srcversion:     8BC39E58A12E0D372DE4F0D
depends:        
vermagic:       3.13.0-32-generic SMP mod_unload modversions 686 
 

注意两点:

1.vermagic 必须和内核的vermagic保持一致

2.depends  这个模块的依赖关系

3.如果不了下面的相关参数 可以百度

第四点:

insmod与module_init宏之间的关系,rmmod与module_exit()之间的关系;

     当用户执行insmod的时候,实际上是在执行module_init所对应的宏当用户执行rmmod,实际上是在执行module_exit


 第五步:

1.内核设计的思想(一)

__init,本质上是个宏定义,在内核源代码中就有#define __init xxxx。这个__init的作用就是将被他修饰的函数放入.init.text段中去(本来默认情况下函数是被放入.text段中)。
整个内核中的所有的这类函数都会被链接器链接放入.init.text段中,所以所有的内核模块的__init修饰的函数其实是被统一放在一起的。内核启动时统一会加载.init.text段中的这些模块安装函数,
加载完后就会把这个段给释放掉以节省内存。
/*************************
体会#define __init xxx这种定义宏的思想
*************************/

            2.static 的作用。这个函数这本文件使用,就会用static来修饰


第六步:

驱动开发常用的知识:

打印信息:的使用信息

1.printk 

2.demsg 

查看打印级别: 这个在写驱动的时候使用printk需要注意

cat /proc/sys/kernel/printk

第七点:关于驱动代码的包含。

例如: include <linux/modle.h>

头文件主要存在的地方: kernel/include/linux 里面的所有头文件

原创粉丝点击