Linux内核设备驱动之Linux内核基础笔记整理

 更新时间:2018年12月17日 09:16:12   作者:Engineer-Bruce_Yang  
今天小编就为大家分享一篇关于Linux内核设备驱动之Linux内核基础笔记整理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

1. Linux内核驱动模块机制

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

2. 编写内核驱动

#include <linux/module.h>
#include <linux/init.h>
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

<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下vim中文乱码的方法

    解决linux下vim中文乱码的方法

    在vim中编辑一个中文文本时,有时候看起来有乱码,以前都是修修补补的弄没有乱码了就不管了,这个问题一直都很困扰我。突然想到这个问题想把它给解决掉,在网上有很多这方面的资料,但是说得不是很到位,经过了一天的折腾并做了一些小测试终于搞定了。下面来一起看看吧。
    2016-12-12
  • linux usb摄像头设备信息查看方式

    linux usb摄像头设备信息查看方式

    这篇文章主要介绍了linux usb摄像头设备信息查看方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Linux用if判断目录是否存在实例方法

    Linux用if判断目录是否存在实例方法

    在本篇文章中小编给各位整理的是关于Linux如何使用if判断目录是否存在的相关内容,有需要的朋友们可以参考下。
    2020-03-03
  • linux下修改MAC地址问题解决方法

    linux下修改MAC地址问题解决方法

    在linux中,修改MAC地址(修改的MAC地址跟原来的地址不同),接下来为大家介绍下修改MAC地址时所遇到的问题,感兴趣的朋友可以参考下哈
    2013-04-04
  • Linux如何使用libudev获取USB设备VID及PID

    Linux如何使用libudev获取USB设备VID及PID

    这篇文章主要介绍了Linux如何使用libudev获取USB设备VID及PID,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • vsftpd配置虚拟用户登录的方法

    vsftpd配置虚拟用户登录的方法

    这篇文章主要介绍了vsftpd配置虚拟用户登录的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Ubuntu解决火狐浏览器无法同步书签的问题【推荐】

    Ubuntu解决火狐浏览器无法同步书签的问题【推荐】

    最近在ubuntu系统中使用自带的firefox浏览器,发现有写问题,添加书签功能无法使用,下面小编给大家带来了Ubuntu解决火狐浏览器无法同步书签的问题,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-06-06
  • 浅析Docker私有镜像库与阿里云对象存储 OSS

    浅析Docker私有镜像库与阿里云对象存储 OSS

    在本篇文章中我们给大家分享了关于Docker私有镜像库与阿里云对象存储 OSS的相关知识点内容,有需要的朋友们参考下。
    2018-09-09
  • Linux密码安全防护操作详解

    Linux密码安全防护操作详解

    这篇文章主要为大家详细介绍了一些Linux密码的安全防护操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 虚拟机中CentOS7设置固定IP地址的方法

    虚拟机中CentOS7设置固定IP地址的方法

    这篇文章主要介绍了虚拟机中CentOS7设置固定IP地址的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论