Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121227
  • 博文数量: 15
  • 博客积分: 1581
  • 博客等级: 上尉
  • 技术积分: 411
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-29 09:48
文章分类

全部博文(15)

文章存档

2011年(8)

2010年(7)

我的朋友

分类: LINUX

2010-08-07 16:38:39

学了几天的linux驱动,单单弄一个hello world 就很久很久。
首先,要明白linux驱动原理。要懂得其原理,就要知道内核模块。
关键字:linux驱动  hello world ,模块
方法:百度,goodle 
结果:我们得到一个例程:hello.c Makefile
hello.c:

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello wrold!\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye");
}

module_init(hello_init);
module_exit(hello_exit);

Makefile:

obj -m +=hello.o
 
#the running kernel DIR
KER_DIR :=/lib/modules/$(shell uname -r)/build
#your modules DIR
PWD :=$(shell pwd)

all:
      $(MAKE) -C $(KER_DIR) M=$(PWD) modules
clean:
      rm -rf *.o *.ko *.mod.c *.marker *.order *.symvers

#KER_DIR这个目录是你本机上正在运行的内核目录,假如你下载的是其他版本的内核进行编译,有些能编译通过,可是insmod的时候就出错了。不是随便一个内核就成的。网上也有自己下载内核的方法。

KER_DIR:=你解压的内核目录,新的代码没有经过编译,无论怎么make都不行,后来我自己按照本机上的内核的.config重新编译了内核,再进行make的时候就出现了版本不同之类的错误,insmod ./hello.ko 出现:insmod:   error   inserting   './hello.ko ':   -1   Invalid   module   format 用dmseg查看之后,就知道是什么错误了,至今我还不知道怎么解决重新下载内核的方法。

M这是一个变量,代表的是你modules 的目录。

make之后,出现hello.ko的话 就只能说明能编译通过了而已,接下来insmod ./hello.ko,没有错误提示的话,这个程序就被执行了,运行一下dmesg,最后一行是不是可以看到hello world!字样。执行rmmod hello;再运行dmesg,最后一行又出现了Goodbye。

总结:以上就是整个流程了,期间出现了好多意想不到的错误,总之挺过来了。要学习驱动,必须要与内核结构一起学习。不然达不到效果。我学习的方法就是,一遇到了不懂的,就花心思去百度,从海量的信息中学习,总结。

阅读(1696) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~