platform之字符设备创建

本文详细介绍了在嵌入式系统中如何创建和注册字符设备驱动,以便控制GPIO等硬件资源。首先,需要填充resource结构体来定义IO资源,然后创建并注册platform_device结构体。接着,定义字符设备文件操作接口file_operations,并注册字符设备驱动以获取主设备号。最后,通过设备号创建设备文件,并映射IO地址。文中以蜂鸣器驱动为例,展示了从设备资源分配到中断处理的完整流程。
摘要由CSDN通过智能技术生成
    在嵌入式系统里,想要对GPIO管脚等进行操作的话,需要在内核中注册一个字符设备及相应的驱动。字符设备提供了对IO地址的映射,从而可以使用虚拟地址对各寄存器进行读写。字符设备驱动实现设备的初始化,关联到设备文件,提供通用的open、release、ioctl、read、write等接口。最终应用程序才能通过这些文件接口,间接控制设备。设备号分为主设备号和次设备号, 设备驱动通过主设备号来与设备文件关联,通过次设备号来与串口关联。platform总线会分别遍历驱动链表和设备链表,通过name字段来匹配驱动和设备。因此,字符设备的创建步骤分为:
1、准备IO资源,即填写resource结构体
2、填写platform_device设备结构体
3、调用platform_device_register注册设备
4、填写字符设备文件接口file_operations
5、注册字符设备驱动,得到主设备号
6、通过设备号,创建设备文件
7、映射IO地址到虚拟地址

例1:蜂鸣器驱动
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#define BEEP_ON            (0x10007)                //自定义命令
#define BEEP_OFF        (0x10008)
#define BEEP_DISABLE    (0x10009)
#define BEEP_ENABLE        (0x1000a)
static int disable=0;
static int major;
static struct class *beep_class;
static unsigned long *gpio_con;
static unsigned long *gpio_data;
static int pin;

static struct resource beep_resources[] = {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值