- 市面上的关于设备驱动的书大部分是三星的开发板(都是啥210,2440啥的旧芯片),全志和瑞芯微的好像没看到有,还有有关TI芯片的中文书籍关于驱动方面讲的也很浅,不适于入门。
- 博文是在关于三桑的开发板上的基础上开始编写的,因笔者(我)水平问题,错漏在所难免
参考资料改的Makefile
mkdir /root/myPC2
cd /root/myPC2
vim Makefile
KERNEL_DIR ?= /root/Oriangepi/OrangePiH5/kernel
PWD := $(shell pwd)
CROSS_COMPILE = aarch64-linux-gnu-
obj-m = hello.o
#多文件
#obj-m = module.o
#module-objs := file1.o file2.o
all: modules
modules clean:
$(MAKE) -C $(KERNEL_DIR) ARCH=arm64 CROSS_COMPILE=$(CROSS_COMPILE) \
SUBDIRS=$(PWD) $@
测试方法
touch hello.c
#编译
make
清理
make clean
以下为带内容的hello.c测试,入口函数和出口函数编写标准是“有进无出”(有无返回值)
$vim hello.c
#include <linux/init.h>
#include <linux/module.h>
//入口函数,可自定义函数名,带返回值
static int hello_init(void)
{
printk(KERN_ALERT "hello,Pi ka qiu!\n");
return 0;
}
//出口函数,可自定义函数名,无返回值
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye,Pi ka qiu!\n");
}
module_init(hello_init);//入口
module_exit(hello_exit);//出口
MODULE_LICENSE("GPL");//协议标准
$ make
make -C /root/Oriangepi/OrangePiH5/kernel ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
SUBDIRS=/root/myPC2 modules
make[1]: 进入目录“/root/Oriangepi/OrangePiH5/kernel”
CC [M] /root/myPC2/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/myPC2/hello.mod.o
LD [M] /root/myPC2/hello.ko
make[1]: 离开目录“/root/Oriangepi/OrangePiH5/kernel”
#此时不会在提示空文件,虽然空文件也可以编译
$ ls
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o Makefile Module.symvers
将驱动文件拷贝到nfs目录,开发板挂载nfs目录(也可以在nfs目录编写驱动文件)
#装载驱动,带后缀
$ insmod hello.ko
#卸载驱动,设置驱动文件名,不带后缀
$ rmmod hello