mtkwifidriver驱动的分析

合集下载

MTK_驱动总结文档

MTK_驱动总结文档

MTK_驱动总结文档G616 驱动文档总结在/mediatek/custom下会有好多重名的文件,在不同的文件夹里,最终会编译哪个文件是根据目录的优先级来判断brighter89_evdo_jb2 > mt6589 > xxmon也就是说如果brighter89_evdo_jb2 ,mt6589 , xxmon 同时存在一文件,最终编译的会是brighter89_evdo_jb2目录下的文件也可以通过/mediatek/custom/out/开判断,此文件时最终编译的文件运行/mediatek/dct/。

选择文件/mediatek/custom/brighter89_evdo_jb2/kernel/dct/dct /Edit,打开后可以修改GPIO的模式,上拉,下拉,输入,输出修改后点击“Save”和“Gen Code”重新编译:./makeMtk brighter89_evdo_jb2 codegen ./makeMtk brighter89_evdo_jb2 new pl lk kernel ./makeMtk brighter89_evdo_jb2 bootimage提交时替换bw/custom/project/g616/mediate/custom/brighter89_evdo_jb2/kernel/dct/dct修改CUSTOM_LK_LCM=hx8389b_qhd_dsi_vdoBOOT_LOGO=qhd //根据屏的分辨率CUSTOM_KERNEL_LCM=hx8389b_qhd_dsi_vdo LCM_HEIGHT=960 LCM_WIDTH=540/mediatek/custom/xxmon/kernel/lcm目录名与下hx8389b_qhd_dsi_vdo名字相同,目录下为驱动文件在/mediatek/custom/xxmon/kernel/lcm/mt65xx_lcm_下添加要添加的屏#if defined(HX8389B_QHD_DSI_VDO) &hx8389b_qhd_dsi_vdo_lcm_drv, #endif下修改CUSTOM_HAL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_HAL_MAIN_IMGSENSOR=ov5648_mipi_rawCUSTOM_HAL_SUB_IMGSENSOR=hi257_yuvCUSTOM_KERNEL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5648_mipi_raw CUSTOM_KERNEL_SUB_IMGSENSOR=hi257_yuv驱动要添加的文件:/mediatek/custom/xxmon/kernel/imgsensor/ov5648_mipi _raw /mediatek/custom/xxmon/hal/imgsensor/ ov5648_mipi_raw//hi257前camera同理/mediatek/custom/xxmon/hal/imgsensor/src/ #if defined(OV5648_MIPI_RAW)RAW_INFO(OV5648MIPI_SENSOR_ID, SENSOR_DRVNAME_OV5648_MIPI_RAW, NULL), #endif /mediatek/custom/xxmon/kernel/imgsensor/src/ kd_ #if defined(OV5648_MIPI_RAW) {OV5648MIPI_SENSOR_ID,SENSOR_DRVNAME_OV5648_MIPI_RAW,OV5648MIPISensorInit}, #endifCamera电所在文件:/mediatek/custom/brighter89_evdo_jb2/kernel/camera/ camera/kd_camera_ 核心驱动文件:/mediatek/custom/xxmon/kernel/imgsensor/src /kd_ 如果修改HAL层参数编译命令如下:./makeMtk -t brighter89_evdo_jb2 mm mediatek/platform/mt6589/hardware/camera/下修改: CUSTOM_HAL_LENS=dw9714afCUSTOM_HAL_MAIN_LENS=dw9714af CUSTOM_KERNEL_LENS=dw9714afCUSTOM_KERNEL_MAIN_LENS=dw9714af添加对应的文件夹和驱动文件/G616/mediatek/custom/xxmon/kernel/lens/dw9714af/ M config/mt6589/M custom/brighter89_evdo_jb2/hal/lens/src/ M custom/xxmon/hal/inc/camera_custom_A custom/xxmon/hal/lens/dw9714af/lens_para_ M custom/xxmon/hal/lens/src/ A custom/xxmon/kernel/lens/dw9714af/ A custom/xxmon/kernel/lens/inc/M platform/mt6589/hardware/camera/core/featureio/drv/ lens/mcu_下修改:CUSTOM_KERNEL_FLASHLIGHT=constant_flashlight CUSTOM_HAL_FLASHLIGHT=constant_flashlight驱动核心:/mediatek/custom/xxmon/kernel/flashlight/src/kd_/mediatek/custom/xxmon/kernel/flashlight/constant_f lashlight/leds_G616用的bd7710gwl driver IC,leds_会有相应的更改,文件修改都放到bw目录下 HAL tunning 文件:mediatek/custom/brighter89_evdo_jb2/hal/camera/came ra/flash_tuning_下修改:CUSTOM_KERNEL_TOUCHPANEL=ft5336驱动文件:mediatek/custom/xxmon/kernel/touchpanel/ft5336/ft53 36_/home/chenjian/CJ_WORK/code/G616/mediatek/custom/br ighter89_evdo_jb2/kernel/touchpanel/ft5336/tpd_cust om_下修改:CUSTOM_KERNEL_ACCELEROMETER=lis3dh CUSTOM_KERNEL_ALSPS=tmd2772驱动文件:/mediatek/custom/xxmon/kernel/accelerometer/lis3dh/ //gsensor 配置I2c和Gsensor 的position/mediatek/custom/brighter89_evdo_jb2/kernel/acceler ometer/lis3dh/cust_ static struct acc_hw cust_acc_hw = { .i2c_num = 3,.direction = 6, //chenjian 20XX-12-26 modify gsensor position.power_id = MT65XX_POWER_NONE, /*!< LDO is not used */ .power_vol= VOL_DEFAULT, /*!< LDO is not used */.firlen = 0, //old value 16 /*!< don't enable low pass fileter */ };/mediatek/custom/xxmon/kernel/alsps/tmd2772/ //psensor light sensor 配置I2c和 light sensor上报数据/mediatek/custom/brighter89_evdo_jb2/kernel/alsps/t md2772/cust_.als_level = { 4, 40, 80, 120, 160, 240, 400, 800, 1200, 1600, 20XX, 3000, 5000, 8000, 65535}, .als_value = {0,20, 60, 100, 150, 240, 400, 600, 1000, 1500, 20XX,3000, 5000, 8000, 10000, 10000},配置xls/mediatek/build/tools/emigen/MT6589/MemoryDeviceLis t_都是MTK release的,需要添加的memory要在MemoryDeviceList_表里,且名字与/mediatek/custom/brighter89_evdo_jb2/preloader/inc/ custom_名字需一样如H9TP32A8JDBCPR_KGM 需和MemoryDeviceList_表的名字一样 #define BOARD_ID MT6589_EVB#define CS_PART_NUMBER[0] SD7DP28C_4G#define CS_PART_NUMBER[1] H9TP32A8JDBCPR_KGM Memory兼容:向下添加即可#define CS_PART_NUMBER[2] #define CS_PART_NUMBER[3] ….….9.音频参数硬件同事,通过工具修改,导出文件,替换如下目录/mediatek/custom/brighter89_evdo_jb2/cgen/inc/。

