驱动 platform总线 示例

该文介绍了如何在Linux内核中使用platform_device和platform_driver来控制硬件,包括创建设备信息结构体、注册设备、处理中断以及实现字符设备驱动的基本操作(如open、read和close)。同时,文章涉及设备树匹配和中断处理函数的关键步骤。
摘要由CSDN通过智能技术生成

platform_device

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>

//3.创建并填充设备信息结构体
struct resource res[] = {
    [0] = {
        //资源起始地址
        .start = 0x12345678,
        //资源末尾地址
        .end = 0x12345678 + 49,
        //资源类型(内存)
        .flags = IORESOURCE_MEM,
    },
    [1] = {
        //资源起始中断号
        .start = 71,
        //资源末尾中断号
        .end = 71,
        //资源类型(中断)
        .flags = IORESOURCE_IRQ,
    }
};

//2.填充释放资源函数(可以为空)
void pdev_release(struct device* dev){

}

//1.创建并填充platform_device结构体
struct platform_device pdev = {
    //用于匹配的名字
    .name = "123",
    //总线号(自动分配)
    .id = PLATFORM_DEVID_AUTO,
    //父类,用于构建链表,必须写释放资源函数
    .dev = {
        //释放资源的函数
        .release = pdev_release,
    },
    //设备信息结构体
    .resource = res,
    //设备信息结构体成员个数
    .num_resources = ARRAY_SIZE(res),
};

static int __init pdev_init(void){
    //4.注册platform_device
    return platform_device_register(&pdev);
}
static void __exit pdev_exit(void){
    //5.注销platform_device
    platform_device_unregister(&pdev);
}
module_init(pdev_init);
module_exit(pdev_exit);
MODULE_LICENSE("GPL");

platform_driver

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h> //没有platform_driver.h头文件
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
/*
myplatform{
    compatible = "123,myplatform";
    interrupt-parent = <&gpiof>;
    interrupts = <9 0>;
    reg = <0x12345678 0x40>;
    led1 = <&gpioe 10 0>;
};  
*/

struct resource* 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值