linux设备驱动程序_hello word 模块编译各种问题集锦

在看楼经典书籍《linux设备驱动程序》后,第一个程序就是编写一个hello word 模块。原以为很简单,真正弄起来,发现问题不少啊。前两天编过一次,由于没有记录,今天看的时候又忘了,所以不管多晚,都得记录一下。

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 模块编译各种问题集锦

时间: 2024-10-19 21:01:13

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

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可

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

原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在linux-2.6.29/arch/ar

Linux设备驱动程序学习笔记(一)

1.设备驱动程序扮演的角色:       设备程序是一个独立的“黑盒子”,使其某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节.用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序.将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务.2.驱动程序的作用:        驱动程序应该处理如何使用硬件可用的问题,而将怎样使用硬件的问题留给上层应用.(提供机制,而不是策略)3.内核功能划分:        进程管理    内存管理    文

LINUX设备驱动程序笔记(一)设备驱动程序简介

<一>:设备驱动程序的作用 从一个角度看,设备驱动程序的作用在于提供机制,而不是策略.在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略.因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序. 从另一个角度来看驱动程序,它还可以看作是应用程序和实际设备之间的一个软件层. 总的来说,驱动程序设计主要还是综合考虑下面三个方面的因素:提供给用户尽量多的选项.编写驱动程序要占用的时间以及尽量保持

LINUX设备驱动程序笔记(三)字符设备驱动程序

      <一>.主设备号和次设备号        对字符设备的访问时通过文件系统内的设备名称进行的.那些设备名称简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可通过ls -l命令输出的第一列中的'c'来识别.块设备同样位于/dev下,由字符'b'标识 crw-rw----  1 root root    253,   0 2013-09-11 20:33 usbmon0 crw-rw----  1 root root    253,   1 2013-09

Linux 设备驱动程序 字符设备

已经无法再精简,适合入门. 1 #include<linux/module.h> 2 #include<linux/init.h> 3 4 #include<asm/uaccess.h> 5 #include <linux/types.h> 6 #include<linux/fs.h> 7 #include<linux/cdev.h> 8 struct mengc_dev{ 9 char data[64]; 10 struct cde

LINUX设备驱动程序(第3版)pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑<LINUX设备驱动程序(第3版)>已针对Linux内核的2610版本彻底更新过了.内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用.利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等.要阅读并理解本书,您不必首先成为内核黑客:只要您理解C语言并具有Unix系统调用的一些背景知识即可.您将学到如何为字符设备.块设备和网络接口编写驱动程序.为此,<LINUX设备驱动程序(第3版)>提供了完整的示例

LINUX设备驱动程序(第3版)下载 &#113638;

下载地址: http://www.gqylpy.com/di/16 <LINUX设备驱动程序(第3版)>PDF高清完整版-下载 内容简介 编辑 <LINUX设备驱动程序(第3版)>已针对Linux内核的2610版本彻底更新过了.内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用.利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等.要阅读并理解本书,您不必首先成为内核黑客:只要您理解C语言并具有Unix系统调用的一些背景知识即可.您将学到如何为字符设

Linux设备驱动程序(一)设备驱动程序简介

机制or策略: 驱动提供机制(what),而不是提供策略(how): 内核功能划分: 根据内核完成任务的不同,可分为如下几个部分: 1. 进程管理 负责进程的的创建和销毁,并处理它们和外部之间的连接(输入输出).不同进程之间的通信是整个系统的基本功能,因此由内核处理. 除此之外,控制进程如何共享CPU的调度器也是进程管理的一部分. 概括来说,内核进程管理就是在单个或者多个CPU上实现了多个进程的抽象. 2. 内存管理 内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素.