MTK软件培训课程(三)MTK驱动架构分析精品PPT课件

MTK软件培训课程(三)MTK驱动架构分析精品PPT课件
除了Camera模块外,Idle screen和Media Player 等也使用GDI。
GDI和pixtel_UI的关系
GDI的实现
使用GDI_HANDLE,gdi_handle来操作 GDI对象,GDI的对象可以是layer,gif, jpeg等。 GDI函数返回一个GDI_RESULT GDI函数使用互斥来保护,进入GDI函数 时调用GDI_ENTER_CRITICAL_SECTION()退 出函数时调用GDI_EXIT_CRITICAL_SECTION()
Media Task线程从med_create开始创建,其实 med_create函数只是将入口地址传递给库里的 函数,由里面的函数来创建线程。
Med_create中传入了以下的函数:
med_task_main,
/* 线程入口,消息泵 */
med_init,/*源自初始化 ,指定空间分配*/NULL,
设置当前活动模块,通过stack_set_active_module_id 分发消息,通过消息号,找到对应的消息处理函数,
使用med_main函数。程序里面有很大的一个消息索 引 释放返回消息数据内存区域,free_ilm
Media Task消息
从med_maincam_main相应的消息处 理函数,这时从MDI发过来的一个消息 才被识别,并进入相应的消息处理函数。 这时,我们回过头来再来看我们前面在 MDI章节所分析的Preview实现的例子, 会更清晰一些。 原来的例子:Preview实现
Media Task
Media Task模块分成4个部分:
Camera Audio Image Video
Media Task
Media Task模块有以下的作用:

MTK驱动基本介绍

MTK驱动基本介绍

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芯片的硬件设备提供了必要的支持和管理功能,使其能够在计算机系统中正常工作。

MTK系统和驱动

MTK系统和驱动

驱动部分详细讲解 1 开机启动流程:
RESET Boot from BOOTROM
Receiving start- up pattern via UART1 within 150ms?
YES META Mode
NO
Switch PC to External Device Bank #0 Assign Supervisor Mode SP
Touch Panel
LCD LCD Display Display
Media IC
Camera
MTK软件分层初步解析
1、OS层:RTOS嵌入式实时操作系统。
在nucleus.h中看到操作系统的各类操作函数,其 主要作用是实时和效的去调度当前的多项任务, 合理的去管理内存,合理的管理当前资源如TIMER 等。 主模块:任务管理、定时器管理、存储器管理、 资源管理、事件管理、消息管理、队列管理、旗 语管理等。 提问:我们平常调用的kal_sleep_task函数是 如何通过OS实现的?
• 必须学会欣然面对的一种结果----被接纳
真思考如何为以后的发展开好头。
• 以具体的形式感谢招聘单位的接纳,如邮件、短信 • 考虑怎样使自己的知识能力更适应工作需要 • 把走进工作岗位当作职业生涯的重要的第一步,认
Thank you
Reserved_vector B Reserved_vector 未定义中断
IrqHandler B IrqHandler
IRQ
FiqHandler
FIQ 快速中断
…………………………. BL
C_Main 转C入口
谢谢!
求职应注意的礼仪
• 求职时最礼貌的修饰是淡妆 • 面试时最关键的神情是郑重

MTK驱动基本介绍

MTK驱动基本介绍

MTK驱动基本介绍
MTK驱动,也称为MediaTek驱动,是一种特定于联发科技(MediaTek)芯片的驱动程序。

联发科技是全球领先的半导体解决方案提
供商之一,其产品广泛应用于移动通信、家庭娱乐、无线通信和物联网等
领域。

MTK驱动的作用是连接计算机与MTK芯片设备之间的通信,使得计算
机可以与MTK芯片设备进行数据交互和控制。

这些设备包括智能手机、平
板电脑、物联网设备以及其他使用MTK芯片的电子产品。

MTK驱动是连接
计算机和这些设备之间桥梁的关键。

