Linux ARM 驱动笔记之一 : 准备

Linux ARM 驱动笔记之一 : 准备

转载请注明:http://blog.csdn.net/zkwsr/article/details/12510439


本文以Linux ARMSPI设备驱动为例记录Linux驱动的开发中的一些套路和准备.本文内容抛开具体代码,描述相关的准备知识,描述书本中很少提及的内容.

  

1 驱动编写的套路

Linux 驱动编写归根揭底,涉及到底部,就是设置寄存器, 从设置寄存器的角度来看,Linux驱动编写分为两种套路:

1)     直接操控寄存器: 这种方式写驱动代码结构简单,直接设置控制寄存器即可,但是对程序员的硬件知识要求比较高, 一个Arm的Datasheet看上3-5遍,才有可能写出个正确的驱动.(从单片机写过程序的程序员转到linux驱动,开始容易写这种代码.)

 

注意事项:

volatile 这个关键字, 有些时候必须加上.否则变量不会及时更新,导致程序出错.

 

管脚地址示例:

 a) 使用内核设置  

 定义:S3C2410_GPB(0)//S3C2410 CPU GPIO_B 0个管脚,linux内核提供了这个对应的宏.

 设置/赋 : s3c2410_gpio_setpin(S3C2410_GPB(0),0);

 

 b) 直接使用寄存器地址



 #define  PMC_PCER  0xFFFFFC10  //sam9G15 PMC寄存器.

#definev_uint32_t volatile uint32_t
 //根据寄存器的位数设置字节长度.uint32_t, uint16_t  
 v_uint32_t *pmc_pcer; 
 //ioremap地址映射
 pmc_pcer =(uint32_t *)ioremap(PMC_PCER, 4);
  * pmc_pcer = (1u<< 5); //设置寄存器值第的值


通过直接操控寄存器就可完成设备的驱动, 但是不建议使用这种方法.

2)     不直接操控寄存器: 通过Linux内核提供的驱动框架写程序,速度快,相对于直接控制寄存器,对硬件知识要求不那么高了.在编写个规范和可靠性方面,按linux驱动框架编写会更好.驱动架构分为:控制器驱动层/Linux驱动核心层/设备驱动层. 下面以SPI驱动为例介绍.(其他类型设备类似)

 SPI驱动架构图:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值