博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的第一个内核模块和makefile文件编写
阅读量:4104 次
发布时间:2019-05-25

本文共 1799 字,大约阅读时间需要 5 分钟。

      相信很多做过内核编程的人都写过makefile,虽然之前写过一些简单的内核模块写过makefile,到今天想要写一个内核模块的时候发现之前学的的已经全部忘记了。而且之前写的时候也没有写一些博客什么的记录下来。Orz….

      言归正传,Makefile这个文件还是真的不好写。相信你跟我一样之前编程的时候为了图好看的代码风格,敲了很多很多的空格,基本上逢符号必空格。今天在写makefile时候,写完了,一make,各种错误弹出来。顿时知道真相的我眼泪掉下来,而且这个错误还跟我们写c程序错误不一样,基本上都是一些什么什么文件错误,什么什么文件不存在了。
先贴出来我的makefile。

#makefile file                                                                                                                                         obj-m := kernelhello.oCURRENT_PATH:=$(shell pwd)LINUX_KERNEL:=$(shell uname -r)LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)all:        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modulesclean:        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
再看看我的.c文件
#include 
#include
#include
static int __init lkp_init(void){ printk("<1>hello world! from the kernel space...\n"); return 0;}static void __exit lkp_cleanup( void ){ printk("<2>Goodbye world! from the kernel space...\n");}module_init(lkp_init);module_exit(lkp_cleanup);MODULE_LICENSE("GPL");~

make以后

      经过多方查找资料,得出的结论就是M=XXX的=号后边不要写空格不要写空格不要写空格(重要的事说三边)!!!!M前面一定要打上空格,因为M之前是linux kernel的绝对路径,如果没有空格的话系统会直接把等号前面都看成是kernel的绝对路径(而实际上的绝对路径是比这个少一个最后的M字母的),of couse这个路径是错误的,没办法找到的。
      如果 obj-m := kernelhello.o中的obj-m的-两端写上了空格,则make完了以后只有 modules.order Module.symvers这两个文件,其他的没有。
      最后终于make出来了一个kernelhello.ko文件,(从这里开始操作都要是超级用户)用insmod kernelhello.ko命令插入模块,用lsmod命令可以查找模块是否已经插入到内核中去。最后用dmesg打印出buffer中的信息,最后一行就可以看见自己写的hello。移除模块的命令是rmmod kernelhello。
      模块常用的宏:
MODULE_AUTHOR(“”); 模块作者
MODULE_DESCRIPTION(“”); 模块描述
MODULE_ALIAS(“”); 模块别名
      __init和__exit是属性 —— 联结到函数(或者变量)的元数据片。属性在用户空间的C代码中是很罕见的,但是内核中却很普遍。所有标记为__init的,会在初始化后释放内存以供重用(还记得那条过去内核的那条“Freeing unused kernel memory…[释放未使用的内核内存……]”信息吗?)。__exit表明,当代码被静态构建进内核时,该函数可以安全地优化了,不需要清理收尾。

你可能感兴趣的文章
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
假如计算机是中国人发明的,那代码应该这么写
查看>>
触目惊心:比特币到底消耗了多少能源?
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
4 岁小女孩给 Linux 内核贡献提交
查看>>
推荐几个私藏很久的技术公众号给大家
查看>>
王垠受邀面试阿里 P9,被 P10 面跪后网上怒发文,惨打 325 的 P10 赵海平回应了!...
查看>>
Python 趣味打怪:147 段简单代码助你从入门到大师
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>