MTK驱动负责与芯片设备之间的通信协议,包括数据传输、设备识别、设备控制等功能。

它通过USB接口与计算机连接,并与操作系统进行交互,将设备的功能暴露给计算机使用者。

MTK驱动的正常工作对于设备的功能
和性能至关重要。

MTK驱动的开发是一个复杂而严谨的过程。

开发人员需要深入研究MTK芯片的架构和规范,并编写适配特定芯片的驱动程序。

他们还需要进
行严格的测试和验证,以确保驱动程序在各种情况下都能正常工作。

同时,开发人员还需要与MTK芯片的生产商保持密切合作,获取相关技术支持和
更新。

总之,MTK驱动是一种桥梁,将计算机与MTK芯片设备连接起来。


通过通信协议实现数据传输和设备控制,使得用户可以便捷地使用MTK芯
片设备。

MTK驱动的适应性和兼容性优势使得其成为移动通信和物联网领
域的重要组成部分。

同时,MTK驱动的安装和更新也是用户使用设备时需
要考虑的重要问题。

MTK_Ralink wifi开发及相关应用指南

MTK_Ralink wifi开发及相关应用指南

目录1.VMware9虚拟机环境安装 (2)2.Ubuntu系统在VMware上安装 (7)3.RT5350开发环境搭建及错误处理 (40)4.编译RT5350 SDK(Uboot&&Kernel) (44)5.4M/16M和4M/32M的配置方法 (54)6.测试编译固件在开发板正常工作 (55)7.添加自己应用到SDK中 (59)8.添加驱动程序到SDK中,实现控制所有GPIO的电平 (62)9.GPIO复用功能配置说明 (67)10.项目实战---通过手机控制开发板上的LED (67)11.移植Openwrt系统到开发板上,保证无线,有线正常工作 (71)12.Apclient模式(AP+STA同时共存)实现中继功能WDS (75)13.SDK4.1 稳定性以图为证 (77)14.恢复模块出厂设置 (78)15.STA模式设置 (79)16.修改出厂默认参数 (82)17.设置终端串口为普通串口,做wifi转串口项目 (83)18.WEB升级root_uImage (83)19.量厂固件生成方法 (84)20、通过web界面,修改串口应用程序参数 (84)20.1、修改webui配置界面 (84)20.2、修改js与c语言交互 (85)20.3、添加应用程序保存在flash分区字段名 (85)20.4、添加应用程序接受更改的参数 (85)21、支持jffs2文件系统,掉电后保存用户数据 (86)21.1 配置内核 (86)21.2 添加支持jffs2的命令 (88)21.3 修改SDK默认分区,添加用户分区 (89)21.4 测试jffs2文件系统,掉电保存用户数据 (89)1.VMware9虚拟机环境安装1.1下载RT5350开发板资料后,里面有一个如下目录:这里是安装虚拟机全部软件如下图所示:进入<VMware9原版官方软件英文版>目录单击“VMware-workstation-full-9.0.0-812388”这个安装文件,会出现如下界面:选择“下一步”选择“Typical”选择“下一步”选择“下一步“后面的几个界面一直选择“下一步”就行了,然后会出现如下界面,选择“Continue”这时软件正在安装中,耐心的等待一段时间。

MTK手机设备驱动编写介绍

MTK手机设备驱动编写介绍


LCD_delay_HX8306A();\

}

#define LCD_DataWrite_HX8306A(_data) \

{\

*(volatile kal_uint32 *) LCD_HX8306A_DATA_ADDR=
((_data & 0xFF00)<<2)|((_data & 0xFF)<<1);\
TD_CTRL);
construct_local_para(sizeof(aux_id_struct),
aux_id_data->aux_id = AUX_ID_FLICK_OFF;
DRV_BuildPrimitive(flick_ilm, MOD_EINT_HISR, MOD_UEM, MSG_ID_AUX_ID, aux_id_data);
3. GPIO使用中需注意的问题
MTK手机设备驱动编写介绍
二.中断的配置与使用
<1>. 中断个数
8个 EINT0, EINT1为专用中断, EINT2-7 与GPIO等功能复用
<2>. 设置中断模式
通过DRV_TOOL或Gpio_init(void)来初始化,也可在程序中通过 GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)随时修改
MTK手机设备驱动编写介绍
audcoeff_default.h
#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA \ {\ 128, 224, 5128, 0, 374, 0, 400, 0 \ }
starty,kal_uint16 endx,kal_uint16 endy) • void LCD_EnterSleep_ST7549T(void) • void LCD_ExitSleep_ST7549T(void) • void LCD_SetContrast_ST7549T(kal_uint8 level)

MTK驱动调试相关总结

MTK驱动调试相关总结

MTK驱动调试相关总结 2010-12-14 Ver:1.11 SIM卡2 T卡3 FLASH4 按键KEY5 IO配置6 ADC配置7 EINT配置8 FM驱动9 BT驱动10 TOUCHSCEEN驱动11 LCM驱动12 Sensor驱动13 背光灯、按键灯、振动器、PWM14 跑马灯15 移动传感器、四方传感器16 MP4、3GP播放17 音量参数、EQ参数、音频功放开关18 SMS、电话本等容量设置19 耳机插入、拔出检查、耳机按键处理20 充电器或USB插入、拔出检查、识别21 RF 配置22参考文档附录默认系统平台为MT6253,code版本:09B.W10.12.MP。

