编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.0-32-generic/bulid: 没有那个文件或目录。 停止。”

编写一个简单的内核驱动模块

 1 static int hello_init()
 2 {
 3     printk(“hello,I am in kernel now\n”);
 4     return 0;
 5 }
 6 void addfunc(int a,int b)
 7 {return a+b;}
 8 static void hello_exit()
 9 {
10     printk(“hello ,I will leave the kernel now\n”);
11 }
12 module_init(hello_init);
13 module_exit(hello_exit);
14 MODULE_LICENSE(“GPL”);

Makefile文件:

1 obj-m := hello.o
2 KDIR := /lib/modules/$(shell uname –r)/build
3 PWD := $(shell pwd)
4 all:
5     $(MAKE) –C $(KDIR) SUBDIRS=$(PWD) modules 

报错 “/lib/modules/3.13.0-32-generic/bulid: 没有那个文件或目录。 停止。”

网上车了一下说是没安装内核安装包(类似于kernel-devel的名字)或者是链接出错,但问题是,我的内核安装包有,链接也没问题,可他就是报错。

后来对比了我之前的Makefile文件,然后改动一下:

1 obj-m:=hello.o
2 KDIR:=/lib/modules/`uname -r`/build
3 PWD:=$(`pwd`)
4 all:
5         $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

然后就可以了。。。。。。。。。。

编译结果如下:

又报错"没有规则可以创建“arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h”需要的目标“/usr/src/linux-headers-3.13.0-32-generic/arch/x86/syscalls/syscall_32.tbl”。 停止。"

好吧,其实还是Makefile的锅,注意看第三行 PWD:=$(`pwd`) ,应该改成 PWD:=`pwd`

再次编译,没错,还是报错,但这次不是Makefile的锅啦~

报错信息"错误: 函数声明不是一个原型 [-Werror=strict-prototypes]"

简单,你在那些无参函数的参数列表里填上"void "就好啦~

最后老师在 MODULE_LICENSE("GPL"); 那里报错: /home/branches/chenyue/modules/hello.c:17:16: 错误: expected declaration specifiers or ‘...’ before string constant ,网上说可能是因为代码里面含有中文格式,可我在VIM下重新码了一遍那个错误还是不消失啊,所以干脆把这行开放源码许可给删了,编译通过~~~~

所以,最后的源文件跟Makefile:

 1 #include <linux/kernel.h>
 2 static int hello_init(void )
 3 {
 4         printk("hello,I am in kernel now\n");
 5         return 0;
 6 }
 7
 8 int addfunc(int a, int b)
 9 {       return (a+b); }
10
11 static void hello_exit(void )
12 {
13         printk("hello, I will leave the kernal now\n");
14 }
15 module_init(hello_init);
16 module_exit(hello_exit);
1 obj-m:=hello.o
2 KDIR:=/lib/modules/`uname -r`/build
3 PWD:=`pwd`
4 all:
5         $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
时间: 2024-10-01 21:38:21

编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.0-32-generic/bulid: 没有那个文件或目录。 停止。”的相关文章

手把手教你编写一个简单的PHP模块形态的后门

看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web server端的script语言.目前很多web应用程序都基于php语言实现.由于php是个开源软件并易于扩展,所以我们可以通过编写一个PHP模块(module 或者叫扩展 extension)来实现一个Backdoor. 本文就简单介下如何一步步编写一个简单的php 动态扩展后门. 0×01. p

用 C 语言编写一个简单的垃圾回收器

人们似乎认为编写垃圾回收机制是很难的,是一种只有少数智者和Hans Boehm(et al)才能理解的高深魔法.我认为编写垃圾回收最难的地方就是内存分配,这和阅读K&R所写的malloc样例难度是相当的. 在开始之前有一些重要的事情需要说明一下:第一,我们所写的代码是基于Linux Kernel的,注意是Linux Kernel而不是GNU/Linux.第二,我们的代码是32bit的.第三,请不要直接使用这些代码.我并不保证这些代码完全正确,可能其中有一些我 还未发现的小的bug,但是整体思路仍

【C++】编写一个简单的类。包含构造函数,成员函数等。

<pre name="code" class="cpp">//编写一个简单的类.包含构造函数,成员函数等. #include <iostream> using namespace std; class Rec { public: Rec(int l,int w); int Area(); void Print(); private: int length,wide; }; Rec::Rec(int l,int w) { length=l; w

【C++】编写一个简单的函数实现重载。

//编写一个简单的函数实现重载. #include <iostream> using namespace std; int max(int a,int b) { return a>b?a:b; } int max(int a,int b,int c) { int x=max(a,b); return max(x,c); } double max(double a,double b) { return a>b?a:b; } int main() { cout<<"

编写一个简单的jdbc例子程序

1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class Base { 10 11 public static void main(String[] args) th

编写一个简单的javaEE加法程序

一 .javaEE的安装及环境配置 工具: 32位系统准备eclipse-jee-mars-2-win32.zip,64位系统准备eclipse-jee-mars-2-win32-x86_64.zip jdk1.7 maven3.3.9.rar m2.rar 环境配置: 1. 设置eclipse的配置文件eclipse.ini,修改虚拟机路径,在-vmargs之前添加 -vm E:\jee\jdk1.7\bin\javaw.exe 注意:用写字板打开修改,-vm有的电脑要换行,有的电脑不用换行

Swift语言编写一个简单的条形码扫描APP

swift语言编写一个简单的条形码扫描APP 原文地址:appcoda 在处理职员在杂货店的收银台排了很长的队伍,在机场帮助检查背包和旅客,或者在主要的食品供应商,协助处理乏味的存货清单过程,条形码扫描是很简单的处理工具.实际上,他们已经用了这个办法来解决消费者在智能购物,图书分类,等其他目的.因此,让我们来制作一个iPhone版本的条形码扫描工具吧! 对我们来说幸运的是,苹果已经制作了条形码扫描的程序,实现它是一件很简单的事情.我们将要研究进入AV Foundation框架的世界,组建APP,

编写一个简单的Jquery插件

1.实现内容 定义一个简单的jquery插件,alert传递进来的参数 2.插件js文件(jquery.showplugin.js) (function ($) { //定义插件中的方法 var methods = { //Object showName: function (name) { alert('Name:' + name); }, showAge: function (age) { alert('Age' + age); } }; //method方法名 $.fn.showplugi

练习题,使用多线程编写一个简单的文本处理工具

一. 练习题要求: 编写一个简单的文本处理工具,具备三个任务,一个接收用户输入,一个将用户输入的内容格式化成大写,一个将格式化后的结果存入文件 二. 分析: 三个任务,那就是三个线程.分别的输入,转换,写入,这3个线程.那么写入的输入,其他线程怎么取出?我们可以使用Queue队列,把用户输入的字符写入到队列中,然后再进行转换.转换完成后,再写入到另外一个队列中.等待最后写入文件三.实现 1 from threading import Thread 2 from multiprocessing i