下载linux版的vscode ,并且安装
我用的板子是nxp的imx6ull,下载nxp的的arm交叉编译工具链和他们的内核(也可以下载官方版本的内核和编译工具链),解压并设置路径,我的路径如下:
内核路径/home/mayunzhi/linux/Linux-4.9.88
工具链路径/home/mayunzhi/linux/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/
创建一个helloworld的文件夹mkdir helloworld ,创建一个c文件:touch helloworld.c
用vscode打开文件夹helloworld 编辑helloworld.c
#include
static int __init hello_init(void){
printk(KERN_INFO"hello world init !\n");
return 0;
}
static void __exit hello_exit(void){
printk(KERN_INFO"hello world exit !\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
KERNELDIR :=/home/mayunzhi/linux/Linux-4.9.88
CURRENT_PATH :=$(shell pwd)
build:kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
在vscode下打开终端,默认当前目录为helloworld文件夹下,执行make命令
产生这些文件:
helloworld.mod.c helloworld.mod.o modules.order helloworld.ko helloworld.o
后缀名为.ko的文件就是我们开发板需要的模块驱动文件,将helloworld.ko拷贝到开发板文件系统里的/lib/module/4.1.15/中,这里是通过nfs环境,(后面会有详细的教程).
在开发板中cd到/lib/module/4.1.15/,执行insmod helloworld.ko命令将helloworld驱动加载到内核,在开发板终端会看到"hello world init !"的信息
5.要卸载驱动只需要在当前目录下执行rmmod helloworld.ko,就可以卸载helloworld驱动,会看到终端有"hello world exit !"的信息
以上就是一个最简单的helloworld的linux 驱动设计方式,只是输出了信息,没有涉及soc上的硬件操作,比如gpio,中断,i2c,spi,lcd等等,当然我们的驱动开发远没有这么简单,后面我会详细介绍,