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文件删除后空间未释放问题详解

    Linux文件删除后空间未释放问题详解

    这篇文章主要给大家介绍了关于Linux文件删除后空间未释放问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Ubuntu Linux系统下轻松架设nginx+php服务器应用

    Ubuntu Linux系统下轻松架设nginx+php服务器应用

    一直一来,在Ubuntu Linux系统下调试php的web程序都是使用的apache+php+mysql的开发环境,近来看到网上大家都在讨论nginx架设的web服务器,据说性能比apache要高上十几倍。所以自己想也想尝尝鲜,在自己的电脑上先装一个体验一下!
    2009-08-08
  • Apache实现多端口多主机名配置

    Apache实现多端口多主机名配置

    这篇文章主要介绍了Apache实现多端口多主机名配置的相关资料,需要的朋友可以参考下
    2018-08-08
  • grub损坏,开机出现GRUB 2 启动提示符的解决方法

    grub损坏,开机出现GRUB 2 启动提示符的解决方法

    下面小编就为大家带来一篇grub损坏,开机出现GRUB 2 启动提示符的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 详解linux grep命令

    详解linux grep命令

    本篇文章主要介绍了linux grep命令,现在分享给大家,也给大家做个参考。正在学习的同学可以了解一下。
    2016-11-11
  • 详解linux 看门狗驱动编写

    详解linux 看门狗驱动编写

    本篇文章主要介绍了详解linux 看门狗驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • windows apache 无法启动的两种解决方法

    windows apache 无法启动的两种解决方法

    apache无法启动,查询了一些方法,说是更改端口,如果你还是无法启动。那就备份一下数据库,重装apache吧
    2014-09-09
  • win7安装xampp提示windows找不到-n文件(安装成功后,443端口占用,apache服务器无法正常启动)的解决方案

    win7安装xampp提示windows找不到-n文件(安装成功后,443端口占用

    这篇文章主要介绍了win7安装xampp提示windows找不到-n文件(安装成功后,443端口占用,apache服务器无法正常启动)的解决方案的相关资料,需要的朋友可以参考下
    2016-09-09
  • linux服务器下LNMP安装与配置方法

    linux服务器下LNMP安装与配置方法

    现在很多朋友都选择了linux服务器下配置LNMP(linux+nginx+mysql+php),这里分享下LNMP安装与配置方法,需要的朋友可以参考下
    2013-07-07
  • Linux文本处理工具使用详解

    Linux文本处理工具使用详解

    在本篇文章里小编给各位分享的是一篇关于Linux文本处理工具使用详解内容,有兴趣的朋友们可以学习下。
    2020-03-03

最新评论