这个问题真心是处理了一个下午,还自己去下载了个最新的内核拿来编译,其实是完全没必要的,因为ubuntu系统是可以直接下载新内核的。

你可以在/usr/src/文件夹下找到这些内核文件夹,比如说我自己的系统:

写博客的时候使用的是3.13.0-19的内核。

写一个hello.c的测试文件:

 #include <linux/kernel.h> /*Needed by all modules*/
#include <linux/module.h> /*Needed for KERN_* */
#include <linux/init.h> /* Needed for the macros */ MODULE_LICENSE("GPL"); static int year=; static int hello_init(void)
{
printk(KERN_WARNING "Hello kernel, it's %d!\n",year);
return ;
} static void hello_exit(void)
{
printk("Bye, kernel!\n");
} /* main module function*/
module_init(hello_init);
module_exit(hello_exit);

然后用kbuild标准写一个Makefile文件:

 obj-m := hello.o

 all :
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

obj-m := name.o表示会编译一个模块(-m),生成的name.o文件来自于name.c文件。

uname -r 命令返回的实际就是你现在使用的内核版本,比如说我的系统:

所以-C选项后面完整的路径是:/lib/modules/3.13.0-19-generic/build,但是不建议给出具体的路径,而是用$(shell uname -r)这种可变的路径,这样,当你在低版本内核中编译过,拿到高版本内核中再次编译的时候也能正常通过。

编译完成之后能够看到模块文件:
$sudo insmod ./hello.ko #加载
$sudo rmmod hello #删除 或者 sudo rmmod ./hello.ko 

如果是要在Eclipse中开发也是差不多的,不过有些地方要作修改,一是项目中Path and symbol那里似乎要添加内核的include文件夹,然后在symbol选项卡中需添加__MODULE__。

还有,要关闭当前项目的makefile自动生成功能。

如果你想要Eclipse集成环境来开发的话,选工程的时候请选Makefile project。自己写Makefile。

其它都是差不多的,网上写的那些乱七八糟的又复杂又报错,真特么是各种坑爹。

参考文档:

http://www.cnblogs.com/QuLory/archive/2012/10/23/2736339.html

<linux/init.h>,<linux/module.h>头文件不存在等问题的解决方法的更多相关文章

  1. linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

    原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...

  2. 配置apue的头文件apue.h和unp的头文件anp.h

    配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...

  3. 用c#读取文件内容中文是乱码的解决方法:

    用c#读取文件内容中文是乱码的解决方法: //方法1: StreamReader din = new StreamReader(@"C:\1.txt", System.Text.E ...

  4. 关于真机调试DDMS中的data文件夹打不开的解决方法

    关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...

  5. jQuery之JSP加载JS文件不起作用的有效解决方法

    JSP加载JS文件不起作用的有效解决方法 作者: 字体:[增加 减小] 类型:转载 时间:2014-04-08 jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文 ...

  6. win7 创建vhd提示“找不到指定文件的虚拟磁盘支持提供程序”解决方法

    本文参照:https://itbbs.pconline.com.cn/diy/16509116_2.html 14楼中"坚持不放弃"用户的答案得到解决 问题复现: 1.window ...

  7. Module 'mysql' already loaded in Unknown on line 0解决方法

    Module 'mysql' already loaded in Unknown on line 0解决方法 直接进入php.ini 把;extension=mysql.so注释掉就好了

  8. VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法

    VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法 摘自: http://www.xitongcheng.com/jiaocheng/xtazjc_article_40299.html 发布时 ...

  9. Linux C 一些函数 所属的头文件

    在编写程序时,有时总是不记得所使用的函数在哪个库函数中.现在先把自己以前经常用到的函数头文件总结一下. 有不对的地方还请指教. 1,系统调用文件的操作函数 #inlclude <fcntl.h& ...

随机推荐

  1. python3个人习惯的gitignore

    简介 就是普通的.gitignore # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C ext ...

  2. JavaMath方法、服务器与Tomcat安装与配置步骤

    一.Math Math.PI 记录的圆周率  Math.E 记录e的常量  Math中还有一些类似的常量,都是一些工程数学常用量. Math.abs 求绝对值  Math.sin 正弦函数 Math. ...

  3. Oracle Schema Objects——Tables——Oracle Data Types

    Oracle Schema Objects Oracle Data Types 数据类型 Data Type Description NUMBER(P,S) Number value having a ...

  4. 联合约束 CONCAT()

    w SELECT 原理. SELECT * FROM wz WHERE CONCAT(wint,wchar) NOT IN (SELECT CONCAT(wint,wchar) FROM wa); S ...

  5. 随笔 javascript-抽象工厂模式

    随笔   javascript-抽象工厂模式 抽象工厂模式笔记   1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)   2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽 ...

  6. Storm编程模型及组件流程图

    一.Storm编程模型 二.Storm组件流程图

  7. 使用LoadRunner的Web(HTTP/HTML)协议录制手机app脚本

    一.打开HP Virtual User Generator,创建虚拟用户脚本,选择Web(HTTP/HTML)协议:

  8. 进程Process之join、daemon(守护)、terminate(关闭)

    一.Process 参数介绍: 1 group参数未使用,值始终为None 2 target表示调用对象,即子进程要执行的任务 3 args表示调用对象的位置参数元组,args=(1,2,'a',) ...

  9. git 的 pull、fetch、merge

    1.pull = fetch + merge In the simplest terms, git pull does a git fetch followed by a git merge. You ...

  10. 现有mysql加入redis

    spring-dao.xml(注意这里必须加上ignore-unresolvedable): redis.properties: redis.hostname=192.168.1.3 redis.po ...