第一个hello world 驱动实验总结

来源:互联网 发布:文档下载软件 编辑:程序博客网 时间:2024/06/06 00:27

      本次采用的是模块动态加载方式(驱动的加载方式存在两种:一是静态加载,而是动态加载,其中动态加载,是不需要对源代码中的char下的kconfig和Makefile文件修改的,在需要使用的时候直接使用insmod *.ko 即可,卸载的时候直接用rmmod *.ko即可

       我在我的工作目录下/root/workspace/下新建了一个hello目录,用于存储hello.c 和Makefile文件(注意在这里必须是Makefile,不可以是makefile,不然会出问题

      其中我的helloc.c文件的源代码如下:

 

#include<linux/init.h>
#inlcude<linux/module.h>
static int hello_init(void)
{ 
    printk(KERN_ALERT" hello, World\n"); 
    return 0;
}
static void hello_exit(void)
{ 
    printk(KERN_ALERT"Goodbye , world\n");
} 
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");

 

Makefile的源代码:

obj-m := hello.oifeq ($(KERNELRELEASE),)
KERNELRELEASE ?= /root/workspace/linux_src/linux-2.6.12
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELRELEASE) M= /$(PWD) modules
endif


特别说明:

1.在ifeq 后面有一个空格,ifeq ($(KERNELRELEASE),)的意思是判断是否源代码的目录是否已经定义了,其中KERNELRELEASE 为linux源代码的目录。在我的电脑里面就是/root/workspace/linux_src/linux-2.6.12

2.?= 的目的是如果KERNERELEASE 如果已经定义过了,那么使用原来的,如果未定义,也就相当于 :=

3.PWD := $(shell pwd) 其中shell 为makefile中的函数,相当于"` `",将pwd执行的结果赋值给PWD

 

在以上条件已经准备好了之后,直接在/root/workspace/hello 目录下输入make,就会产生: hello.ko文件,将本文件拷贝到arm板子的某个文件夹下(我才用的是超级终端的文件传输功能,然后直接放在/tmp文件夹下),修改文件的权限 chmod 777 hello.ko ,然后直接insmod hello.ko 就会看到 hello, world,然后卸载rmmod hello.ko 就会看到Goodbye , world

 

 

原创粉丝点击