注册 登录
Linux公社论坛 返回首页

曾经的洒脱的个人空间 http://www.linuxidc.net/?10889 [收藏] [复制] [分享] [RSS]

日志

Linux内核模块开发

已有 1056 次阅读2013-1-6 18:37 |个人分类:linux笔记| 模块, Linux, 开发

一、内核模块具有如下特点
    • 模块本身并不被编译进内核文件(zImage或者bzImage)
    • 可以根据需求,在内核运行期间动态的安装或卸载。

二、内核模块的安装与卸载
    加载: insmod (insmod hello.ko)
    卸载: rmmod (rmmod hello)
    查看: lsmod 
    加载: modprobe (modprobe hello)
    modprobe 如同insmod, 也是加载一个模块到内核。它的不同之处在于它会根据文件/lib/modules/<$version>/modules.dep来查看要加载的模块, 看它是否还依赖于其他模块,如果是,

modprobe 会首先找到这些模块, 把它们先加载到内核

    对比应用程序,内核模块具有以下不同:
        应用程序是从头(main)到尾执行任务,执行结束后从内存中消失。内核模块则是先在内核中注册自己以便服

务于将来的某个请求,然后它的初始化函数结束,此时模块仍然存在于内核中,直到卸载函数被调用,模块才从内核中消失。

三、模块可选信息
    1、许可证申明
            宏MODULE_LICENSE用来告知内核, 该模块带有一个许可证,没有这样的说明,加载模块时内核会抱怨。有

效的许可证有"GPL“、"GPL v2"、"GPL and additional rights"、"Dual BSD/GPL"、"Dual MPL/GPL"和

"Proprietary"。

    2、作者申明(可选)
            MODULE_AUTHOR(“Simon Li");
    3、模块描述(可选)
            MODULE_DESCRIPTION("Hello World Module");
    4、模块版本(可选)
            MODULE_VERSION("V1.0");
    5、模块别名(可选)
            MODULE_ALIAS("a simple module");

    6、模块参数
            通过宏module_param指定模块参数,模块参数用于在加载模块时传递参数给模块。

            module_param(name,type,perm)
                name  是模块参数的名称,type是这个参数的类型,
                perm  是模块参数的访问权限。

                            perm 常见值:
                                S_IRUGO:任何用户都对/sys/module中出现的该参数具有读权限
                                S_IWUSR:允许root用户修改/sys/module中出现的该参数
                type    常见值:
                                       bool:  布尔型

                                       int:  整型

                                       charp:  字符串型

    7、内核符号导出

         /proc/kallsyms 记录了内核中所有导出的符号的名字与地址。

         内核符号的导出使用:
                EXPORT_SYMBOL(符号名)
                EXPORT_SYMBOL_GPL(符号名)
         其中EXPORT_SYMBOL_GPL只能用于包含GPL许可证的模块

    8、常见问题:版本不匹配

         解决方法:
            1、使用modprobe  --force-modversion 强行插入
            2、确保编译内核模块时,所依赖的内核代码版本等同于当前正在运行的内核。

        **可通过uname –r 察看当前运行的内核版本**

    9、内核打印

            没有指定优先级的printk默认使用DEFAULT_MESSAGE_LOGLEVEL优先级,它是一个在kernel/printk.c

中定义的整数。
 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

关注Linux公社官方微信,免费领取邀请码。

手机版|Linux公社(LinuxIDC.com)旗下网站【www.linuxidc.net】 ( 浙ICP备06018118号 )

GMT+8, 2018-12-13 16:13 , Processed in 0.033002 second(s), 10 queries , Wincache On.

Powered by Discuz! X 3.2

© 2010-2016 Comsenz Inc.

回顶部