文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>驱动之 hello world

驱动之 hello world

时间:2010-08-07  来源:emebeder

学了几天的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。

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

相关阅读 更多 +
排行榜 更多 +
边境警察巡逻模拟中文版下载

边境警察巡逻模拟中文版下载

角色扮演 下载
数码宝贝世界复原手机版下载

数码宝贝世界复原手机版下载

角色扮演 下载
土地抢夺者中文手机版下载

土地抢夺者中文手机版下载

策略塔防 下载