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(“作者”)
申明模块的作者
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许可证的模块
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值