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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值