之前的驱动,如果按键驱动,对寄存器的操作硬件部份,还有软件部份,是写在一个文件里的。(参考文章应用层跟驱动通讯之----点灯(应用To驱动))
分层分离模型意思就是把原来一个文件里的硬件部份,还有软件部份分成两个部分,当硬件寄存器修改了,软件可以不用修改。
分离模型之硬件部分:
#include <linux/module.h>
#include <linux/version.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/timer.h>
#include <linux/init.h>
#include <linux/serial_core.h>
#include <linux/platform_device.h>
/* 分配/设置/注册一个platform_device */
static struct resource led_resource[] = {
[0] = {
.start = 0x56000050, //这个是硬件里的寄存器物理开始地址
.end = 0x56000050 + 8 - 1, //这个是硬件里的寄存器物理结束地址
.flags = IORESOURCE_MEM, //这个是一个标识,在软件驱动根据这个标识取到物理地址
},
[1] = {
.start = 5, //这个是硬件里的寄存器要操作的引脚
.end = 5,
.flags = IORESOURCE_IRQ, //这个是一个标识,在软件驱动根据这个标识取到操作的引脚
}
};
static void led_release(struct device * dev) //内核要求要有这个函数才能实现分层模型
{
}
static struct platform_device led_dev = {
.na