版本变更记录:Andy 2010.12.10 Ver:1.0Andy 2010-12-14 Ver:1.11 SIM卡F910(MT6253)SIM卡插槽与系统SIM卡号映射关系drv\src\switchControl_al.c// andy 2010.05.31 SIM卡插槽映射 __DRV_DUAL_SIM_INVERSE__//kal_bool sim_physicalSlotChanged;#ifdef __DRV_DUAL_SIM_INVERSE__kal_bool sim_physicalSlotChanged = KAL_TRUE ;#elsekal_bool sim_physicalSlotChanged = KAL_FALSE;#endif定制支持的SIM电压:Customer_sim_voltage_support.c/* For customer define ME support voltage of SIM *//* For 1.8V Tech. ME use ME_18V_30V *//* For 3.0V ONLY ME use ME_30V_ONLY *//* For 1.8V ONLY ME use ME_18V_ONLY */#define SIM_VOLTAGE_SUPPORT ME_18V_30Vsim_env SIM_GetCurrentEnv(void){(SIM_VOLTAGE_SUPPORT);return}MT6253的“4.3 SIM Interface”,介绍了SIM卡接口的情况。

MTK软件培训课程(三)MTK驱动架构分析精品PPT课件

MTK软件培训课程(三)MTK驱动架构分析精品PPT课件
MTK驱动架构分析
MTK软件培训课程(三) 2005.11
Camera程序架构
MMI Task
Camera MMI
MDI Camera
GDI
MEDIA Task
Camera Driver
LCD Interface
HW- (LCM, ISP, MT6218, MT6219...)
Camera程序架构
MMI task
Camera APP:控制应用程序逻辑 MDI:应用程序接口层,直接操作Camera feature GDI: 处理Multi-layer,实现OSD
Media task
调用Camera驱动程序的接口层 Camera Driver
控制Camera Backend IC,Sensor以及LCD硬件
除了Camera模块外,Idle screen和Media Player 等也使用GDI。
GDI和pixtel_UI的关系
GDI的实现
使用GDI_HANDLE,gdi_handle来操作 GDI对象,GDI的对象可以是layer,gif, jpeg等。 GDI函数返回一个GDI_RESULT GDI函数使用互斥来保护,进入GDI函数 时调用GDI_ENTER_CRITICAL_SECTION()退 出函数时调用GDI_EXIT_CRITICAL_SECTION()
Graphics Device Interface
MTK的画图功能有两套体系,一套是 pixtel的体系,另一套是GDI。Pixtel的体 系比较老,它只能画单层的图像,如果 你想进行图像叠加,只能自己写程序来 实现。而GDI体系由于有硬件的支持,它 可以处理最多4个层数据的叠加,有很强 的表现能力。
Prview的状态机

MTK驱动

MTK驱动

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双频,校准综测都是正常的。

无线网卡驱动分析与WLAN性能测试

无线网卡驱动分析与WLAN性能测试

