高通驱动程序开发参考(一)

来源:互联网 发布:sql语句中select嵌套 编辑:程序博客网 时间:2024/04/26 17:41

第1章  前言

1.1 文档目的及开发背景

本文为高通平台driver开发的学习文档,对部分概念性的东西进行了学习和总结。由于driver的跨度太大,内容很多,加上本人水平有限。如有不足之处及遗漏地方,麻烦大家多多包涵!希望这份文档能对大家学习高通平台的驱动开发有所帮助!

1.2 参考文献

序号

文档名称

作者

出版单位

1

80-VC881-1&QSC6055&QSC6065  QSC6075 AND QSC6085 SINGLE CHIP DEVICE SPECIFICATION

Qualcomm

--

2

80-VC881-2&QSC6055,QSC6065, QSC6075,QSC6085 SOFTWARE INTERFACE

Qualcomm

 

3

 

 

 

 

 

 

 

 

 

 

 

注:高通提供的文档比较详细,各个模块都有相关文档!因为文档提供比较齐全(需要自己去下,对于初学者是个难题),相对来说他的技术支持不怎么样!有得必有失!

1.3 术语和缩写解释

术语和缩写

解释

DS

DATA Service

SIO

Serial Input&Output

RDM

Runtime Device Mappe

BT

Blue Tooth

PBL

Primary Boot Loader

 

 

 

 

第2章  综述

2.1 高通平台的硬件架构

目前开发EVDO的手机或模块大部分采用了QSC6085平台。高通QSC系列的平台是高度集成化,它将PMICRF相关模块也集成到一块芯片里(其他公司很少做到这点),对硬件来说可以省很多事。除了上述特殊模块之外,当然也包括一般的LCDKPDAUDIO CODEC等很多驱动模块!具体如下图所示:

QSC6085处理器采用ARM9+DSP的架构,一般就不需要再加DSP去处理Audio和图片。它集成这么多,其他硬件厂商的饭碗都被他抢了,不过这也是大势所趋!

2.2 高通平台驱动文件结构

在一般高通工程(60X5系列)目录下有一个Drivers文件夹,在该文件夹下包含了60X5系列平台上所有驱动文件,分门别类!

从上图中我们可以看到,每一个驱动都有独立的文件夹,这样对于新手学习代码来说比较容易找到相关代码。

2.3  ARM相关知识

因为高通处理器采用的ARM内核,遵循ARM指令,我们有必要学习一下ARM的一些基础知识。一般驱动开发中很少涉及到ARM指令,除了BOOT以及flash开发,大部分都在C语言环境中开发。在这部分我讲的不会太深入,如果大家想深入了解ARM架构,可以去看《ARM体系结构与编程》这本书,相当经典!

2.3.1   ARM基本知识

ARM 采用的是32位架构。也就是说ARM CPU内部的总线是32位的,每条ARM汇编指令都是32位的指令。一个CPU时钟周期最多可以处理一条32位指令或者读取一个32位的数据。32位的指令意味着,与8位和16位的CPU相比,在一个时钟周期内,指令可以携带更多的信息。

ARM 有7个基本工作模式:

User:非特权模式,大部分任务执行在这种模式

正常程序执行的模式

FIQ:当一个高优先级(fast)中断产生时将会进入这种模式

高速数据传输和通道处理

IRQ:当一个低优先级(normal)中断产生时将会进入这种模式

通常的中断处理

Supervisor:当复位或软中断指令执行时将会进入这种模式

供操作系统使用的一种保护模式

Abort: 当存取异常时将会进入这种模式

虚拟存储及存储保护

Undef:当执行未定义指令时会进入这种模式

软件仿真硬件协处理器

System: 使用和User模式相同寄存器集的特权模式

特权级的操作系统任务

ARM 有37个32-Bits长的寄存器.

1 个用作PC( program counter)

1个用作CPSR(current program status register)

5个用作SPSR(saved program status registers)

30 个通用寄存器

当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以存取:

相应的r0-r12子集

相应的 r13 (the stack pointer, sp) and r14 (the link register, lr)

相应的 r15 ( the program counter, pc)

相应的CPSR(current program status register, cpsr)

特权模式 (除system模式) 还可以存取;

相应的 spsr (saved program status register)

CPSR寄存器表示当前ARM的工作状态

条件位:

N = 1-结果为负,0-结果为正或0

 

Z = 1-结果为0,0-结果不为0

C =1-进位,0-借位

V =1-结果溢出,0结果没溢出

 

 

Q 位:仅ARM 5TE/J架构支持,指示增强型DSP指令是否溢出

J 位:ARM 5TE/J架构支持 J = 1:  处理器处于Jazelle状态

中断禁止位:

I  = 1: 禁止  IRQ.

F = 1: 禁止  FIQ.

T Bit

: T = 0: 处理器处于 ARM 状态T = 1: 处理器处于 Thumb 状态

Mode位(处理器模式位):

0b10000  User

0b10001  FIQ

0b10010  IRQ

0b10011  Supervisor

0b10111  Abort

0b11011  Undefined

0b11111  System

2.3.2   ARM存储器格式

ARM体系中,每个字单元包含4个字节单元或者两个半字单元;一个半字单元中包含两个字节单元。但是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式;big_endian格式和little-endian格式。比如一个整型数0x12345678在内存中如下图所示

           -----------
          |    78   | xxxx_0000
           -----------
          |    56   | xxxx_0001
           -----------
         |    34   | xxxx_0002
         
-----------
        |    12   | xxxx_0003
          -----------
        
         Little Endian

-----------

 |    12   | xxxx_0000
        -----------
        |    34   | xxxx_0001
        -----------
        |    56   | xxxx_0002
        -----------
       |    78   | xxxx_0003
        -----------
       
        Big Endian