驱动开发的准备(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 里面的所有头文件
- 驱动开发的准备(2)--熟悉相应的接口
- 内核驱动开发的准备知识
- Android调用相应的接口
- 熟悉S3C44B0X开发板的开发流程
- 接口调用,收到相应后的处理
- 开发环境的准备
- 网站开发的准备
- 开发Java的准备
- 开发前的准备
- 开发 JAVA 的准备
- Java开发的准备
- Linux驱动开发准备
- Linux驱动开发准备
- .NET程序员应该熟悉的开发模式
- 熟悉Android开发不得不知道的技巧
- 熟悉Android开发不得不知道的技巧
- ###熟悉常用的集合--提高开发效率
- 测试驱动的面向接口编程的开发流程
- RN中的键盘遮挡问题解决
- 原生js写淡入淡出轮播(点击按钮)
- java使用异常
- 升级/降级内核 VirtualBox报错 Kernel driver not installed (rc=-1908) 最新解决办法
- 深入理解JavaScript系列文章
- 驱动开发的准备(2)--熟悉相应的接口
- 15-PS模块处理
- SLIM模型
- Ubuntu提示卷boot仅剩0字节的硬盘空间,解决办法
- 朴素贝叶斯分类器
- 经典C语言模拟字符串库操作
- 高德地图demo
- sentos7安装jdk8
- leetcode 508. Most Frequent Subtree Sum 一个简单的DFS深度优先遍历的做法