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

 static int hello_init()
{
printk(“hello,I am in kernel now\n”);
return ;
}
void addfunc(int a,int b)
{return a+b;}
static void hello_exit()
{
printk(“hello ,I will leave the kernel now\n”);
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE(“GPL”);

Makefile文件:

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

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

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

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

 obj-m:=hello.o
KDIR:=/lib/modules/`uname -r`/build
PWD:=$(`pwd`)
all:
$(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::: 错误: expected declaration specifiers or ‘...’ before string constant ,网上说可能是因为代码里面含有中文格式,可我在VIM下重新码了一遍那个错误还是不消失啊,所以干脆把这行开放源码许可给删了,编译通过~~~~

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

 #include <linux/kernel.h>
static int hello_init(void )
{
printk("hello,I am in kernel now\n");
return ;
} int addfunc(int a, int b)
{ return (a+b); } static void hello_exit(void )
{
printk("hello, I will leave the kernal now\n");
}
module_init(hello_init);
module_exit(hello_exit);
 obj-m:=hello.o
KDIR:=/lib/modules/`uname -r`/build
PWD:=`pwd`
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

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

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

    看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web ...

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

    人们似乎觉得编写垃圾回收机制是非常难的,是一种仅仅有少数智者和Hans Boehm(et al)才干理解的高深魔法.我觉得编写垃圾回收最难的地方就是内存分配,这和阅读K&R所写的malloc例 ...

  3. 如何编写一个简单的Linux驱动(二)——完善设备驱动

    前期知识 1.如何编写一个简单的Linux驱动(一)——驱动的基本框架 2.如何编写一个简单的Linux驱动(二)——设备操作集file_operations 前言 在上一篇文章中,我们编写设备驱动遇 ...

  4. 使用CEF(二)— 基于VS2019编写一个简单CEF样例

    使用CEF(二)- 基于VS2019编写一个简单CEF样例 在这一节中,本人将会在Windows下使用VS2019创建一个空白的C++Windows Desktop Application项目,逐步进 ...

  5. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  6. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  7. 编写一个简单的Web Server

    编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...

  8. javascript编写一个简单的编译器(理解抽象语法树AST)

    javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...

  9. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

随机推荐

  1. PHP中使用raw格式发送POST请求

    如果请求的参数格式是原生(raw)的内容,应该如何为程序构造一个POST请求函数呢? function http_post($url, $data_string) { $ch = curl_init( ...

  2. Cocos2d之运行Test项目

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 打开Test项目 路径为   C:\Dev\cocos2d-x-3.8.1\build 2.设定cpp-tests为启动项(当cpp ...

  3. 字母所对应的Unicode编码

    A~Z                65~90 a~z                 97~122 public class Unicode { public static void main(S ...

  4. redis的一些特性

    Redis内存回收 Redis复制原理 Redis提供的高可用方案 Redis提供的分片算法 Redis迁移

  5. enovia plm export to sap

    UPC creation UPC 结构 PLM 使用的UPC 是 14个数字组成的,兼容. 前两位为 0,后12位为有效数字,在SAP中0会被忽略,符合国际UPC通用 规则, 前一位为0,后13 位为 ...

  6. 转。Nas配置。想找原版没找到,全是转载的,也没注出处,无语。

    随着家用宽带的不断提速和高清电影的普及外带单反的家庭占有率越来越搞,仅靠台式机里那几块硬盘越来越不够用了. 简单的计算了一下,家里的台式机上2T的容量(1T+640G+320G)已经接近于80%满,外 ...

  7. AtomicInteger 、Synchronized 和 volatile 之间的区别?

    AtomicInteger:无锁的线程安全整数??? Synchronized:同步 volatile:挥发性??? 参考文档:

  8. Java中的Set集合以及HashSet

    Set集合: Set继承自Collection,所以没有什么特别的方法. 需要注意的是,Set集合不包含重复元素,我们重点了解Set集合如何保证不包含多余元素. HashSet: HashSet如何保 ...

  9. png图标任意赋色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MySql5.7默认生成的密码无法正常登陆

    1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2.重启 mysqld 服务:sys ...