泰山派1--写最简单第一个helloworld驱动.ko模块

准备工作:
材料:

- 一台装有虚拟机ubuntu的PC
- 一个泰山派开发板
- 一个串口烧录线
准备泰山派SDK包

从泰山派官网下载泰山派SDK包,按官网教程下载部署。
编写linux驱动文件

首先,先新建一个文件夹存放自己写的驱动文件,然后在里面新建驱动.c文件。打开.c文件先书写驱动框架,框架包括两个基本的驱动头文件:
#include<linux/module>
#include<linux/init.h>
然后写驱动加载函数定义,和驱动卸载函数定义:
static int modename_intit(void);
static void modename_exit(void);
然后写函数调用:
mode_init(驱动加载函数);
mode_exit(驱动卸载函数);
最后写支持GPL协议声明,作者信息,版本信息:
MODULE_LICENSE("GPL")
MODULE_AUTHOR("lxh")
MODULE_VERSION("V1.0")
下面是我的打印helloworld驱动文件:
编写Makefile文件

在驱动源码的同目录下新建Makefile文件,书写框架:
obj-m += hello_world.o
KDIR:=/home/wht/tspi/linux/kernel //自己的SDK文件中的kernel所在的实际路径
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
echo $(PWD)
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
下面是我写的Makefile文件:
设置环境变量编译驱动内核模块






首先设置内核架构:
export ARCH=arm64 //arm64是架构类型 泰山派的3566,是arm64架构
再设置交叉编译路径:
export CROSS_COMPILE=/home/wht/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- //(路径) 自己的编译器路径
然后输入make编译:
会在同目录下多出来几个生成的文件
在开发板上加载模块






用mobaxter连接开发板串口,打开终端。
设置消息输出等级:echo 8 4 1 7 > /proc/sys/kernel/printk
把刚生成的.ko文件复制到开发板的根目录。
输入insmod (.ko文件)命令加载驱动模块。
在输入rmmod (.ko文件)命令卸载驱动模块。
打印正常说明驱动成功了。