*ifr, int cmd);
//ioctl 函数
(2)PCI 设备驱动结构
struct pci_driver
static struct pci_driver\
rt61_driver =
{ name: "rtt61_pci_tbl,//PCI 设备表象
头和链路层协议头。
(2)数据缓冲区指针 head、data、tail 和 end
其中 head 指针指向内存中已分配的用于承载网络数据
的缓冲区的起始地址;data 指针指向对应当前协议层有效数
据的起始地址;tail 指向对应当前协议层有效数据负载的结
尾地址,与 data 指针对应;end 指针指向内存中分配的数据
105
万方数据
首先要判断信道是否空闲。若空闲,随机退避一段时间后发 送;否则,暂不发送。
图 2 无线网卡结构
3 无线网卡驱动实现
在 LINUX 中,为了简化对设备的管理,所有外围的硬件 设备被归结为 3 类:字符设备、块设备和网络设备,如以太 网卡、无线网卡。
Linux 网络驱动程序的体系结构可以分为层,从上到下 分别为协议接口层、网络设备接口层提供实际功能的设备驱 动功能层,以及网络设备和网络媒介层。在设计网卡驱动程 序时,最主要的工作就是完成设备驱动功能层,使其满足自 己所需的功能。
//指向驱动程序的初始化函数 unsigned long base_addr;
//网络设备的 I/O 基地址 unsigned int irq; //设备使用的中断号 unsigned char dev_addr[MAX_ADDR_LEN];
//设备硬件地址 int (*open)(struct net_device *dev);

MTK平台驱动基本介绍

MTK平台驱动基本介绍

MTK平台驱动基本介绍----------MTK6239一:LCD文件位于custom\drv\LCD以菲利浦的一款240 X 400的屏为例介绍如何添加LCD驱动SIMCOM38_08B_GPRS.makLCD_MODULE = SUNRISE_2827TI_LCMMAIN_LCD_SIZE = 240 X 400Option.makCOM_DEFS_FOR_SUNRISE_2827TI_LCM = ILI9326 COLOR_LCD SUNRISE_2827TI_LCMTFT_MAINLCD WQVGA_MAINLCD在custom\drv\LCD添加SUNRISE_2827TI_LCM文件夹,下面有5个文件。

文件名同MTK 系统自带的(lcd.c、lcd_hw.h、lcd_sw.h、lcd_sw_inc.h、lcd_sw_rnd.h)。

SUNRISE -------------- 屏的厂家ILI9326 ----------------- 屏的驱动芯片LCM ---------------------- 屏240 X 400 ----------------- 屏的分辨率COLOR_LCD ---------- 彩色TFT_MAINLCD ------- 屏的类型,对应的还有CSTN,OLED。

目前主要是TFTWQVGA_MAINLCD ---- 屏的分辨率做了上述修改以后,编译时,lcd驱动就对应SUNRISE_2827TI_LCM文件夹里的驱动。

文件夹里的5个文件,通常lcd_hw.h和lcd_sw_rnd不需要修改,lcd_sw_inc.h只是定义屏的分辨率。

如下:#ifdef __MMI_MAINLCD_128X128__#define LCD_WIDTH 128#define LCD_HEIGHT 128#elif (defined(__MMI_MAINLCD_128X160__))#define LCD_WIDTH 128#define LCD_HEIGHT 160#elif (defined(__MMI_MAINLCD_176X220__))#define LCD_WIDTH 176#define LCD_HEIGHT 220#elif (defined(__MMI_MAINLCD_240X400__))#define LCD_WIDTH 240#define LCD_HEIGHT 400#endif#define UI_DEVICE_WIDTH LCD_WIDTH#define UI_DEVICE_HEIGHT LCD_HEIGHT修改比较多的是lcd.c和lcd_sw.h:lcd_sw.h#define LCD_CMD_DMA_MODE --------- 是否使用DMA方式?(DMA简单,速度快,通过MTK的寄存器进行操作,但灵活性差;非DMA方式,直接对地址操作,灵活性好,但速度会有影响。

mtkwifidriver驱动的分析

mtkwifidriver驱动的分析

管理篇接收到扫描完毕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平台驱动调试笔记

分类:LINUX一、【一】调试串口的设置驱动的调式过程经常需要通过trace工具看log的,trace前需要修改手机串口,有以下三种方法设置串口1 通过手机进入工程模式设置2 修改代码,修改Nvram_user_config.c中的NVRAM_EF_PORT_SETTING_DEFAULT[]3.通过META工具修改在连上meta:左上角选中NVRAM Editor,在跳出的对话框里选择other LID,再选择NVRAM_EF_PORT_SETTING_LID,接下来read from nvram,对话框右边就会出现串口的设置情况,对调tst_port_ps(输入0)和ps_port(输入99)的值,二【【二】关于gpio口Gpio的初始化在文件gpio_drv.c里,可以用MTK提供的工具配置也可以用代码在程序里直接操作,二者的选择要看有没有定义宏__CUST_NEW__工具初始化时要注意配置codegen.dws,该文件里配置的只是对gpio口的初始化,并不是所有的gpio口都要设置成工作时的模式,尤其是当作时钟和蓝牙部分的gpiio口,初始化时就设置成工作模式的话会造成电机电流过大的。

代码初始化时DRV_WriteReg()、DRV_Reg对gpio口寄存器操作,分别定义gpio口的模式,和方向(0:输入;1:输出),对单个gpio口操作用到以下函数(以gpio25为例):GPIO_ModeSetup(25, 0);设置GPIO25为模式0GPIO_InitIO(1,25);初始化GPIO25方向为输出GPIO_WriteIO(0, 25 );设值GPIO25输入低电平0三、【三】键盘设置1)键盘定义Keypad_def.c如果定义CUST_NEW,工具中的键盘定义对应在改文件里的KEYPAD_MAPPING(keypad_drv.h);2)硬件键盘定义与软件mmi键盘的对应nKeyPadMap[](Keybrd.c)3)工程模式键盘测试函数EntryFMKeypadTest()修改键盘测试时界面显示的键的名称1. 做好上面的第一第二两步2. FactoryModeSrc.c开始部分定义添加的键所要显示的名称,值,分别应用到keypad_layout[](确定要显示的位置),keypad_value[]3.在EntryFMKeypadTest()函数中的数组IdleScreenDigits[]里添加要显示的键4)如果要设置一个键不管在什么界面下都起作用的话(如手电筒开关或则其他需求)就需要在键盘的事件响应函数static voidKeyEventHandler(KEYBRD_MESSAGE *eventKey)里设置,根据键值条用相应的响应函数,不过该函数及时在锁屏状态下也会执行的,需要根据需要添加条件语句四、关于LCDlcm背光驱动分为两种控制方式:1. pwm这个是通过调占空比来调节亮度的持续信号;2. PFM这个是通过脉冲的个数来控制LCM背光亮度。

WiFi驱动分析

WiFi驱动分析

