MTK驱动架构详解
- 格式:ppt
- 大小:464.50 KB
- 文档页数:54
手机原理图分析一、手机基本电路框图:二、基带CPU(MT6226)内部框图:1、组成部分:z DSP:主要完成对语音信号的编解码、信道编码、加密、交织处理等;z ARM7:主要是对外部Memory接口、用户接口(LCD、键盘、触摸等)、语音接口、射频接口、电源管理等的命令控制,使各部分协调工作。
2、基带部分语音编码过程(DSP):GSM标准规定时隙宽为0.577ms,8个时隙为一帧,帧周期为0.577×8=4.615ms。
因此,用示波器观测GSM移动电话机收发信息,会看到周期为4.615ms、宽0.577ms的突发脉冲。
基带部分电路包括信道编/译码、加密/解密、TDMA帧形成/信道分离及基准时钟电路,它还包括话音/译码、码速适配器等电路。
来自送话器的话音信号经过8kHz抽样及A/D转换,变成13bit均匀量化的104kbit/s数据流,再由话音编码器进行RPE-LTP编码。
编码输入为每20ms一段,经话音编码压缩后变为260bit,其中LPC-LTP为72bit,RPE为188bit。
话音编码后的信号速率为13kbit/s。
同时话音编码器还提供话音活性检测(vAD)功能,即当有话音时,其SP信号为1;当无话音传输时,将SP示为0(即SID帧)。
13kbit/s 话音信号进入信道编码器进行编码。
对于话音信号的每20ms 段,信道编码器首先对话音信号中最重要的Ia 类50bit 进行分组编码(CRC 校验),产生3bit 校验位,再与132bit 的Ib 类比特组成185bit ,再加上4个尾比特“0”,组合为189bit ,这189bit 再进入1/2速率卷积码编码器,该编码限制长度为5,最后产生出378bit 。
这378bit 再与话音信号中对无线信道最不敏感的II 类78bit 组成最终的456bit 组。
同样,对于信令信号,由控制器产生并送给信道编码器,首先按FIRE(法尔)码进行分组编码(称为块编码),然后再进入1/2卷积编码,最后形成456bit 组。
MTK驱动基本介绍MTK(Mediatek Inc.)是台湾联发科技股份有限公司的一个子公司,是一家全球领先的半导体芯片设计公司。
MTK驱动(Mediatek Driver)是联发科技开发的一款设备驱动程序,用于支持和管理MTK系列芯片的硬件设备。
MTK驱动的目的是为了提供对MTK芯片的各种硬件设备的支持,使其能够在计算机系统中正常工作。
MTK芯片广泛用于智能手机、平板电脑、智能家居、物联网等领域的设备,而MTK驱动则起到了连接和协调计算机系统和硬件设备之间的桥梁作用。
1.提供设备识别和连接:MTK驱动可以识别MTK芯片的硬件设备,并与计算机系统进行连接,完成设备的初始化和配置工作。
2.实现设备通信和数据传输:MTK驱动通过与设备之间的通信接口,实现了设备和计算机之间的数据传输和交互,包括文件的读写、音视频的传输和图像的显示等。
3.支持设备管理和控制:MTK驱动可以对MTK芯片的硬件设备进行管理和控制,包括设备的开关、功能设置、驱动安装和升级等。
4.提供系统稳定性和兼容性:MTK驱动经过严格的测试和验证,能够保证在不同的计算机系统环境下的稳定性和兼容性,确保硬件设备能够正常工作。
5.支持开发者和用户的需求:MTK驱动提供了丰富的开发工具和接口,为开发者和用户提供定制化和个性化的驱动支持,方便二次开发和扩展。
2.连接设备和计算机:使用USB数据线或其他连接方式将MTK芯片的硬件设备连接到计算机上。
3.设置设备连接模式:根据设备的不同,选择合适的连接模式,如USB存储模式、USB调试模式等。
4.等待系统安装驱动:当设备连接到计算机后,操作系统会自动检测并安装相应的MTK驱动程序,期间需要等待一段时间。
5.使用设备:一旦驱动安装完成,设备就可以在计算机上正常工作,可以进行文件传输、数据交互、驱动管理等操作。
总之,MTK驱动是一款重要的软件工具,为MTK芯片的硬件设备提供了必要的支持和管理功能,使其能够在计算机系统中正常工作。
管理篇接收到扫描完毕nicRxSDIOAggReceiveRFBssdio有两个通道,两个通道获取数据的流程是一样的,1)通过prEnhDataStr->rRxInfo.u.u2NumValidRx0Len可以获取到该通道目前存储有多少数据包,通道数据包的存储量只有16个,如果超过16个则是固件问题,跳过看下一个通道的2)然后获取当前freeswrfb空闲空间是否够用,不够用则看下一个通道的。
3)可接收的聚合报文(管理帧)长度(u4RxAvailAggLen)为23524)循环遍历某个通道的报文,读到报文长度+4 然后按照4个字节对齐从u4RxAvailAggLen 扣减掉。
如果空间不够则跳出。
5)遍历完之后用2352减去u4RxAvailAggLen 可以得到总的数据长度通过dma获取数据到prRxCtrl->pucRxCoalescingBufPtr中1)6)遍历通道中报文数,把每个报文拷贝到prSwRfb->pucRecvBuff中,并且填充prSwRfb->ucPacketType和prSwRfb->ucStaRecIdx2)nicRxSetupRFB3)如果prSwRfb->pvPacket为空,则先将prSwRfb置成0,然后按照2352分配sk_buff,prSwRfb->pucRecvBuff指向skb->data,prSwRfb->pvPacket指向skb1)同时,prSwRfb->prHifRxHdr指向skb->data首部。
2)nicRxFillRFB3)从prHifRxHdr->ucHerderLenOffset获取出header的offset和MACHeaderLen4)设置prSwRfb->pvHeader指向skb->data越过prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset,指向的将是beacon帧结构5)重置prSwRfb->u2HeaderLen=u4MacHeaderLen 和prSwRfb->u2PacketLen为原来skb->data长度减去(HIF_RX_HDR_SIZE + u4HeaderOffset)MacHeader 如下图:nicAddScanResult该函数分为replace和add部分,先讲解add部分Add1)如果prAdapter->rWlanInfo.u4ScanResultNum小于63则继续往下走2)先将prAdapter->rWlanInfo.arScanResult[i]到aucIE之前的部分设置为03)设置prAdapter->rWlanInfo.arScanResult[i].u4Length为aucIE之前的部分的长度+IE的长度4)拷贝mac地址到prAdapter->rWlanInfo.arScanResult[i].arMacAddress5)拷贝ssid到prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid6)设置u4Privacy、rRssi、eNetworkTypeInUse、eOpMode等7)拷贝prConfiguration到prAdapter->rWlanInfo.arScanResult[i].rConfiguration中8)拷贝rSupportedRates到prAdapter->rWlanInfo.arScanResult[i].rSupportedRates中9)拷贝u2IELength到prAdapter->rWlanInfo.arScanResult[i].u4IELength10)如果u2IELength大于0 则检查aucScanIEBuf是否够放下当前bssdesc的IE部分,如果可以的话,则拷贝到aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage],然后设置指针到apucScanResultIEs[i]中,接下来重置u4ScanIEBufferUsage的值。
基于MTK平台Camera驱动简介软件开发部:John.WangCamera的硬件架构ARM Image signalCMOS Sensorprocessor& resizerMemoryImage encodeLCD软件开发部:John.WangCamera模块硬件在手机上的基本架构有三种(一)Baseband控制LCD+Sensor.Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera模块硬件在手机上的基本架构有三种(二)Baseband控制LCD+Backend IC,Backend IC控制Sensor。
Camera模块硬件在手机上的基本架构有三种(三)Baseband控制Backend IC,并且在非Camera模式下Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera 接口信号sensor MTK cameraVCAMA, VCAMDCMDAT0~7CMVREFCMHREFCMMCLKCMPCLKCMPDNCMRSTSCLKSDACamera 接口信号signal descriptionCMVREF CMOS sensor vertical reference signal input CMHREF CMOS sensor horizontal reference signal input SCLK IIC interface clock signalSDA IIC interface data signalCMMCLK CMOS sensor master clock output CMPCLK CMOS sensor pixel clock intputCMPDN CMOS sensor power down control CMRST CMOS sensor reset signal outputVCAMA Camera module analog powerVCAMD Camera module digital powerCMDAT0~7Camera data busIIC时序控制Camera interface时序控制Camera程序架构软件开发部:John.WangCamera程序架构MMI taskCamera APP:控制应用程序逻辑,Camera的状态机,包括了preview,capture,exit等各种状态控制。
手机原理图分析一、手机基本电路框图:二、基带CPU(MT6226)内部框图:1、组成部分:z DSP:主要完成对语音信号的编解码、信道编码、加密、交织处理等;z ARM7:主要是对外部Memory接口、用户接口(LCD、键盘、触摸等)、语音接口、射频接口、电源管理等的命令控制,使各部分协调工作。
2、基带部分语音编码过程(DSP):GSM标准规定时隙宽为0.577ms,8个时隙为一帧,帧周期为0.577×8=4.615ms。
因此,用示波器观测GSM移动电话机收发信息,会看到周期为4.615ms、宽0.577ms的突发脉冲。
基带部分电路包括信道编/译码、加密/解密、TDMA帧形成/信道分离及基准时钟电路,它还包括话音/译码、码速适配器等电路。
来自送话器的话音信号经过8kHz抽样及A/D转换,变成13bit均匀量化的104kbit/s数据流,再由话音编码器进行RPE-LTP编码。
编码输入为每20ms一段,经话音编码压缩后变为260bit,其中LPC-LTP为72bit,RPE为188bit。
话音编码后的信号速率为13kbit/s。
同时话音编码器还提供话音活性检测(vAD)功能,即当有话音时,其SP信号为1;当无话音传输时,将SP示为0(即SID帧)。
13kbit/s 话音信号进入信道编码器进行编码。
对于话音信号的每20ms 段,信道编码器首先对话音信号中最重要的Ia 类50bit 进行分组编码(CRC 校验),产生3bit 校验位,再与132bit 的Ib 类比特组成185bit ,再加上4个尾比特“0”,组合为189bit ,这189bit 再进入1/2速率卷积码编码器,该编码限制长度为5,最后产生出378bit 。
这378bit 再与话音信号中对无线信道最不敏感的II 类78bit 组成最终的456bit 组。
同样,对于信令信号,由控制器产生并送给信道编码器,首先按FIRE(法尔)码进行分组编码(称为块编码),然后再进入1/2卷积编码,最后形成456bit 组。
MTK驱动基本介绍
MTK驱动,也称为MediaTek驱动,是一种特定于联发科技(MediaTek)芯片的驱动程序。
联发科技是全球领先的半导体解决方案提
供商之一,其产品广泛应用于移动通信、家庭娱乐、无线通信和物联网等
领域。
MTK驱动的作用是连接计算机与MTK芯片设备之间的通信,使得计算
机可以与MTK芯片设备进行数据交互和控制。
这些设备包括智能手机、平
板电脑、物联网设备以及其他使用MTK芯片的电子产品。
MTK驱动是连接
计算机和这些设备之间桥梁的关键。
MTK驱动负责与芯片设备之间的通信协议,包括数据传输、设备识别、设备控制等功能。
它通过USB接口与计算机连接,并与操作系统进行交互,将设备的功能暴露给计算机使用者。
MTK驱动的正常工作对于设备的功能
和性能至关重要。
MTK驱动的开发是一个复杂而严谨的过程。
开发人员需要深入研究MTK芯片的架构和规范,并编写适配特定芯片的驱动程序。
他们还需要进
行严格的测试和验证,以确保驱动程序在各种情况下都能正常工作。
同时,开发人员还需要与MTK芯片的生产商保持密切合作,获取相关技术支持和
更新。
总之,MTK驱动是一种桥梁,将计算机与MTK芯片设备连接起来。
它
通过通信协议实现数据传输和设备控制,使得用户可以便捷地使用MTK芯
片设备。
MTK驱动的适应性和兼容性优势使得其成为移动通信和物联网领
域的重要组成部分。
同时,MTK驱动的安装和更新也是用户使用设备时需
要考虑的重要问题。
Camera驱动流程总结范军君junjun.fan@目录1,Camera架构及流程简析2,初始化过程camera id检测3,Camera上电流程4,Camera打开流程Camera架构及流程简析MTK平台camera架构:Kernel部分主要有两块:一块是image sensor驱动,负责具体型号的sensor的id检测,上电,以及在preview,capture,初始化,3A等等功能设定时的寄存器配置。
另一块是isp driver,通过DMA将sensor数据流上传。
本篇主要介绍image sensor驱动的流程。
HAL层这边主要分3块,一块是imageio,主要是数据buffer上传的pipe。
一块是drv,包含imgsensor和isp的hal层控制。
最后是feature io,包含各种3A等性能配置。
本篇对HAL涉入不深,只在分析开机过程的id检测时会分析hal层的控制,属于第二块。
流程简析:主要发生在两个时间点:开机过程中camera的动作以及打开应用时camera的动作。
开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作。
打开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环。
初始化过程camera id检测代码分析:=>alps/mediatek/custom/common/kernel/imgsensor/kd_sensorlist.cmodule_init说明这段code在kernel初始化,也就是手机开机时运行。
在模块初始化函数中,注册一个i2c device,同时注册了一个platform driver注意driver name,匹配platform device需要名字一致。
Platform总线为虚拟总线,注册platform driver主要目的是隔离上下层,增强代码的可移植性。
MTKLCM驱动分析参考:/cbk861110/article/details/40931835⼀.驱动分析5.1Mtkfb.c (kernel-3.10\drivers\misc\mediatek\videox\mt6735)1.初始化mtkfb_initplatform_driver_register(&mtkfb_driver)2.重要结构体static struct fb_ops mtkfb_ops = {.owner = THIS_MODULE,.fb_open = mtkfb_open,.fb_release = mtkfb_release,.fb_setcolreg = mtkfb_setcolreg,.fb_pan_display = mtkfb_pan_display_proxy,.fb_fillrect = cfb_fillrect,.fb_copyarea = cfb_copyarea,.fb_imageblit = cfb_imageblit,.fb_cursor = mtkfb_soft_cursor,.fb_check_var = mtkfb_check_var,.fb_set_par = mtkfb_set_par,.fb_ioctl = mtkfb_ioctl,#ifdef CONFIG_COMPAT.fb_compat_ioctl = mtkfb_compat_ioctl,#endif#ifdef CONFIG_DMA_SHARED_BUFFER.fb_dmabuf_export = mtkfb_dmabuf_export,#endif};probestrstr(saved_command_line, "fps="); //得到UBOOT传过来的参数fbi = framebuffer_alloc(sizeof(struct mtkfb_device), dev); //分配fb_info结构体mtkfb_find_lcm_driver :hj101na02a_lcm_drvdisp_drv_get_lcm_driverlcm->set_util_funcs(&lcm_utils); //设置LCD操作函数lcm->get_params(lcm_params); //得到LCD的⼀些硬件参数disp_drv_init_ctrl_if //如果是DBI(mcu 屏)//LCM_CTRL_SERIAL_DBILCD_Init()LCD_ConfigSerialIF//LCM_CTRL_PARALLEL_DBILCD_Init()LCD_ConfigParallelIFLCD_SelectWriteIF //选择是串⼝还是并⼝LCD_ConfigIfFormat //配置接⼝的数据类型to_lcd_if_width //数据宽度,DBIdisp_drv_set_driving_current //设置接⼝的电流LCD_Init_IO_pad //初始化GPIOdisp_drv_init_contextDISP_GetDriverDBI :DBI_DISP_DRV 操作函数DISP_GetDriverDPI :DPI_DISP_DRVDISP_GetDriverDSI :DSI_DISP_DRV//得到LCD的⼀些参数DISP_GetScreenWidth。
1.配置GPIO 并初始化gpio_drv.c内的void GPIO_init(void) 进行初始化1.DRV_WriteReg(GPIO_MODE1,0x0000) 设置模式2.DRV_Reg(GPIO_DIR1) |= 0x00FF 设置方向0 GPIOs are configured as input1 GPIOs are configured as output2.audio_pa配置音频对应Driver部分主要需要留意以下三支档案:afe.c AMP gpo settingaudcoeff.c 首先需要注意是的output channel的配置,配置错误将出现没有声音的现象。
(见audio_驱动.pdf) 此文件需要注意output channel 、FIR setting和echo参数的设置audcoeff_default.h 定义语音增强参数nvram_default_audio.c 此文件主要配置各音阶的音量AUD_VOLUME_CTN :call waiting tone, error tone, warning toneAUD_VOLUME_KEY :keypad tone]AUD_VOLUME_MIC :microphone inputAUD_VOLUME_FMR :FM radio soundAUD_VOLUME_SPH :speech sound (during phone call)AUD_VOLUME_SID :side tone (sound loop-back)AUD_VOLUME_MEDIA :music1.设置模式,方向,上拉gpio_drv.c 里配置2.afe.c 文件里void AFE_SwitchExtAmplifier( char sw_on )设置3.afe2.c 文件里void AFE_TurnOnExtAmplifier( void )void AFE_TurnOffExtAmplifier( void )进行调用.3.触摸屏先初始化,后期是自动配置1.在eint_var.c里看中断2.touch_panel_spi.h 配GPIO 口3.touch_panel_spi.c Implement serial interface4.touch_panel_custom.c Set ADC and coordinate calibration4.FM1.RDA5800_SerialComm.c 配GPIO 口2.RDA5800_drv.c 函数的实现5.跑马灯\背光灯1.custom_equipment.c 或者uem_gpio.c 中找2.SN3726_LIGHT_LED3.lcd_backlight_set6.MT6318 driver1.pmic_custom.c2.Engineer mode3.*#3646633# =>Device=>PMIC7.工程模式参数1.CustResDef.h8.软件调speecher大小1.Audcoeff.c2.DG_DL_SPEECH = 0X1000 指gain = 13.DG_MICPHONE = 0X1400 最大0x2000 gain = 29.项目(6225平台),原先做的900/1800双频,校准综测都是正常的。
MTK平台:基于32bit ARM7EJ-S Risc处理器,GPRS Class12 Modem.功能扩展接口:3个port外部内存接口,3个8/16bit并行接口,Nand Flash,IrDA,USB 和MMC/SD/MS/MS Pro.时钟频率:104MHz;48K Bytes on-chip SRAM;72K Bytes MCU dedicated Tightly Coupled MemoryMCU_CLOCK = MCU_104M # MCU clock setting, MCU_13M, MCU_26M, MCU_39M, MCU_52M, MCU_104MEXT_CLOCK = EXT_26M # External clock source setting, EXT_13M, EXT_26M RF_MODULE = LENOVOSH25_06B_PMJ_MT6139E;PMIC = MT6318 # Charge Function, NONE, MT6305 or MT6318 PLA TFORM = MT6225 # Hardware Platform, MT6208, FPGA, MT6218, MT6218B, MT6219, MT6226, MT6227, MT6228, MT6229 ...etc.MCU启动流程:UART口在26Mhz环境下150ms内,若没收到start命令,它会自动从flash的0x0地址去执行。
否则:Meta模式的触发(trigger)命令,是一个目标寄存器的写命令。
寄存器:0x80120000=0x01(MT6217/ MT6218/ MT6219/ MT6226/ MT6227/)离开bootrom后,发生在flash上的第一个动作是关闭IRQ和FIQ,并且确保系统进入监视模式;Remapping,即地址0x00将被切换到SRAM上面;检测非正常reset,从flash上拷贝读/写数据,随后栈指针(sp)初始化;最后,MCU的启动序列在应用程序进入点终止;Remapping为了remapping成功,如下修改是必须的:1 SRAM开始的320Byte内存要保留,用于异常处理,异常处理代码在reset后从flash复制。
管理篇接收到扫描完毕nicRxSDIOAggReceiveRFBssdio有两个通道,两个通道获取数据的流程是一样的,1)通过prEnhDataStr->rRxInfo.u.u2NumValidRx0Len可以获取到该通道目前存储有多少数据包,通道数据包的存储量只有16个,如果超过16个则是固件问题,跳过看下一个通道的2)然后获取当前freeswrfb空闲空间是否够用,不够用则看下一个通道的。
3)可接收的聚合报文(管理帧)长度(u4RxAvailAggLen)为23524)循环遍历某个通道的报文,读到报文长度+4 然后按照4个字节对齐从u4RxAvailAggLen 扣减掉。
如果空间不够则跳出。
5)遍历完之后用2352减去u4RxAvailAggLen 可以得到总的数据长度通过dma获取数据到prRxCtrl->pucRxCoalescingBufPtr中1)6)遍历通道中报文数,把每个报文拷贝到prSwRfb->pucRecvBuff中,并且填充prSwRfb->ucPacketType和prSwRfb->ucStaRecIdx2)nicRxSetupRFB3)如果prSwRfb->pvPacket为空,则先将prSwRfb置成0,然后按照2352分配sk_buff,prSwRfb->pucRecvBuff指向skb->data,prSwRfb->pvPacket指向skb1)同时,prSwRfb->prHifRxHdr指向skb->data首部。
2)nicRxFillRFB3)从prHifRxHdr->ucHerderLenOffset获取出header的offset和MACHeaderLen4)设置prSwRfb->pvHeader指向skb->data越过prHifRxHdr + HIF_RX_HDR_SIZE + u4HeaderOffset,指向的将是beacon帧结构5)重置prSwRfb->u2HeaderLen=u4MacHeaderLen 和prSwRfb->u2PacketLen为原来skb->data长度减去(HIF_RX_HDR_SIZE + u4HeaderOffset)MacHeader 如下图:nicAddScanResult该函数分为replace和add部分,先讲解add部分Add1)如果prAdapter->rWlanInfo.u4ScanResultNum小于63则继续往下走2)先将prAdapter->rWlanInfo.arScanResult[i]到aucIE之前的部分设置为03)设置prAdapter->rWlanInfo.arScanResult[i].u4Length为aucIE之前的部分的长度+IE的长度4)拷贝mac地址到prAdapter->rWlanInfo.arScanResult[i].arMacAddress5)拷贝ssid到prAdapter->rWlanInfo.arScanResult[i].rSsid.aucSsid6)设置u4Privacy、rRssi、eNetworkTypeInUse、eOpMode等7)拷贝prConfiguration到prAdapter->rWlanInfo.arScanResult[i].rConfiguration中8)拷贝rSupportedRates到prAdapter->rWlanInfo.arScanResult[i].rSupportedRates中9)拷贝u2IELength到prAdapter->rWlanInfo.arScanResult[i].u4IELength10)如果u2IELength大于0 则检查aucScanIEBuf是否够放下当前bssdesc的IE部分,如果可以的话,则拷贝到aucScanIEBuf[prAdapter->rWlanInfo.u4ScanIEBufferUsage],然后设置指针到apucScanResultIEs[i]中,接下来重置u4ScanIEBufferUsage的值。
MTK是现在市场上所有国内手机设计、制造商使用的最多的一个完整的手机产品解决方案,大部分做手机的技术人员都对此有接触和了解。
不过,MTK的整套软件系统十分庞大且复杂,很多刚接触这套系统的软件工程师一时不知如何进行配置和客户化定制。
本文在此对整个MTK软件系统的工程结构和配置进行了简单介绍,希望通过此文和大家相互交流MTK软件系统的维护和修改、定制方面的心得。
MTK使用了nucleus实时操作系统,在其上做了个内核抽象层的封装,以适应多种实时操作系统,如oscar、ThreadX、nucleus。
整个软件系统包括nucleus操作系统、平台设备驱动、协议栈、文件系统、WGUI、MMI、J2ME等。
在这里MMI部分几乎包括了操作系统内核、协议栈、文件系统之上的所有部分,其中WGUI也在其中。
MTK的PC模拟版使用VC的编译器和链接器生成,ARM版使用ADS1.2的编译器和链接器生成。
因为MTK的整个软件系统是一个很庞大而且复杂的工程,并且要支持多个MTK的产品系列和多家客户的客户化支持,使用集成开发环境(IDE)已经无法胜任,而且很难做到整个工程的自动构建和资源、代码的生成。
所以MTK的软件系统使用了windows下的GNU开发工具链(MinGW)来进行工程的管理、配置和构建,MTK将MinGW放到了第三方工具中。
另外还使用了perl脚本来解析用户输入的命令行参数,因此第三方工具中还包含了ActivePerl(windows下的perl解释器)。
不过,整个软件系统并没有使用MinGW的全部工具,好象只使用了make这个工具,由几个Makefile控制了构建的过程,在编译和链接时根据最终生成PC模拟版还是ARM版而分别调用VC的编译器和链接器或ADS1.2的编译器和链接器。
接下来我们从具体的工程实践来看MTK的手机软件系统。
一. MTK手机软件系统的目录结构简介MTK手机软件系统的主要目录如下所示,因整个工程的目录树非常庞大,为简单起见和减小篇幅,去除了在工程结构中相对不重要的目录。
首次出关于MTK方面的驱动文章,网上也很少有这方面的文章,所以我立志要写几篇这样的文章来引导刚出道的朋友们,咱们一起努力!大家都说MTK简单,但我个人做过高通平台一年时间,然后转而做MTK平台,感觉还是能学到东西的,代码并不比所谓的高通简单,只是它做的好,封装的好,所以做这块驱动可能开发者做的事情没高通多,所以大家觉得容易,学不到东西。
但只要自己对技术执着,深入到架构的实现,还是能学到很多的。
我要让大家有这样一个思想,我们做MTK平台的不比做其他任何平台的差。
一. SD卡的基本知识:SD卡有9个pin脚(micro-SD为8个,少一个接地pin脚),如图所示,SD的数据传输方式有两种,普通SD模式和SPI模式,以SD模式为例,9个pin脚分别是VDD,VSS,CLK,以及我们需要关注的一根指令线CMD,4根数据线DAT0~DAT3。
分类:∙按存储大小,普通SD卡(<=2GB,支持FAT12/FAT16),HCSD卡(>2GB,<=32GB,支持FAT32)∙按体积大小,普通SD卡,mini-SD卡,micro-SD卡(TF卡)速度∙默认模式: 12.5MB/s∙高速模式: 25MB/s二. SD卡在MTK6573中的架构涉及到的文件有:mediatek/platform/mt6573/kernel/drivers/mmc-host/sd.cmediatek/platform/mt6573/kernel/drivers/mmc-host/mt6573_sdc.c 下面就整个驱动的流程过一下:系统起来的时候执行static int __init mt6573_sd_init(void) 在这个函数里最重要的是执行platform_driver_register(&mt6573_sd_driver),即注册到内核的虚拟总线上,注册的原则是把驱动mt6573_sd_driver各参数进行初始化。