在看楼经典书籍《linux设备驱动程序》后,第一个程序就是编写一个hello word 模块。

原以为非常easy,真正弄起来,发现问题不少啊。前两天编过一次,因为没有记录,今天看的时候又忘了,所以无论多晚。都得记录一下。

1、首先说明一下我的系统环境:ubuntu 14.04,内核是3.13.0-29-generic

2、在我电脑里装了git版本号控制器。我clone了一个linux内核库在我的电脑上,所以我就能够随意的切换到随意的分支上去。最初是用的2.6.3,后来编译的时候遇到各种问题。google了一下,现将各位大神的解决方式链接一下:http://blog.csdn.net/sabalol/article/details/2076610

hello word代码:

  1 #include <linux/init.h>
2 #include <linux/module.h>
3
4 MODULE_LICENSE("Dual BSD/GPL");
5
6 static int hello_init(void)
7 {
8 printk(KERN_ALERT "Hello World enter\n");
9 return 0;
10 }
11
12 static void hello_exit(void)
13 {
14 printk(KERN_ALERT "Hello World exit\n");
15 }
16
17 module_init(hello_init);
18 module_exit(hello_exit);
19  
20 MODULE_AUTHOR("zhangjun");
21 MODULE_DESCRIPTION("A simple Hello World Module");
22 MODULE_ALIAS("a simple module");

Makefile代码:

 1 obj-m := hello.o
2 KERNEL :=/lib/modules/3.13.0-29-generic/build  
3 PWD :=$(shell pwd)
4 modules:
5 $(MAKE) -C $(KERNEL) M=$(PWD) modules
6
7 .PHONEY:clean
8 clean:
9 rm -f *.o *.ko

说明:请将KERNEL后面的“/lib/modules/3.13.0-29-generic/build” 改成与自己系统相匹配的路径

3、刚開始我没实用系而统自带的那个路径“/lib/modules/3.13.0-29-generic/build ”,而是自己的源码,它可以编译,可是载载入模块的时候会报insmod: error inserting 'hello.ko': Invalid module format这个错误。查的时候是说编译源码版本号和系统版本号不一样。后来我改成一样的。还是不正确。最后看到了这篇文章,可以说是解救楼我os.51cto.com/art/201108/287684.htm
,在此感谢这位仁兄。

然后将编译的源码路径改成系统自带的路径后,就大工告成了。

4、在ubuntu 终端载入的时候发现没有输出,,这让我非常郁闷。事实上这是由于桌面环境下的终端是模拟终端。仅仅能在字符终端以下才干显示输出。

假设在模拟终端下的话,它是把信息输出到“/var/log/kern.log“了(ps:ubuntu系统是这个文件夹。其它系统可能是/var/log/message“)。

5、我们要载入的时候可以看到输出就须要切换到字符界面下去。怎么切换?在ubuntu以下是crtl+alt+f2 或者f3。f4,f5,f6都行。

(ps:记得切换回桌面环境是alt+F7)

6、经常使用命令:查看自己内核版本号 uname -a

參考:blog.csdn.net/wwyyxx26/article/details/6325843

再给各位程序员点好东西:https://github.com/txthinking/google-hosts相信喜欢编程的你都喜欢上google。。fuckGWF。

linux设备驱动程序_hello word 模块编译各种问题集锦的更多相关文章

  1. Linux设备驱动程序学习----3.模块的编译和装载

    模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写 ...

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

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

  3. Linux设备驱动程序 第三版 读书笔记(一)

    Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...

  4. Linux设备驱动程序学习之分配内存

    内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...

  5. Linux设备驱动程序学习----1.设备驱动程序简介

    设备驱动程序简介 更多内容请参考Linux设备驱动程序学习----目录 1. 简介   Linux系统的优点是,系统内部实现细节对所有人都是公开的.Linux内核由大量复杂的代码组成,设备驱动程序可以 ...

  6. linux设备驱动程序--在用户空间注册文件接口

    linux字符设备驱动程序--创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序--hello_world,在驱动程序中,我们什么 ...

  7. linux设备驱动程序--gpio控制

    gpio驱动程序 上一章节linux设备驱动程序--创建设备节点章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就 ...

  8. linux设备驱动程序--hello-world

    linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到 ...

  9. linux设备驱动程序-i2c(1):i2c总线的添加与实现

    linux设备驱动程序-i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节linux设备驱动程序-i2c(0)-i2c设备驱动源码实现中,我们演示了i2c设备驱动程序的源码实现 ...

随机推荐

  1. 【C++】Item18. Make interfaces easy to use correctly and hard to use incorrectly

    接口容易被正确使用,不易被误用 c++简单工厂模式时,初级实现为ITest* CreateTestOld(), 然后用户负责释放返回的对象.如果忘记释放就会造成memory leak,所以在设计工厂接 ...

  2. oracle 手动配置服务器端和客户端

    1.oracle 服务器端配置 将oracle安装完成之后,在Net Configuration Assistant配置 1.监听程序配置 先找到Net Configuration Assistant ...

  3. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全

    基于角色的安全是从 Windows NT 的第一个版本开始在 Windows 平台上发展而来的.使用角色,操作系统可以通过检查称为 BUILTIN\Administrators 的组的安全上下文做出一 ...

  4. swift Hashable Equatable

    /// You can use any type that conforms to the `Hashable` protocol in a set or /// as a dictionary ke ...

  5. CAD得到所有实体2

    主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...

  6. 00JAVA EE

    JAVA EE 三层架构 我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器.在JavaEE开发中,几乎全都是基于B/S架构的开发.那么 ...

  7. ios xmpp 发送语音图片解决方案

    ios xmpp 发送语音,图片解决方案,有需要的朋友可以参考下. 目前做IM多是用的xmpp. 因为项目需求需要实现语音和图片的发送. 发送语音图片有三种方法. 1,xmpp smack.文件传输方 ...

  8. C++字符串处理函数总结

    1.基础函数输入输出:cin,cout,getchar,gets,putchar,puts,printf,scanf格式化:sprintf,sprintf_s,wsprintf,wsprintf_s, ...

  9. [USACO06JAN] 冗余路径 Redundant Paths

    题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...

  10. FileInputStream实现读取文件内容并输出到屏幕上

    java输入输出流是站在程序的角度来说的.从文件中读取数据用输入流,向文件中写数据用输出流. package com.janson.day20180827; import java.io.FileIn ...