fl2440驱动 -------helloworld模块

万能的helloworld适用于任何场面。fl2440的驱动也不列外。废话不多说,直接上代码:

#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>

#define MOD_AUTHOR "TangBin<[email protected]>"
#define MOD_DESC "hello,world!"

static int __init hello_init(void)
{
    printk("hello,world!\n");
    printk("This is my first driver program.\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk("Bye!\n");
    return;
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR(MOD_AUTHOR);
MODULE_DESCRIPTION(MOD_DESC);
MODULE_LICENSE("GPL");

这是一个简单的c程序代码,但是要怎样才能让代码在开发板上跑起来呢。

首先,这是要编译成一个模块,模块是可以在内核空间工作的,与我们在用户空间的应用程序是有很大不同的。内核就是一个大的、独立的程序,为了将它的各个片断放在一起,要满足很多详细、明确的要求。 

为了将这个.c文件编译成.ko模块并加载到内核中运行,我们需要制作一个Makefile来制定一些规则。 代码如下:

LINUX_SRC ?= ../linux/linux-3.0                                    
CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-arm920t-linux-gnueabi-                
                                                                   
   obj-m := s3c_hello.o                                            
                                                                   
modules:                                                           
    ?   ?  @make -C  $(LINUX_SRC) M=`pwd` modules                  
        ?   ?   ? @make clean                                      
                                                                   
clean:                                                             
    ?   ?  rm -f *.ko.* *.o *mod.c *.order *.symvers

注意:

1、Linux驱动Makefile里指定的内核源码路径必须是当前开发板正在运行的内核源码。(LINUX_SRC) 
2、指定好交叉编译器的路径。(CROSS_COMPILE) 
3、obj-m := s3c_hello.o 说明有一个模块要从目标文件s3c_hello.o中构造从而该目标文件中构造的模块名称为s3c_hello.ko。 
4、M=选项让Makefile在构造modules目标之前返回到模块源代码目录。modules目标指向obj-m变量中设定的模块。 
5、clean 将一些中间文件删除,因为不是必须的。

猜你喜欢

转载自blog.csdn.net/buhuiguowang/article/details/79646824