Linux内核设备驱动之Linux内核基础笔记整理
1.Linux内核驱动模块机制
静态加载,把驱动模块编进内核,在内核启动时加载
动态加载,把驱动模块编为ko,在内核启动后,需要用时加载
2.编写内核驱动
#include#include staticint__inittest_init(void) { return0;//返回0表示成功,返加负数退出加载模块 } //__init当内核把驱动初始化完后,释放此函数的代码指令空间 staticvoid__exittest_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__initdatabuf[]="helloworld"; #define__exitdata__section(.exit.data) #define__exit__section(.exit.text) /////////////
modinfotest.ko查看模块的信息
cat/proc/modules查看当前系统的动态加载模块 相当于lsmod
test17680-Live0xbf03c000
模块名,使用的内存大小,调用次数, 有效,模块所在的内存地址
ls/sys/module查看所有模块
3.驱动模块的Makefile
- obj-m +=test.o //源码文件为test.c
- modules:make-C内核源码目录M=驱动代码所在目录modules
- modulesinstall:make-C内核源码目录M=驱动代码所在目录modules_install INSTALL_MOD_PATH=/文件系统路径
- clean:make-C内核源码目录M=驱动代码所在目录modulesclean
4.查看驱动输出的消息
cat/var/log/messages tail/var/log/messages
5.printk的级别控制
/usr/src/kernels/2.6.18-194.el5-i686/include/linux/kernel.h
#defineKERN_EMERG"<0>"/*systemisunusable*/ #defineKERN_ALERT"<1>"/*actionmustbetakenimmediately*/ #defineKERN_CRIT"<2>"/*criticalconditions*/ #defineKERN_ERR"<3>"/*errorconditions*/ #defineKERN_WARNING"<4>"/*warningconditions*/ #defineKERN_NOTICE"<5>"/*normalbutsignificantcondition*/ #defineKERN_INFO"<6>"/*informational*/ #defineKERN_DEBUG"<7>"/*debug-levelmessages*/
默认的级别为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级别时,则可以输出,否则不输出
修改级别输出 echo8>/proc/sys/kernel/printk
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。