Generated by Foxit PDF Creator Foxit Software For evaluation only.TechWIFI驱动分析Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>Revision HistoryDate <25/02/2009> Issue <0.5> First draft Description Author wylhistory目录1. 2. 3. 4. 5. 6. 7. 8. ABSTRACT .................................................................................................................................................. 3 INTRODUCTION ........................................................................................................................................ 3 用户使用流程 ............................................................................................................................................... 3 WIFI驱动的初始化 ...................................................................................................................................... 5 数据的发送 ................................................................................................................................................... 7 IOCTL的调用逻辑 ..................................................................................................................................... 11 电源管理相关的调用逻辑.......................................................................................................................... 14 剩下的问题 ................................................................................................................................................. 15Tech, 2008Page 2 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>1. 2.Abstract.这里主要讲的是我对WIFI驱动的理解.Introduction因为将要负责WIFI驱动,所以就开始了WIFI驱动的学习,主要分析了WIFI驱动的初始 化,数据的发送流程以及和电源管理相关的部分.3.用户使用流程通常用户的做法就是打开一个socket, 调用一个ioctl, 等待消息返回, 收到消息后继续做下面的事情, 然后又等待内核消息的返回,如此循环. 比如我们的系统的流程就是这样的:Tech, 2008Page 3 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>Tech, 2008Page 4 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>4.WIFI驱动的初始化wifiwlan_init_moduleif (sbi_register(wlan_add_card, wlan_remove_card, wlan_pm, NULL) == NULL) { ret = WLAN_STATUS_FAILURE; goto done; }设置 wlan_add_callback = add; wlan_remove_callback = remove; wlan_pm_callback = pm; add wlan_add_card pm wlan_pmregister_mss_driver( &wlan_driver);sbi_probe_cardsdio mss_init_cardwifipwlanpriv = wlan_add_callback( card);wlan_add_card图4.1 wifi模块初始化这里主要的工作就是注册mmc driver,注册回调函数,包括电源管理的,包括设备添加的, 当然还有一些硬件初始化; 这里最重要的是wlan_add_card这个函数做了很多事情,我把我没有分析的代码都略过了:Tech, 2008Page 5 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>dev->wireless_handlers = (struct iw_handler_def *) &wlan_handler_def; 这里面有很多对于wifi 的操作函数比如 wlan_set_scanIssue: <0.5> Issue Date: <01/10/2009>wlan_add_carddev>hard_start_xmit = wlan_hard_start_xm it;wlan_create_thread(wlan_ service_main_thread, &priv>MainThread, "wlan_main_service");wlan_create_thread(wlan _reassociation_thread, &priv>ReassocThread, "wlan_reassoc_service");Wifi wlan_init_fw Firmware sbi_register_dev(pri v) register_netdevregister_netdevice wlan_reassociation _thread wlan_service_main_ thread priv>wlan_dev.ioport wlan_cmd_specific_ scan_ssid wlan_find_ssid_in_l ist wlan_associate disable_host_int_ma sk ifconfig eth0wlan_process_cmdresp wlan_process_event firmware wmm_process_tx图4.2wlan_add_card的逻辑这里创建了两个线程,一个用来处理基本的输入输出,那就是wlan_service_main_thread, 一个用来负责重新连接AP(当自动断开的时候),那就是wlan_reassociation_thread 还做了一些firmware的初始化;然后就是注册mmc设备,取得端口号;接着就是注册一个网 络设备,用来供上层访问,这时候就可以通过ifconfig来看到输出了,比如是eth0;最后是 一些用来使蓝牙和wifi能够共存的代码;Tech, 2008Page 6 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>5.数据的发送Tech, 2008Page 7 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>Tech, 2008Page 8 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier> 图5.1发送数据的触发Issue: <0.5> Issue Date: <01/10/2009>数据的发送请求从tcp/ip层传到了这里, 于是通过唤醒WIFI的主线程的处理函数来发送具体 的数据请求; 下面看主线程里面的数据发送:Tech, 2008Page 9 of 15Generated by Foxit PDF Creator Foxit Software For evaluation only.Crack Our System to N810 System Analysis and Design Documents <Document identifier>Issue: <0.5> Issue Date: <01/10/2009>wlan_service_main_ threadwlan_process_cmdr espwlan_process_eventwmm_process_txwmm_pop_highest_ prio_skbwlan_process_tx(pri v);Adapter>CurrentTxSkb = Adapter>wmm.txSkbQ[ac]. next;wlan_send_single_p acketcopy Sbi_host_to_card wifiwmm_process_fw_i face_tx_xfer_startos_start_queue sbi_host_to_cardnetif_wake_queue, 如果停止就唤醒 wifi sdio mmc controller __netif_schedule(de v);sbi_host_to_card, wifi firmwaredev->next_sched = sd>output_queue; sd->output_queue = dev; raise_softirq_irq off(NET_TX_SOFTIRQ); net_tx_actionTech, 2008Page 10 of 15System Analysis and Design Documents Issue Date: <01/10/2009><Document identifier>可见最后数据是通过mmc总线发送到了wifi模组了,而且开始调度下一次的数据发送,至此,数据的发送过程已经分析完了,下面是ioctl的调用逻辑6. ioctl的调用逻辑之所以要分析这个,是因为上层和WIFI驱动打交道的方式,多半是通过ioctl的方式进行的,所以…看看它的调用逻辑:©Tech, 2008 Page 11 of 15System Analysis and Design Documents Issue Date: <01/10/2009> <Document identifier>user netlink socketioctl dev->do_ioctl(dev,ifr, cmd)wifiwlan_do_ioctlSwitch defaultSystem Analysis and Design Documents Issue Date: <01/10/2009><Document identifier>可以看到WIFI模块对ioctl的处理非常复杂,主要是要处理许多标准的调用,也要处理一些私有的调用;后面还要通过rtnl_notify给上层用户发送消息,这里也是一套机制,我也就不细说了。

MTK的驱动和MMI经验总结

MTK的驱动和MMI经验总结

MTK的驱动和MMI经验总结1.Windows必须安装在C盘,否则会出现modis编译问题。

2.语言和输入法移植2.1资源修改–这是我们需要修改的,2.2开始MTK已经帮你做好了。

2.1.1在mcu\plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt中添加新语言的字符串资源。

2.1.2用MCT工具生成新的字库,需要注意的是Language ID必须和ref_list.txt中一致。

2.1.3输入法资源包括Zi、T9和CStar。

2.1.3.1Zia.新建mcu\vendor\inputmethod\ZI\project\PROJECTNAME\v?_official\目录。

b.将第三方提供的Zi文件拷贝到该目录。

