编译第一个内核模块的悲惨经历

今天编译自己的第一个内核模块但是出现错误,结果如下:

而我的Makefile 和C文件是这样的:

开始的时候,我以为是Makefile写错了,尤其是“obj-m :=”,这个我改了好几遍,网上的各种写法都用过,比如:

obj-m :=memdev.o                        #要生成的模块名

memdevmodule-objs:=module               #生成这个模块名所需要的目标文件

使用之后编译结果还是错误,找了别人写的被确认正确的Makefile和C文件,同样不能编译成功!到最后没有办法,我把内核重新编译了一下,重新生成vmlinuz,和initramfs文件,这是新生成的文件:

花了接近两个小时,编译好这两个文件之后,连内核都换了,总可以了吧,但是事实是,但是无法生成.ko文件。心情无比悲伤。突然想到有V=1,看详细编译过程:

好吧,终于找到原因了,但是进入内核中ls一下,文件可以找到:

刚开始以为只是自己的虚拟机配置出现问题,在别人那找了一份vmlinuz和initramfs文件,重新启动虚拟机,悲剧的是还是出现问题。好吧,真的是找不到问题了,准备删除这个虚拟机,纯新安装一个。

没有想到第一次编译内核模块就是这种悲惨的经历,同时我也有一个问题,既然自己写的简单模块无法编译,但是官网下载的内核代码又为什么可以编译出bzImage 和modules文件呢?

驱动学习之路还是漫长呀,重新装个虚拟机,再来编译吧!

时间: 2024-11-08 17:06:39

编译第一个内核模块的悲惨经历的相关文章

至Linux-2.6.32编译内核ipset-6.23坎坷的经历

新的版本号ipset 上周,一名医生在儿童医院等待一段差距叫做数量.接受NetfilterPush信息的邮件列表,列表ipset最新6.23版本号的新功能,非常喜欢我现在需要的是,特别是timeout和skbinfo支持参数,欲了解更多详情,请参阅自己manual,假设不想看那么多,我这里简单的贴一下:    timeout       All  set  types  supports the optional timeout parameter when creating a set and

APP反编译第一课《如何找到核心代码》

相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧.第一步,反编译需要的工具有:一.java环境,其实这里你只要安装了burp就不用管这个的二.apktool工具三.dex2jar工具四.sublime工具:Sublime Text 是一款流行的代码编辑器软件,也是HTML和散文先进的文本编辑器,可运行在Linux,Windows和Mac OS X.五.jd-gui.exe工具首先我们来看看 Apk 文件的结构: META-INF:签名文件(这个

二、编译第一步 make xxx_defconfig

2.1 顶层make defconfig规则 make xxx_defconfig 的执行主要分成三个部分: 执行 make -f ./scripts/Makefile.build obj=scripts/basic,编译生成 scripts/basic/fixdep 工具 执行 make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfig 编译生成 scripts/kconfig/conf 工具 执行 scri

第一个内核模块

hello.c #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h> int init_module(){ printk("<1>hello world!\n"); return 0; } void cleanup_module(){ printk("<1>godbye"); } MODULE_LICENSE(&qu

类型构造器-记一次悲惨经历,论我是如何用静态构造器来作死的

在写一个wp的论坛程序时,我定义了几个类.一个是管理类(即Manager),这个管理类不能被实例化,它管理着论坛的板块类型(PlateCategory)和板块(Plate)的集合,即 static PlatesManager() {       //…    private static ObservableCollection<PlateCategory> PlateCategories;         private static ObservableCollection<Plat

kali 安装最新firefox的悲惨经历

最新的的firefox用的是量子内核,在windows上面的确感觉相比之前的firefox快了好多 想把kali 2017虚拟机的也替换掉 按照步骤: 1 添加源: /etc/apt/sources.list deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main 2 添加认证 apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C12

linux内核模块编译makefile

linux内核可加载模块的makefile 在开发linux内核驱动时,免不了要接触到makefile的编写和修改,尽管网上的makefile模板一大堆,做一些简单的修改就能用到自己的项目上,但是,对于这些基础的东西,更应该做到知其然并知其所以然. 本篇文章中只讨论linux内核模块编译的makefile,linux内核makefile总览可以参考另一篇博客:linux内核makefile概览 本篇博客参考官方文档. linux内核使用的是kbuild编译系统,在编译可加载模块时,其makefi

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3  RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口.PM(Process Management)进程管理.MM(Memory Managem

【转】APUE学习1:迈出第一步,编译myls.c

原文网址:http://blog.csdn.net/sddzycnqjn/article/details/7252444 注:以下写作风格均学习自潘云登前辈 /******************************************************************/   By:             聂强 Date:          2012-2-12 Email:         [email protected] Homepage: http://blog.c