P.S.视频都看过一遍啦,第一遍主要是跟着打代码运行了驱动。因为接下来要搞毕业设计了,特意来复盘写笔记记录一下。加油!话不多说,action。
1.前置知识:
<1>掌握Linux开发环境搭建以及Linux命令行操作。
<2>掌握开发板系统的编译以及镜像的烧写
<3>掌握Linux系统编程开发
2.驱动分为四个部分:
头文件
驱动模块的入口和出口
声明信息
功能实现
//包含宏定义的头文件
#include <linux/init.h>
//包含初始化加载模块的头文件
#include <linux/module.h>
//装载卸载函数入口
static int __init hello_init(void)
{
printk("hello_init\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("hello_exit\n");
}
//驱动模块装载卸载声明
module_init(hello_init);
module_exit(hello_exit);
//开源许可证GPL声明
MODULE_LICENSE("GPL");
3.驱动可以编译成模块,然后使用命令加载到内核里。也可以直接编译到内核。
export ARCH=arm
#obj-m,将驱动编译成模块,.o是中间文件
obj-m += hello_world.o
#内核源码实际路径
KDIR := /home/topeet/lollipop-5.1.1_r6/linux/kernel/kernel-3.4.39
#当前目录,获取当前目录的变量
PWD = $(shell pwd)
#make进入内核源码路径将当前目录下的代码编译成模块
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.* *.order *.symvers
4.和 make menuconfig 有关的文件:
Kconfig 内核配置的选项(图形界面中的选项)
.config 配置完内核以后生成的配置选项(选完的结果)
Makefile 里面是编译规则,告诉我们在make的时候要怎么编译(根据选择的结果进行编译)
5.驱动编译到内核这部分我跳过了。