什么是linux内核?linux内核模块是什么?内核模块详解( 二 )


1. 内核模块编写
通过上面部分内容的介绍 , 要完成第一个内核模块不是很难 , 下面是自己的代码 。

  1. 1 #include<linux/init.h> 2 #include<linux/module.h> 3 MODULE_LICENSE("GPL"); 4 staticint hello_init(void) 5 { 6 printk("<0> hello worldn"); 7 return0; 8 } 9 staticvoid hello_exit(void) 10 { 11 printk("<0> goodbyen"); 12 } 13 module_init(hello_init);//该宏在模块的目标代码中增加一个特殊地段 , 用于说明内核初始化函数所在的位置 14 module_exit(hello_exit);//跟上面的宏对立
2. Makefile编写
【什么是linux内核?linux内核模块是什么?内核模块详解】Makefile的编写也比较简单 , 要注意的地方代码中已经说明 。
1 obj-m := hello.o2 DIRS :=/smbshare/linux-2.6.39///此处路径为内核源码路径 , 该内核源码必须要经过编译 , 不然会报错3 all:4 make -C $(DIRS) M=$(PWD) modules5 clean:6 rm -Rf*.o *.ko *.mod.c *.order *.symvers经过了上面两个步骤 , 我们然后编译加载然后卸载我们的模块进行试验 。
编译:
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
加载:
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
查看:
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
卸载:
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
3. Printk函数简介
printk函数为内核打印函数 , 其和printf函数功能类似 , 不过比printf多了打印权限一共有8个级别 , printk的日志级别定义如下(在include/linux/kernel.h中):
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
1 #define KERN_EMERG 0 //紧急事件消息 , 系统崩溃之前提示 , 表示系统不可用2 #define KERN_ALERT1 //报告消息 , 表示必须立即采取措施3 #define KERN_CRIT2 //临界条件 , 通常涉及严重的硬件或软件操作失败4 #define KERN_ERR3 //错误条件 , 驱动程序常用KERN_ERR来报告硬件的错误5 #define KERN_WARNING4 //警告条件 , 对可能出现问题的情况进行警告6 #define KERN_NOTICE 5 //正常但又重要的条件 , 用于提醒7 #define KERN_INFO 6//提示信息 , 如驱动程序启动时 , 打印硬件信息8 #define KERN_DEBUG 7 //调试级别的消息
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
今天的内容比较简单 , 只是对内核模块有了一个初步的了解 , 所以我今天在给大家推荐一个比较好用的工具 , 叫做exvim其将好多vim的工具进行了集成 , 个人感觉十分方便 , 就是换电脑什么的也不怕自己的配置丢失了 。贴一张自己使用的图 , 大家有兴趣的可以去http://exvim.github.io/ 了解 。




推荐阅读