mini2440之Linux驱动学习_1_内核模块学习

想边学习内核边进行系统的移植,用了两天的时间,在新的优麒麟环境下移植成功Linux整个系统。虽然中间改的东西少,但是这个更深层次的学习,要一步一步来,我现在也很着急,不知道为什么,可能是因为别人考研的考研,实习的实习,好像全世界就我一个人在马上大四的暑假还在学习。但是我还是要送自己一句话:我又一辈子要过,不争今日,只争朝夕。好了打气也打完了,开始新的一天的学习。

模块的安装: insmod

insmod /home/dnw_usb.ko

模块的卸载:rmmod

rmmod dnw_usb.ko

模块的查看:lsmod

lsmod

分析得到:

内核模块分为三个部分:

1.头文件:linux/init.h和linux/module.h

2.加载函数:module_init

3.卸载函数:module_exit

代码编写:

helloword.c

#include<linux/init.h>

#include<linux/module.h>

static int helloword_init()

{

printk(KERN_WARNING"Hello world!\n");

return 0;

}

static void helloword_exit()

{

printk(KERN_WARNING"hello exit!\n");

}

module_init(helloword_init);

module_exit(helloword_exit);

Makefile编写格式:

只有一个源文件的:

obj-m := helloword.o

KDIR :=/内核代码的路径

all:

       make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm

这一句的意思中,M=表示模块代码的路径,PWD是当前路径。CROSS_COMPILE这个是指定编译器。ARCH是体系结构。

clean:

      rm -f *.o *.ko

多个源文件:

obj-m := helloword.o

helloword-objs := file1.c file2.c ......

以上是内核模块的必选项,之后的是可选项

1.模块申明

MODULE_LICENSE(”遵守的协议”)
申明该模块遵守的许可证协议,如:“GPL“、”GPL v2“等
MODULE_AUTHOR(“作者”)
申明模块的作者
嵌入式Linux技术咨询QQ号: 550491596
嵌入式Linux学习交流QQ群: 65212116
MODULE_DESCRIPTION(“模块的功能描述")
申明模块的功能
MODULE_VERSION("V1.0")
申明模块的版本

2.模块的参数

module_param(name,type,perm)
name:变量的名称
type:变量类型,bool:布尔型 int:整型 charp:字符串型
perm是访问权限。 S_IRUGO:读权限 S_IWUSR:写权限

3.符号输出

EXPORT_SYMBOL(符号名)
EXPORT_SYMBOL_GPL(符号名)

其中EXPORT_SYMBOL_GPL只能用于包含GPL许可证的模块
 

猜你喜欢

转载自blog.csdn.net/li144179/article/details/81109554