`
kongweile
  • 浏览: 506813 次
  • 性别: 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设备...

    驱动模块 hello.c 和 makefile

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

    Linux驱动程序开发学习

    在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。 6. ...

    linux驱动学习去开发入门

    make -C /home/tekkaman/working/SBC2440/linux-2.6.22.2 M=/home/tekkaman/working/Linuxdriver/Helloworld modules make[1]: Entering directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' CC [M] /home/...

    Linux内核驱动模块编程指南 (内核版本2.2, 2.4)The Linux Kernel Module Programming Guide CHS

    2.1. Hello, World (part 1): 最简单的内核模块 2.2. 编译内核模块 2.3. Hello World (part 2) 2.4. Hello World (part 3): 关于 __init and __exit宏 2.5. Hello World (part 4): 内核模块证书和内核模块文档说明 ...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    到这里helloworld 程序便完成了。 Qt Creator 编译的程序,在其工程文件夹下会有一个debug 文件夹,其中有程序的.exe 可执行文件。但Qt Creator 默认是用动态链接的, 就是可执行程序在运行时需要相应的.dll 文件。...

    嵌入式linux开发

    Linux开发系列由浅入深地介绍了交叉编译工具的搭建、基于s3c2416 bootloader的实现过程,以目前最新版的linux4.10.10内核为基础,一步步细致地介绍了修改编译,以及最简单的hello world根文件系统到实用复杂的根文件...

    windows环境下32位汇编语言程序设计

    ”一样,这个程序的有名并不是因为它用高深复杂的语句放倒了一大批人,而是它以最简单易懂的方式让人们走入C语言的大门。对于Win32汇编也是如此,从最简单的例子开始总是没错的,笔者建议读者跟随本书中从简到繁的...

    ARM Cortex-A8和Android 4.x联动报警系统

    第46节:Android 4.x设备驱动开发HelloWorld演示.zip 第47节:Android 4.x字符设备驱动程序.zip 第48节:Android 4.x重要内核数据结构.zip 第49节:Android 4.x字符设备驱动程序示例.zip 第50节:另一种简单的字符...

    win7 安装最后一个支持的nodejs-13.14.0.zip

    Node.js 是一个跨平台的 JavaScript 运行时环境。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。Node.js 的生态系统是目前最大的开源包管理系统。...这里是一个简单的 hello world 的 Web 服务器。

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    vc++ 应用源码包_1

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 Notepad++ V5.6.8 源码! OA精灵代码 c++版 一套oa系统。 ocxdlgtest dll的一个实例。 OD反汇编引擎...

    自己动手写操作系统(含源代码).part2

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    自己动手写操作系统(含源代码).part1

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    Tcl_TK编程权威指南pdf

    其实,你可以通过添加一个Tcl解释器,来将自己的应用程序组织成一组操作原语,并使用这些原语来构造最符合用户需求的脚本程序。这样还可以允许其他的程序通过编程来控制你的应用程序,以使套装应用程序能够很好地在...

    vc++ 应用源码包_2

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 Notepad++ V5.6.8 源码! OA精灵代码 c++版 一套oa系统。 ocxdlgtest dll的一个实例。 OD反汇编引擎...

    vc++ 应用源码包_6

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 Notepad++ V5.6.8 源码! OA精灵代码 c++版 一套oa系统。 ocxdlgtest dll的一个实例。 OD反汇编引擎...

    vc++ 应用源码包_5

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 Notepad++ V5.6.8 源码! OA精灵代码 c++版 一套oa系统。 ocxdlgtest dll的一个实例。 OD反汇编引擎...

Global site tag (gtag.js) - Google Analytics