`
kongweile
  • 浏览: 520945 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Linux 最简单的驱动程序hello world

 
阅读更多

http://blog.sina.com.cn/s/blog_6035432c0100jraf.html

最近开始学Linux驱动,就从最简单的开始练起,就从LDD-3里的第一个驱动程序hello world练起。

 

The following code is a complete "hello world" module:

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");



static int hello_init(void)

{

    printk(KERN_ALERT "Hello, world\n");

    return 0;

}



static void hello_exit(void)

{

    printk(KERN_ALERT "Goodbye, cruel world\n");

}



module_init(hello_init);

module_exit(hello_exit);

 

保存为 hello.c

 

再写一个Makefile,代码如下:

obj-m := hello.o
KERNELDIR := /usr/src/kernels/2.6.9-42.EL-smp-i686
PWD := $(shell pwd)
all:
        make -C $(KERNELDIR) M=$(PWD) modules

.PHONY: clean
clean:
        rm -rf *.o *.ko

 

加载驱动:

Linux <wbr>最简单的驱动程序hello <wbr>world
屏幕没有显示。

查看驱动,lsmod     hello已在,说明已经加载进去了。

Linux <wbr>最简单的驱动程序hello <wbr>world

网上查看,寻求解决之法,
说可以在/var/log/message中显示hello world!,但还是没有、

最后使用dmesg命令,看到了显示。

 

卸载驱动:
rmmod hello

 

途中问题:

加载驱动时遇到 insmod: error inserting 'hello.ko': -1 invalid module format 错误

Linux <wbr>最简单的驱动程序hello <wbr>world
原因:使用的内核和编译的内核版本不一样。

我使用的PC内核版本如下:

Linux <wbr>最简单的驱动程序hello <wbr>world

在/usr/src/kernels/下有三个内核,选择和上面系统一样的内核。
Linux <wbr>最简单的驱动程序hello <wbr>world

修改 Makefile中的 KERNELDIR  为

KERNELDIR := /usr/src/kernels/2.6.9-42.EL-smp-i686
或者为 KERNELDIR := /lib/modules/$(shell uname -r)/build

   cd /lib/modules/$(uname -r)/build/
   这个目录实际上指向了:/usr/src/kernels/2.6.9-42.EL-smp-i686


分享到:
评论

相关推荐

    编译hello world嵌入式设备驱动程序详细过程.rar

    本文档是最基本的Linux设备驱动程序hello world的技术文档,hello world很简单,但如果没有高手指导,或者你的开发板提供的资料做得不够好,那是足够让你花上一个星期也不一定能够搞出来的。本文档是针对Linux设备...

    Linux驱动开发之旅(一)--helloworld

    "Linux驱动开发之旅(一)--helloworld"是一个针对初学者的教程,旨在帮助新手理解驱动开发的基本步骤和关键点。在这个教程中,我们将创建一个简单的字符设备驱动,它的主要功能就是向用户空间输出"Hello, World!...

    Linux驱动程序开发学习

    - **编写简单的字符设备驱动**:从最基础的字符设备驱动开始,包括初始化、卸载等基本操作,并在驱动的 init 函数中输出 "Hello World"。 - **实现完整的字符设备驱动**:进一步扩展字符设备驱动的功能,如读取、...

    Linux 设备驱动程序 Edition 3.pdf

    - **解释**: HelloWorld是一个简单的示例,用于演示如何创建和加载一个基本的内核模块。这部分通过一个具体的例子,帮助读者理解模块的基本构建过程。 - **2.3. 内核模块相比于应用程序** - **解释**: 内核模块与...

    嵌入式linux驱动程序开发

    4. **Character Drivers**:字符设备驱动程序是Linux中最常见的驱动类型之一,用于处理类似串行端口或控制台这样的字符设备。它们通过一组标准接口(`file_operations`)与用户空间通信。 - **操作接口**:主要包括`...

    Linux设备驱动程序.英文第三版[Linux Device Driver]

    - **Hello World模块**:这是最简单的驱动程序示例,通过它可以学习如何编译和加载模块。 - **内核模块与应用程序的区别**:内核模块直接运行在内核空间,而应用程序则运行在用户空间。内核模块可以访问更多的系统...

    linux设备驱动程序(中文第三版) 2.6内核.pdf

    - **入门示例**:创建一个简单的HelloWorld模块作为初学者的第一个项目。 - **实现步骤**: - 编写模块初始化函数。 - 编写模块卸载函数。 - 使用`module_init()`和`module_exit()`进行注册。 #### 2.3 内核模块...

    linux设备驱动程序

    HelloWorld模块是一个简单的示例,用于演示如何创建和加载第一个Linux内核模块。 **2.3 内核模块相比于应用程序** 内核模块和应用程序有着本质的区别,它们分别运行在内核空间和用户空间,具有不同的权限和限制。 ...

    驱动模块 hello.c 和 makefile

    《ARM嵌入式Linux设备驱动实例开发》--最简单模块--Helloworld,《ARM嵌入式Linux设备驱动实例开发》--hello.c 及Makefile

    LINUX驱动模块编程入门

    LINUX驱动模块编程是Linux系统中的一种特殊编程技术,它允许开发者编写驱动程序,以便控制和管理硬件设备。本篇文章将为读者介绍LINUX驱动模块编程的基础知识,包括驱动模块的加载、编写和编译等。 什么是模块 ...

    关于linux驱动(应用)程序头文件使用

    例如,在编写一个简单的“Hello World”驱动时,只需要包含这个文件即可。 - **`linux/fs.h`**:该头文件包含了文件操作相关的结构体定义,如`struct file_operations`和`struct inode`。此外,还包括了`MINOR`和`...

    Linux驱动开发庖丁解牛

    通过上述步骤,我们不仅搭建了一个适合于Linux驱动开发的环境,还编写并测试了一个简单的驱动程序。这对于初学者来说是一个非常好的起点。随着对Linux内核和驱动开发理解的深入,可以尝试更复杂的驱动开发项目,不断...

    用汇编语言写linux驱动程序

    - **“Hello World”驱动模块**:通过一个简单的例子,介绍了如何编写并加载第一个驱动模块。 - **编译与链接驱动程序**:详细讲解了编译和链接驱动程序的过程,包括如何设置编译环境和使用必要的工具链。 - **版本...

    linux移植、驱动编写最详细教程

    - **4.1 Helloworld** - 简单示例介绍如何编写一个简单的内核模块。 - **4.2 GPIO驱动** - **4.2.1 硬件分析** - 分析目标硬件的GPIO接口。 - **4.2.2 LED驱动的编写** - 使用C语言实现对LED的控制。 - **...

    [Linux驱动开发一]最简单的内核模块

    本篇文章将详细讲解如何开发一个最简单的Linux内核模块,以此来入门Linux驱动开发。 首先,我们要理解内核模块的概念。内核模块是Linux内核的一部分,可以在需要时动态加载或卸载,这样可以减小内核体积并提高灵活...

    linux驱动程序开发详细介绍.docx

    本文档详细介绍了如何开发一个简单的Linux内核模块,即“Hello World”模块,以及相关的编译和测试过程。 首先,我们来看一下“Hello World”内核模块的代码。这个模块主要包含两个函数:`hello_init`和`hello_exit...

    hello nasm masm linux

    压缩包内的子文件“hello-masm”、“hello-nasm”和“hello-linux”可能分别代表了使用MASM、NASM和Linux环境编写的“Hello World”程序示例。在汇编语言中,"Hello World"程序通常是学习汇编基础知识的第一步,它...

    LINUX 设备驱动开发详解

    5. Linux内核驱动的“HelloWorld”:对于Linux设备驱动开发者而言,编写一个最简单的LED驱动程序是入门的常用方法。通过实现设备的基本操作,开发者可以快速理解和掌握设备驱动的开发流程和关键点。 在无操作系统的...

    LINUX内核和驱动编程

    - **设备驱动**:最常见的用途之一就是作为设备驱动,用于管理各种硬件设备如串口、并口、网络接口等。 - **文件系统支持**:可以加载额外的文件系统模块来支持更多类型的文件系统。 - **网络协议栈**:添加新的网络...

Global site tag (gtag.js) - Google Analytics