c.将所有ZI8DatXX.c文件扩展名改成.h文件,并将其包含到IMEResZi.h中。

d.将输入资源添加到mtk_gIMELDBArray 数组中。

e.上面步骤,第三方可能已经提供IMEResZi.h文件。

如果提供了就不用这些步骤了。

2.1.3.2T9将代码放到下面目录:mcu\vendor\inputmethod\T9\project\PROJECTNAME\v?_official\移植比较麻烦,具体参考:SOP_T9_Input_Method_Resource_Generation_07A.pdfSOP_T9_Input_Method_Resource_Generation_08B.pdfSOP_T9_Input_Method_Resource_Generation_09BV2.pdf2.1.3.3CStar不说了2.2SSC有几个文件需要修改。

a.mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.h:增加新的SSC码,需要和ref_list.txt、FontRes.c中的一致。

#define SSC_AUTO "*#0000#"#define SSC_SCHINESE "*#0086#"#define SSC_TCHINESE "*#0886#"#define SSC_ENGLISH "*#0044#"#define SSC_DEFAULT "*#0044#"#define SSC_SPANISH "*#0034#"//添加你的SSC码//#define SSC_XXXXX "*#00XX#"2.3mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.c:将新的SSC码加入到ssc_table2表中。

MTK平台驱动调试介绍

MTK平台驱动调试介绍

(二)EVT贴片软件的整合
1.配置 makefile
xxx_GPRS.mak(mcu\make) Option.mak(mcu\make) 不同的项目需求不同,需要修改和添加一些宏开关控制。 基本格式和步骤:
MXX_GPRS.mak: XXX_XXX = XXX XXX_XXX = NONE XXX_XXX = TRUE XXX_XXX = FALSE Option.mak: ifdef XXX_XXX ifneq ($(strip $( XXX_XXX)),FALSE) COM_DEFS += XXX_XXX endif endif 代码中就使用XXX_XXX来控制相关代码; #if defined(XXX_XXX) //add co3: case 4: case 5: default:
} for(i=0;i<temp;i++){ GPIO_WriteIO(0,7); for (j =0;j <100;j++) {} GPIO_WriteIO(1,7); for(j=0;j<20;j++) {} } …… } else{
模块调试:Backlight
\mcu\custom\drv\misc_drv\SIMC25_06B_BB\custom_equipment.c kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) { …… switch(gpio_dev_type) { case GPIO_DEV_LED_MAINLCD:
GPIO_WriteIO(0,7);
…… }
PWM模式:需要根据实际情况在Mcu\custom\drv\misc_drv\custom_hw_default.c文件中 修改PWM_Level_Info;即频率和占空比。

MTK驱动调试经验

MTK驱动调试经验

MTK6735M项目F100驱动调试报告一配置EMMC按照硬件的选择配置新的flash,因为第一版都是按照MTK认证列表使用,所有一般如果不行有两个可能:1配置不正确,需要确定alps\bootable\bootloader\preloader\tools\emigen\MT6735下的flash 配置文件的时序是否正确,修改配置文件alps\bootable\bootloader\preloader\custom\f100\inc的文件custom_MemoryDevice.h2需要硬件配合查看是否EMMC元器件未能贴好,造成不能烧录二调试LCD调试步骤:1确定LCD的连接方式;1确定dws配置正确;2确定电源是否正确;3确定配置参数的读写方式类型,包括:LCM_setting_table模式读写:struct LCM_setting_table{unsigned cmd;unsigned char count;unsigned char para_list[64];};LCM_setting_table_V3模式读写:typedef struct{unsigned char id;unsigned char cmd;unsigned char count;unsigned char para_list[128];}LCM_setting_table_V3;4确定开关机的时序和读取初始化参数的方法;5确定DSI的配置是否正确,此配置函数为static void lcm_get_params(LCM_PARAMS*params)6如果做屏兼容,需要配置.compare_id=lcm_compare_id,此项为读取LCD ID进行判断;调试碰到问题:1参数的读写方式不正确,造成屏花屏,换一种读写方式正确;2suspend时未能写正确,在待机时出现kernel crash,需要特别注意;3未能配置lcm_compare_id,造成做屏兼容时未能自动识别;4TE的配置需要特别注意,此引脚MTK的补丁默认TE中断不开;三调试TPTP连接的接口为I2C模式调试步骤:1确定dws配置正确;2确定中断,电源正确;3确定I2C读写正确;4确定报点没有断点,TP没有坏点;5配置虚拟按键时注意键值范围;调试碰到问题:调试的TP为GT9157,出现很奇怪的问题,就是I2C的初始化读写没有报错,但是读写数据就是不成功,最后查找到问题为:I2C加了下拉的防静电电阻,造成实际上的下拉,但是根据规格书配置要求,必须要做上拉处理,否则容易出现读写不正常,所有此处造成I2C没有正常工作;三调试sensor system调试步骤:一accelerometer1确定dws配置正确;2确定中断,电源正确;3确定I2C读写正确;4确定好旋转的方向;调试碰到的问题:调试accelerometer出现没有报点,然后换了驱动就可以了,判断为原驱动内的读取x.y.z的方式不对;二alsps1确定dws配置正确;2确定中断,电源正确;3确定I2C读写正确;4确定好旋转的方向;调试碰到的问题:调试光感出现距离不对的问题,调试距离判断参数,成功;四调试camera调试步骤:1确定主副摄像头的型号,在配置文件配置好,添加好驱动代码;(注意:需要配置alps\device\huaying\f100里的ProjectConfig.mk,此文件为主要配置文件,配置alps\kernel-3.10\arch\arm64\configs里的f100_debug_defconfig)2确定dws配置正确;3确定摄像头的开关机的时序,按照摄像头的规格书来配置;4根据硬件配置好MCLK;5确定好是否支持AF,闪光灯功能;五调试Audio调试步骤:1按照驱动开发资料进行驱动配置,确定好是内置功放还是外置功放;2配置好音频功放的输入时序,按照喇叭的功率进行配置,外置功放配置路径为alps\kernel-3.10\sound\soc\mediatek\mt_soc_audio_v3\mt_soc_codec_63xx.c3按照硬件配置mic为单/双;六调试HEADSET调试步骤:按照驱动开发资料配置即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

管理篇接收到扫描完毕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的值。

如果空间不够的话,则将arScanResult[i].u4Length、u4IELength、apucScanResultIEs[i]设置为0.如果u2IELength不大于0,则设置apucScanResultIEs[i] = NULL;11)prAdapter->rWlanInfo.u4ScanResultNum++;如果当前已经没有空间存储了,则考虑替换rssi最弱的那个ap authCheckRxAuthFrameTransSeq1)该函数先判断该报文是否是正确的,评判标准就是:如果报文总长度扣掉报文头所剩下的空驾大于6(auth algorithm+auth seq num+status code)这三个字段是必备的意思。

