第一个驱动程序-led驱动

一、一些预备知识

1、已经能够编写led的裸板驱动程序
2、将物理地址转换成虚拟地址
在程序中我们只能使用转换后的虚拟基地址和寄存器偏移来访问相应寄存器,而不能像裸板程序那样直接访问物理寄存器,所以必须对物理地址进行转换,下面是个例子
#include <linux/ioport.h>
#define GPIO_BASE 0x7F008000
#define GPIO_SIZE 0x28C
 
void __iomem *vir_base;
vir_base = ioremap(GPIO_BASE, GPIO_SIZE);
if (!vir_base)
    return -EIO;
注意,程序结尾一定要这样释放你所映射的虚拟地址
iounmap(vir_base);
3、内核中提供的一些寄存器的访问函数
虽然我们可以根据映射到的虚拟地址访问寄存器,但是为了谨慎,最好还是用内核中提供的专用函数进行寄存器访问
。内核根据寄存器的宽度,定义了一系列寄存器的访问函数,要求驱动开发人员使用:下面是个例子
char value;
/* 8位寄存器 */
value = readb(vir_base + offset);
writeb(value, (vir_base + offset));
__raw_readb()/__raw_writeb();   //这组函数不常用
/* 16位寄存器 */
short value;
value = readw(vir_base + offset);
writew(value, (vir_base + offset));
/* 32位寄存器 */
int value;
value = readl(vir_base + offset);
writel(value, (vir_base + offset));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值