`
kongweile
  • 浏览: 517386 次
  • 性别: 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设备驱动程序.英文第三版[Linux Device Driver]

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

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

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

    驱动模块 hello.c 和 makefile

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

    关于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内核的一部分,可以在需要时动态加载或卸载,这样可以减小内核体积并提高灵活...

Global site tag (gtag.js) - Google Analytics