linux2.22.6内核驱动之-------分层分离模型

本文详细介绍了Linux内核驱动中的分层分离模型,将硬件部分和软件部分分离。硬件部分通过注册platform_device来定义寄存器资源,而软件部分通过platform_driver与硬件交互,实现了在硬件驱动更新时,软件部分无需改动的目标。通过实例展示了如何编写硬件注册和软件驱动代码,并提供了应用层调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前的驱动,如果按键驱动,对寄存器的操作硬件部份,还有软件部份,是写在一个文件里的。(参考文章应用层跟驱动通讯之----点灯(应用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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值