linux驱动内核,Linux内核设备驱动之Linux内核基础笔记整理
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内核基础笔记整理相关推荐
- Linux内核部件分析 设备驱动模型之driver ---mark 详细
Linux内核部件分析 设备驱动模型之driver 转载:https://www.linuxidc.com/Linux/2011-10/44627p7.htm 上节我们分析设备驱动模型中的device ...
- linux内核led驱动开发,从Linux内核LED驱动来理解字符设备驱动开发流程
目录 博客说明 开发环境 1. Linux字符设备驱动的组成 1.1 字符设备驱动模块加载与卸载函数 1.2 字符设备驱动的file_operations 结构体中的成员函数 2. 字符设备驱动--设 ...
- linux内核的块设备驱动框架详解
1.块设备和字符设备的差异 (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位.大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作; (2)块设备对于 I/O 请求 ...
- [转载]Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)
[转载]Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1) 2011年09月13日 可能把驱动模型放在第一章讲会会有点难度,但是只要能跨过这道坎,后面就会轻松很多,驱动模型是整个linux设备 ...
- linux i2c核心,总线与设备驱动,Linux2.6.37 I2C驱动框架分析(一)
最近工作中又使用到了I2C,所以借S3C2440开发板GT2440为硬件平台温习一遍I2C驱动体系. linux内核中IIC驱动的体系框架 linux内核中IIC部分驱动代码位于:/drivers/i ...
- Linux 设备驱动篇之I2c设备驱动
******************************************************************************************** 装载声明:希望 ...
- Linux驱动开发:字符设备驱动开发实战
Linux驱动开发:字符设备驱动开发实战 一.工程创建 VSCode 创建工程,设置 C/C++ 配置,导入 linux kernel 源码目录,方便 vscode 写代码自动补全,vscode 配置 ...
- 一起分析Linux系统设计思想——05字符设备驱动框架剖析(四)
在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直 ...
- 【linux驱动分析】misc设备驱动
misc设备驱动.又称混杂设备驱动. misc设备驱动共享一个设备驱动号MISC_MAJOR.它在include\linux\major.h中定义: #define MISC_ ...
- Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)
一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...
最新文章
- 全球大数据发展分析报告
- 雷林鹏分享:PHP 数组
- c3074 无法使用带圆括号的_如何选择路面裂缝贴缝带?
- Hadoop源码分类概要整理
- C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1
- 腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声
- 【图论】二分图学习笔记
- Git(7)-- 查看提交历史(git log 命令详解)
- 2021-06-21属性选择器
- javafx给图形上颜色_红牛商标无效案:新欧盟商标条例下如何满足颜色商标注册条件?...
- asp.net中获取远端WEB页内容
- mysql explain 派生表_MySQL explain 查询计划结果集学习笔记
- PLC编程入门:梯形图
- 科比:你知道洛杉矶每天早上四点钟是什么样子吗?
- 这4大场景正被区块链“残忍屠杀”,15个活生生的例子了解一下?
- Linux启动时卡住
- 乌班图好玩的命令_Ubuntu实用命令大全
- [转载]17岁高考落榜生成为世界顶尖IT高手
- 普通话计算机辅助测试作品5号,普通话测试朗读作品范文《作品5号》
- 两个手机靠近,唤起应用如微信(需打开NFC)
热门文章
- MyBatis实体属性与表的字段不对应的解决方案
- ssh 远程登陆异常SSH_EXCHANGE_IDENTIFICATION及解决过程
- 使用webpack-dev-server设置反向代理解决前端跨域问题
- 解决teamviewer试用期到期的方法
- 如何使用LocalDateTime解析/格式化日期? (Java 8)
- 科创板7天受理28家公司,但后者“含金量”备受质疑
- 提供企业研发管理解决方案,ONES获600万美元A+轮融资,华创资本领投
- 区块链:这项颠覆性技术将如何改变未来
- Android标题栏,状态栏
- 直接拿来用!最火的iOS开源项目(二)