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

总结

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

相关文章

  • ubuntu 系统上为php加上redis 扩展的实现方法

    ubuntu 系统上为php加上redis 扩展的实现方法

    这篇文章主要介绍了ubuntu 系统上为php加上redis 扩展的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • windows下apache的简单命令

    windows下apache的简单命令

    这篇文章主要介绍了windows下apache的简单命令,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Linux磁盘空间占用率100%的排查方法

    Linux磁盘空间占用率100%的排查方法

    使用 Linux 操作系统时,可能会遇到磁盘空间不足的错误,这种错误通常会导致系统运行缓慢或崩溃,本文将介绍磁盘排查的方法,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Linux多线程环境下 关于进程线程终止函数总结

    Linux多线程环境下 关于进程线程终止函数总结

    下面小编就为大家带来一篇Linux多线程环境下 关于进程线程终止函数总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Ubuntu如何轻松编译openJDK详解

    Ubuntu如何轻松编译openJDK详解

    这篇文章主要给大家介绍了关于Ubuntu如何轻松编译openJDK的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • 关闭linux终端还让程序继续执行的实现方式

    关闭linux终端还让程序继续执行的实现方式

    这篇文章主要介绍了关闭linux终端还让程序继续执行的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • shiro缓存机实例代码

    shiro缓存机实例代码

    Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现
    2017-09-09
  • Linux命令行之使光标快速移动的快捷键

    Linux命令行之使光标快速移动的快捷键

    这篇文章主要介绍了Linux命令行之使光标快速移动的快捷键,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 浅谈Linux的编码及编码转换方法

    浅谈Linux的编码及编码转换方法

    下面小编就为大家分享一篇浅谈Linux的编码及编码转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Apache服务器关闭TRACE Method请求方式的方法

    Apache服务器关闭TRACE Method请求方式的方法

    这篇文章主要介绍了Apache服务器关闭TRACE Method请求方式的方法,因为支持该方式的服务器存在跨站脚本漏洞,需要的朋友可以参考下
    2014-06-06

最新评论