1. Linux内核驱动模块机制

静态加载, 把驱动模块编进内核, 在内核启动时加载

动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载

2. 编写内核驱动

#include

#include

static int __init test_init(void)

{

return 0; //返回0表示成功, 返加负数退出加载模块

}

//__init 当内核把驱动初始化完后, 释放此函数的代码指令空间

static void __exit test_exit(void)

{

....

}

//__exit 指定此函数只在驱动卸载时使用, 用完后释放

module_init(test_init); //指定test_init为模块初始化函数

module_exit(test_exit); //指定test_exit为模块退出时卸载函数

MODULE_LICENSE("GPL"); //指定所支持的协议

MODULE_AUTHOR("作者");

MODULE_DESCRIPTION("描述");

MODULE_VERSION("版本");

#define __init __section(.init.text)

#define __initdata __section(.init.data)

char __initdata buf[] = "hello world";

#define __exitdata __section(.exit.data)

#define __exit __section(.exit.text)

/

modinfo test.ko 查看模块的信息

cat /proc/modules 查看当前系统的动态加载模块  相当于lsmod

test 1768 0 - Live 0xbf03c000

模块名, 使用的内存大小, 调用次数,  有效 , 模块所在的内存地址

ls /sys/module查看所有模块

3. 驱动模块的Makefile

obj-m  += test.o   //源码文件为test.c

modules:make -C 内核源码目录 M=驱动代码所在目录 modules

modules install:make -C 内核源码目录 M=驱动代码所在目录 modules_install      INSTALL_MOD_PATH=/文件系统路径

clean:make -C 内核源码目录 M=驱动代码所在目录 modules clean

4. 查看驱动输出的消息

cat /var/log/messages

tail /var/log/messages

5. printk的级别控制

/usr/src/kernels/2.6.18-194.el5-i686/include/linux/kernel.h

#define KERN_EMERG "<0>" /* system is unusable */

#define KERN_ALERT "<1>" /* action must be taken immediately */

#define KERN_CRIT "<2>" /* critical conditions */

#define KERN_ERR "<3>" /* error conditions */

#define KERN_WARNING "<4>" /* warning conditions */

#define KERN_NOTICE "<5>" /* normal but significant condition */

#define KERN_INFO "<6>" /* informational */

#define KERN_DEBUG "<7>" /* debug-level messages */

默认的级别为 KERN_WARNING "<4>"

使用 :printk(KERN_INFO"内容");

查看当前内核的输出级别 cat /proc/sys/kernel/printk

7       4       1       7

7:console_loglevel

4:default_message_loglevel

1:minimum_console_loglevel

7:default_console_loglevel

当printk函数使用的级别小于当前console_loglevel级别时, 则可以输出, 否则不输出

修改级别输出  echo 8 > /proc/sys/kernel/printk

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

linux驱动内核,Linux内核设备驱动之Linux内核基础笔记整理相关推荐

  1. Linux内核部件分析 设备驱动模型之driver ---mark 详细

    Linux内核部件分析 设备驱动模型之driver 转载:https://www.linuxidc.com/Linux/2011-10/44627p7.htm 上节我们分析设备驱动模型中的device ...

  2. linux内核led驱动开发,从Linux内核LED驱动来理解字符设备驱动开发流程

    目录 博客说明 开发环境 1. Linux字符设备驱动的组成 1.1 字符设备驱动模块加载与卸载函数 1.2 字符设备驱动的file_operations 结构体中的成员函数 2. 字符设备驱动--设 ...

  3. linux内核的块设备驱动框架详解

    1.块设备和字符设备的差异 (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位.大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作; (2)块设备对于 I/O 请求 ...

  4. [转载]Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)

    [转载]Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1) 2011年09月13日 可能把驱动模型放在第一章讲会会有点难度,但是只要能跨过这道坎,后面就会轻松很多,驱动模型是整个linux设备 ...

  5. linux i2c核心,总线与设备驱动,Linux2.6.37 I2C驱动框架分析(一)

    最近工作中又使用到了I2C,所以借S3C2440开发板GT2440为硬件平台温习一遍I2C驱动体系. linux内核中IIC驱动的体系框架 linux内核中IIC部分驱动代码位于:/drivers/i ...

  6. Linux 设备驱动篇之I2c设备驱动

    ******************************************************************************************** 装载声明:希望 ...

  7. Linux驱动开发:字符设备驱动开发实战

    Linux驱动开发:字符设备驱动开发实战 一.工程创建 VSCode 创建工程,设置 C/C++ 配置,导入 linux kernel 源码目录,方便 vscode 写代码自动补全,vscode 配置 ...

  8. 一起分析Linux系统设计思想——05字符设备驱动框架剖析(四)

    在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直 ...

  9. 【linux驱动分析】misc设备驱动

        misc设备驱动.又称混杂设备驱动. misc设备驱动共享一个设备驱动号MISC_MAJOR.它在include\linux\major.h中定义:         #define MISC_ ...

  10. Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

    一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...

最新文章

  1. 全球大数据发展分析报告
  2. 雷林鹏分享:PHP 数组
  3. c3074 无法使用带圆括号的_如何选择路面裂缝贴缝带?
  4. Hadoop源码分类概要整理
  5. C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1
  6. 腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声
  7. 【图论】二分图学习笔记
  8. Git(7)-- 查看提交历史(git log 命令详解)
  9. 2021-06-21属性选择器
  10. javafx给图形上颜色_红牛商标无效案:新欧盟商标条例下如何满足颜色商标注册条件?...
  11. asp.net中获取远端WEB页内容
  12. mysql explain 派生表_MySQL explain 查询计划结果集学习笔记
  13. PLC编程入门:梯形图
  14. 科比:你知道洛杉矶每天早上四点钟是什么样子吗?
  15. 这4大场景正被区块链“残忍屠杀”,15个活生生的例子了解一下?
  16. Linux启动时卡住
  17. 乌班图好玩的命令_Ubuntu实用命令大全
  18. [转载]17岁高考落榜生成为世界顶尖IT高手
  19. 普通话计算机辅助测试作品5号,普通话测试朗读作品范文《作品5号》
  20. 两个手机靠近,唤起应用如微信(需打开NFC)

热门文章

  1. MyBatis实体属性与表的字段不对应的解决方案
  2. ssh 远程登陆异常SSH_EXCHANGE_IDENTIFICATION及解决过程
  3. 使用webpack-dev-server设置反向代理解决前端跨域问题
  4. 解决teamviewer试用期到期的方法
  5. 如何使用LocalDateTime解析/格式化日期? (Java 8)
  6. 科创板7天受理28家公司,但后者“含金量”备受质疑
  7. 提供企业研发管理解决方案,ONES获600万美元A+轮融资,华创资本领投
  8. 区块链:这项颠覆性技术将如何改变未来
  9. Android标题栏,状态栏
  10. 直接拿来用!最火的iOS开源项目(二)