在高通7系列的架构中,一个IC内部集成有两个ARM处理器,一个ARM9,专门负责处理通信协议,射频以及GPIO等,另外一个是ARM11,用来处理多媒体,以及其他的一些任务。在ARM9端,有一个自己的操作系统,我们称之为AMSS (Advanced Mobile Subscriber Software),在ARM11端,可以执行我们熟知的一些操作一些,例如linux。这两个处理器之间通过shared memory的硬件方式来沟通,操作系统之间通过RPC - remote procedure call的方式交互数据。表面看看起来二者之间的通信很容易理解,但其实在实际开发上却是不同的。由于ARM9是负责最直接的硬件IO的控制,因此处理默认的PIN定义可以有AMSS先做好之外,如果在linux执行的时候改变的话,必须通过RPC去请求ARM9上面的AMSS来处理。然而,RPC是利用Shared memory driver来forward,由于shared memory driver是没有原始码的,因此对于linux kernel里面的driver来讲,有部分的API等同于是没有源码与追踪的。只能假设share memory里面的程序是没有问题的。
下面来看看AMSS的软件架构
|-- AMSS
| |-- platform
| |-- products
|
|-- AMSS_CUST
|--products
AMSS里面的就是amss的源码,包含platform以及我们对这个芯片提供的一些服务,这些服务都以task的形式存在products下。
在\AMSS\platform下包含有l4, cs, libstd, 与rte。这些为\AMSS\products下的task提供了底层运行环境。L4是内核,提供地址空间、线程、IPC等功能;cs(component service)实在L4的基础上提供了一个rte(run time environment),提供了内存保护,线程创建、同步等功能,高通定义了相关的接口可以让我们增加RTE所能提供的功能;libstd里面包含了AEE(application executive)的接口和一个静态的AEE库;rte里面包含一些与IPC有关的内容。
在\AMSS\products下包含很多内容,详情如下:
|-- 76XX
|-- 1x // Source code for CDMA 1x protocol
|-- apps // Source code for some BREW apps, such as core and UI
|-- apps_proc // Application boot loader
|-- build // Trace32 JTAG script for building, build image, and log
|-- core // Shared APIs folder
|-- dal // Device abstract layer code
|-- data // Source code for data services
|-- drivers // Drivers for LCD, peripherals, etc.
|-- hal // Hardware abstract layer code
|-- hdr // Source code for high data rate protocal
|-- modem // Modem AMSS source code
|-- modem_proc // Modem AMSS boot files
|-- multimedia // Multimedia files, including audio, video, etc.
|-- nas // Source code for NAS layer protocal
|-- secboot // Boot loaders, from PBL to OEMSBL
|-- services // Source code for services
|-- tools // Code for flash operations
|-- wcdma // Source code for WCDMA protocol
|-- wconnect // BT soc config and ftm (factory test mode)
阅读(1381) | 评论(0) | 转发(1) |