Chinaunix首页 | 论坛 | 博客
  • 博客访问: 256567
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 07:45
个人简介

生活就像海洋,只有意志坚强的人,才能到达彼岸。

文章存档

2013年(52)

分类: LINUX

2013-05-13 17:52:56

1、什么是内核模块?

答:内核模块式一种机制:能让内核文件(zImage 或 bzImage)本身不包含某个组件,而是在该组件需要被使用时候,动态添加到正在运行的内核中。

2、内核模块特点

    模块本身并不被编译进内核文件(zImage或者bzImage)。
    可以根据需要,在内核运行期间动态的安装或卸载。

3、程序结构
    1、模块加载函数(必需)
        安装模块时被系统调用的函数,通过module_init宏来指定。
    2、模块卸载函数(必需)
        卸载时被系统自动调用的函数,通过module_exit宏来指定。

4、模块的编译

5、安装与卸载
    加载 insmod    卸载 rmmod   查看  lsmod   
    加载modprobe   区别insmod   在于它会根据文件 /lib/module/< $version >/modules.dep    来查看要加载的模块,看是否还要依赖其他的模块,如果是,modprobe会首先找到这些依赖模块,把她们首先加载到内核。

6、模块可选信息
    1、许可证    MODULE_LICENSE("xxx")

    2、模块申明    MODULE_AUTHOR("XXX")

    3、模块描述      MODULE_DESCRIPTION("XXX")

   4、模块版本      MODULE_VERSION("XXX")

   5、模块别名    MODULE_ALIAS("XXX")

7、模块参数
    通过module_param指定模块参数,模块参数用于加载模块时传递参数给模块module_param(name,type,perm)
    name是模块参数的名称,type是这个参数的类型;
    perm是模块参数的访问权限;
    type常见值:
            bool;int;charp;
    perm常见值:
            S_IRUGO    
            S_IWUSR    
   内核符号导出/pro/kallsyms   记录了内核中所导出符号的名字和地址   EXPORT_SYMBOL().

8、常见问题:版本不匹配
               解决方法
                    1、使用modprobe --force -modversion强行插入
                    2、确保百年一遇内核模块时,所以赖的内核代码版本等同于当前正在运行的内核,通过uname     -r  查看当前正运行的内核模块。
9、内核打印优先级

    KERN_EMERG     "<0>"  用于紧急消息,常常是那些奔溃前的消息
    KERN_ALERT      "<1>"需要立刻行动的i消息
    KERN_CRIT        "<2>"严重情况
    KERN_ERR         "<3>"错误情况
    KERN_WARNING "<4>"有问题的警告
    KERN_NOTICE    "<5>"正常情况,但是仍然值得注意
    KERN_INFO        "<6>"信息型消息
    KERN_DEBUG     "<7>"用作调试信息

控制台优先级配置

/proc/sys/kernel/printk

6  4  1  7
Console_loglevel
Sdfault_message_loglevel
Minimum_console_level
Default_console_loglevel










阅读(2028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~