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);//跟上面的宏对立
【什么是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经过了上面两个步骤 , 我们然后编译加载然后卸载我们的模块进行试验 。编译:

文章插图
加载:

文章插图
查看:

文章插图
卸载:

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

文章插图
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 //调试级别的消息
文章插图
今天的内容比较简单 , 只是对内核模块有了一个初步的了解 , 所以我今天在给大家推荐一个比较好用的工具 , 叫做exvim其将好多vim的工具进行了集成 , 个人感觉十分方便 , 就是换电脑什么的也不怕自己的配置丢失了 。贴一张自己使用的图 , 大家有兴趣的可以去http://exvim.github.io/ 了解 。
推荐阅读
- 新买的移动硬盘该格式化为 NTFS 还是 exFAT?
- 红烧鲤鱼的做法
- 姜葱炒花蟹的做法
- 红茶种类普洱,普洱是什么红茶吗
- 比较好的红茶种类,三红茶的作用
- 中国最早的是红茶,红茶的种类和图片大全
- 印度红茶种类哪些,红茶茶属于什么种类
- 卧室家具布局的重点是什么
- 指猴生活习性介绍
- 栅格加工的工艺流程是什么
