linux驱动程序Helloworld

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: linux驱动程序Helloworld

开发环境是:Mini 2440,根文件系统采用的是NFS网络根文件系统,宿主机是Fedora 14.

本文所需代码在此处:

http://www.jyguagua.com/bbs/forum.php?mod=viewthread&tid=13

1.首先我们看下hello.c代码,里面定义了模块初始化和退出的方法:

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

static int __init hello_init(void)
{
        printk(KERN_EMERG "Hello world\n");
        return 0;
}
static void __exit hello_exit(void)
{
        printk(KERN_EMERG " Hello world exit\n");
}
module_init(hello_init);
module_exit(hello_exit);

然后看Makefile,我们需要修改下KERNELDIR的值,这个值是Linux的源码,我们需要用到Linux的里面一些头文件等等。

ifeq ($(KERNELRELEASE),)

KERNELDIR ?=/pub/sh_shenqian/src/kernel/linux-2.6.32.2

PWD := $(shell pwd)

modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order Module*

.PHONY: modules modules_install clean

else
    obj-m := hello.o
endif

2.我们进行修改Makefile之后,然后执行命令:make ,然后生成了一个 hello.ko,我们在Fedora里面,将它拷贝到Mini2440根目录的nfs文件夹,然后在SecureCRT终端,进入根目录,可以看到hello.ko;

3.在终端根目录,我们执行如下命令:

[root@FriendlyARM /]# insmod hello.ko 
Hello world
[root@FriendlyARM /]# lsmod 
hello 505 0 - Live 0xbf006000
[root@FriendlyARM /]# rmmod hello
 Hello world exit
rmmod: module 'hello' not found
[root@FriendlyARM /]#

其中insmod命令意思是插入一个新的模块,lsmod命令我们可以看到当前所加载的模块,rmmod是移除模块。

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: linux驱动程序Helloworld

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: