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
加载驱动:

屏幕没有显示。
查看驱动,lsmod hello已在,说明已经加载进去了。

网上查看,寻求解决之法,
说可以在/var/log/message中显示hello world!,但还是没有、
最后使用dmesg命令,看到了显示。
卸载驱动:
rmmod hello
途中问题:
加载驱动时遇到 insmod: error inserting 'hello.ko': -1 invalid module format 错误

原因:使用的内核和编译的内核版本不一样。
我使用的PC内核版本如下:

在/usr/src/kernels/下有三个内核,选择和上面系统一样的内核。

修改 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
分享到:
相关推荐
本文档是最基本的Linux设备驱动程序hello world的技术文档,hello world很简单,但如果没有高手指导,或者你的开发板提供的资料做得不够好,那是足够让你花上一个星期也不一定能够搞出来的。本文档是针对Linux设备...
"Linux驱动开发之旅(一)--helloworld"是一个针对初学者的教程,旨在帮助新手理解驱动开发的基本步骤和关键点。在这个教程中,我们将创建一个简单的字符设备驱动,它的主要功能就是向用户空间输出"Hello, World!...
- **编写简单的字符设备驱动**:从最基础的字符设备驱动开始,包括初始化、卸载等基本操作,并在驱动的 init 函数中输出 "Hello World"。 - **实现完整的字符设备驱动**:进一步扩展字符设备驱动的功能,如读取、...
- **解释**: HelloWorld是一个简单的示例,用于演示如何创建和加载一个基本的内核模块。这部分通过一个具体的例子,帮助读者理解模块的基本构建过程。 - **2.3. 内核模块相比于应用程序** - **解释**: 内核模块与...
4. **Character Drivers**:字符设备驱动程序是Linux中最常见的驱动类型之一,用于处理类似串行端口或控制台这样的字符设备。它们通过一组标准接口(`file_operations`)与用户空间通信。 - **操作接口**:主要包括`...
- **Hello World模块**:这是最简单的驱动程序示例,通过它可以学习如何编译和加载模块。 - **内核模块与应用程序的区别**:内核模块直接运行在内核空间,而应用程序则运行在用户空间。内核模块可以访问更多的系统...
- **入门示例**:创建一个简单的HelloWorld模块作为初学者的第一个项目。 - **实现步骤**: - 编写模块初始化函数。 - 编写模块卸载函数。 - 使用`module_init()`和`module_exit()`进行注册。 #### 2.3 内核模块...
HelloWorld模块是一个简单的示例,用于演示如何创建和加载第一个Linux内核模块。 **2.3 内核模块相比于应用程序** 内核模块和应用程序有着本质的区别,它们分别运行在内核空间和用户空间,具有不同的权限和限制。 ...
《ARM嵌入式Linux设备驱动实例开发》--最简单模块--Helloworld,《ARM嵌入式Linux设备驱动实例开发》--hello.c 及Makefile
LINUX驱动模块编程是Linux系统中的一种特殊编程技术,它允许开发者编写驱动程序,以便控制和管理硬件设备。本篇文章将为读者介绍LINUX驱动模块编程的基础知识,包括驱动模块的加载、编写和编译等。 什么是模块 ...
例如,在编写一个简单的“Hello World”驱动时,只需要包含这个文件即可。 - **`linux/fs.h`**:该头文件包含了文件操作相关的结构体定义,如`struct file_operations`和`struct inode`。此外,还包括了`MINOR`和`...
通过上述步骤,我们不仅搭建了一个适合于Linux驱动开发的环境,还编写并测试了一个简单的驱动程序。这对于初学者来说是一个非常好的起点。随着对Linux内核和驱动开发理解的深入,可以尝试更复杂的驱动开发项目,不断...
- **“Hello World”驱动模块**:通过一个简单的例子,介绍了如何编写并加载第一个驱动模块。 - **编译与链接驱动程序**:详细讲解了编译和链接驱动程序的过程,包括如何设置编译环境和使用必要的工具链。 - **版本...
- **4.1 Helloworld** - 简单示例介绍如何编写一个简单的内核模块。 - **4.2 GPIO驱动** - **4.2.1 硬件分析** - 分析目标硬件的GPIO接口。 - **4.2.2 LED驱动的编写** - 使用C语言实现对LED的控制。 - **...
本篇文章将详细讲解如何开发一个最简单的Linux内核模块,以此来入门Linux驱动开发。 首先,我们要理解内核模块的概念。内核模块是Linux内核的一部分,可以在需要时动态加载或卸载,这样可以减小内核体积并提高灵活...
本文档详细介绍了如何开发一个简单的Linux内核模块,即“Hello World”模块,以及相关的编译和测试过程。 首先,我们来看一下“Hello World”内核模块的代码。这个模块主要包含两个函数:`hello_init`和`hello_exit...
压缩包内的子文件“hello-masm”、“hello-nasm”和“hello-linux”可能分别代表了使用MASM、NASM和Linux环境编写的“Hello World”程序示例。在汇编语言中,"Hello World"程序通常是学习汇编基础知识的第一步,它...
5. Linux内核驱动的“HelloWorld”:对于Linux设备驱动开发者而言,编写一个最简单的LED驱动程序是入门的常用方法。通过实现设备的基本操作,开发者可以快速理解和掌握设备驱动的开发流程和关键点。 在无操作系统的...
- **设备驱动**:最常见的用途之一就是作为设备驱动,用于管理各种硬件设备如串口、并口、网络接口等。 - **文件系统支持**:可以加载额外的文件系统模块来支持更多类型的文件系统。 - **网络协议栈**:添加新的网络...