获取auth seq num 来判断该数据包是属于auth request(1和3)还是auth response(2和4)saaFsmRunEventRxAuth(处理auth response的包函数)aaaFsmRunEventRxAuth (处理auth request的包函数aaa指authentication,authorization,and accountingservices即认证授权计费系统)kalEnqueueCommand的cmd最后会由这边来执行wlanProcessCommandQueue mboxRcvAllMsg上层下发scan指令流程分析mtk_cfg80211_scan1)首先先查看下当前是否有在扫描的请求,如果有,则直接退出,通过变量prGlueInfo->p rScanRequest来进行判断2)通过对request进行判断分解请求a.分解ssid,如果请求ssid的个数为1,则将ssid拷贝到rScanRequest的ssid中,如果大于1则直接退出,如果为0,则将rScanRequest.rSsid.u4SsidLen为0;b.分解IE,如果ie_len大于0,则将rScanRequest.pucIE指向request中的ie,并且置为u4IELength为03)通过kalioctl进行发送wlanoidSetBssidListScanExt参数为rScanRequestKalioctl 触发流程:将相关参数组装成prIoReq中,之后唤醒tx_thread来处理OID,然后等待执行结束,在tx_t hread中会调用wlanSetInformation或者wlanQueryInformation,不过这两部分的操作,最后都会调用prIoReq中的回调函数,wlanoidSetBssidListScanExt流程:1.判断参数中请求的长度参数的长度是否等于参数结构的大小2.判断射频是否关闭3.遍历prBSSDescList,将类型为BSS_TYPE_INFRASTRUCTURE的prBssDesc->aucRawBuf清空4.将scanrequest的参数解析出来5.获取ais状态机prAisFsmInfo6.启动prAisFsmInfo->rScanDoneTimer定时器时长为15s如果支持在线扫描,则直接aisFsmScanRequest,否则如果kalGetMediaStateIndicated(prAdap ter->prGlueInfo) != PARAM_MEDIA_STATE_CONNECTED则跟着aisFsmScanRequest,其他直接WLAN_STATUS_FAILURE。

aisFsmScanRequest流程1.判断prConnSettings->fgIsScanReqIssued是否为false,同一时间只能有一次scan。

2.如果有ssid、IE等获取出来,拷贝到prAisFsmInfo中对应的变量中。

3.如果当前prAisFsmInfo->eCurrentState == AIS_STATE_NORMAL_TR,如果当前是处于prAisBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE并且prAisFsmInfo->fgIsInfraC hannelFinished == FALSE(802.1x 可能还没完成,pend it 等后续操作),则执行aisFsm InsertRequest(prAdapter, AIS_REQUEST_SCAN);否则,则执行开始online scan(包括wlan ClearScanningResult(prAdapter)和aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN))4.如果当前prAisFsmInfo->eCurrentState == AIS_STATE_IDLE,则直接进行扫描(包括wlanClearScanningResult(prAdapter)和aisFsmSteps(prAdapter, AIS_STATE_ONLINE_SCAN))。

其他情况也是直接pend it 等后续操作aisFsmInsertRequest(prAdapter, AIS_REQUEST_SCA N);wlanClearScanningResult流程1.如果当前处于连接状态,则遍历prAdapter->rWlanInfo.arScanResult,跟当前连接的ap的mac地址进行比对prAdapter->rWlanInfo.rCurrBssId.arMacAddress,如果一致,则将其搬到prAdapter->rWlanInfo.arScanResult[0]其他都清除。

如果当前不处于连接,则直接prAdapter->rWlanInfo.u4ScanResultNum = 0;prAdapter->rWlan Info.u4ScanIEBufferUsage = 0;aisFsmSteps(prAdapter, AIS_STATE_SCAN/AIS_STATE_ONLINE_SCAN/LOOK_FOR)流程:1.先将nextState保存到prAisFsmInfo->eCurrentState中。

2.Switch(nextState)就看AIS_STATE_SCAN/AIS_STATE_ONLINE_SCAN/LOOK_FOR3. A.先检测网络设备是否已经激活,如果没有激活,则进行激活操作。

相关文档
最新文档