一、.c文件的编写
要点
1.头文件的包含
#include <linux/module.h>
#include <linux/init.h>
2.GPL 协议的遵守和作者的声明
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("kerwin");
3.insmod和rmmode调用函数的赋值
module_init(hello_init);
module_exit(hello_exit);
3.insmod和rmmode中函数的实现
static int hello_init(void)
{
printk(KERN_EMERG "hello world enter\n");
printk(KERN_EMERG "HELLO WORLD enter222!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "hello world exit\n");
}
二、makefile文件的编写
#!/bin/bash
#通知编译器我们要编译模块的哪些源码
#这里是编译itop4412_hello.c这个文件编译成中间文件itop4412_hello.o
obj-m += mini_linux_module.o
#源码目录变量,这里用户需要根据实际情况选择路径
#作者是将Linux的源码拷贝到目录/home/topeet/android4.0下并解压的
KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0
#当前目录变量
PWD ?= $(shell pwd)
#make命名默认寻找第一个目标
#make -C就是指调用执行的路径
#$(KDIR)Linux源码目录,作者这里指的是/home/topeet/android4.0/iTop4412_Kernel_3.0
#$(PWD)当前目录变量
#modules要执行的操作
all:
make -C $(KDIR) M=$(PWD) modules
#make clean执行的操作是删除后缀为o的文件
clean:
rm -rf *.o
三、ko文件的生成
1.把.c文件和makefile文件cp到一个目录下面(编译内核的linux电脑里面的同一个目录下面)
2.执行makefile
3.生产.ko文件
4.cp ko文件到开发板
5.加载和去掉驱动
[root@iTOP-4412]# insmod hello_driver.ko
[ 751.851622] hello world enter
[ 751.853110] HELLO WORLD enter222!
[root@iTOP-4412]# lsmod
hello_driver 761 0 - Live 0xbf008000
[root@iTOP-4412]# rmmod hello_driver
[ 759.540131] hello world exit
[root@iTOP-4412]#
网友评论