基于MT6752/32平台 Android L版本驱动移植步骤
基于MT6752/32平台 Android L版本驱动移植步骤
根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构将会全面转向Turnkey AOSP架构。本博文将会大致描述下如何将ABS架构下KK版本的驱动如何移植到AOSP架构的android L版本上。
1.1 Turnkey ABS与AOSP简介
Turnkey ABS架构是MTK设计的架构,深度客制化的编译系统,统一的配置文件和全局配置。mediatek将改动部分集中管理。而Turnkey AOSP架构采用Google标准架构(Android Open Source Project),将preloader、lk、kernel、android独立维护和配置,在标准AOSP架构上做了客制化,并且采用分开维护的方式。两者的差别大致可以用下图表示:
由于Turnkey ABS架构是MTK深度客制化的系统,与google标准AOSP相聚甚远,不符合标准的AOSP精神;且各个部分相互引用,耦合性比较高,无法独立编译和维护,内部开发周期较长;同时kernel部分并非独立维护的,而是分散在codebase的多个目录,不易将kernel部分开源出去,开源领域大部分的应用都是针对标准AOSP开发的,不容易整合。而Turnkey AOSP依然是Turnkey,但保留了MTK得各个Feature,各个模块独立维护和编译。相对ABS架构而言,AOSP架构的主要变化如下:Android采用标准AOSP编译方式,kernel编译方式保持与原生一致;preloader、lk独立编译,文件路径各模块完全分开,mtk改动的分别嵌入到各个部分;大部分driver架构都没变,以前的driver依旧可用,kernel部分逐渐进行标准化,采用标准api等等...
MTK官网上有关于新架构的相关介绍资料以及基于mt6572/6582的driver all in one。而在Android L版本上有相当一部分文件的放置路径有很大变化。但是,从移植的过程中来看,各个模块需要配置的文件基本没变,只是嵌入到新的目录中去了,这个只需要我们用grep和find命令找出其所在的位置即可,另外,新的架构的一些配置需要使用menuconfig来操作以及进行一些compile的控制,也就是makefile的编写。在一些配置不是很了解的情况下,最好的办法就是参考系统自带的同类driver的配置方法。
2 Turnkey AOSP上driver的配置
2.1 Flash配置
2.1.1 相关配置文件路径
Xls表格里面找到相应的Flash型号:
Xls路径:alps/bootable/bootloader/preloader/tools/emigen/{platform}/MemoryDeviceList_{platform}.xls
custom_MemoryDevice.h文件修改为所使用的flash型号:
路径:alps/bootable/bootloader/preloader/custom/${project} /inc/custom_MemoryDevice.h
2.1.2 Dct配置
Dct tools路径:alps/bootable/bootloader/preloader/tools/dct/Drvgen.exe
Codegen.dws路径: alps/bootable/bootloader/preloader/custom/${project}/dct/dct/codegen.dws
2.1.3 Uart Log 输出控制
路径:alps/bootable/bootloader/preloader/custom/${project}/cust_bldr.mk
2.1.4 编译命令
cd bootable/bootloader/preloader
TARGET_PRODUCT = $project ./build.sh 2>&1 | tee pl_build.log 注:project可以通过:get_build_var TARGET_DEVICE获得。
生成的bin文件位于bootable/bootloader/preloader/bin目录下,并不会生成在out目录下。
也可以使用下面的命令:
make -j12 pl 2>&1 | tee pl_build.log
其生成的bin文件会在out目录下。
3 LCM配置
3.1 LK部分相关文件目录
3.1.1 驱动文件路径:alps/bootable/bootloader/lk/dev/lcm/${lcm_driver_name}/xx.c
3.1.2 修改同目录内的makefile加入:
obj-y += lcm_driver_name.o
3.1.3 修改mt65xx_lcm_list.c文件,添加所用的lcm信息:
路径:Alps/bootable/bootloader/lk/dev/lcm/mt65xx_lcm_list.c
Ex. 1:extern LCM_DRIVER xx_lcm_drv;
2:#ifdefined(xx)
&xx_lcm_drv,
#endif
3.1.4 配置lk中的lcm driver
路径:Alps/bootable/bootloader/lk/project/${project}.mk
Ex.
CONFIG_CUSTOM_LK_LCM="xx"
3.1.5 lk 中dws配置
1:codegen.dwspath:alps/bootable/bootloader/lk/target/${proj}/dct/dct/codegen.dws
2: tools path:alps/bootable/bootloader/lk/scripts/dct/grvgen.exe
3.1.6修改开机logo
1:开机logo资源文件:
路径:alps/bootable/bootloader/lk/dev/logo/${项目对应的分辨率图片}
2:Alps/bootable/bootloader/lk/project/${project}.mk修改logo:
BOOT_LOGO := xx
3.1.7 背光配置
客制化文件路径:alps/bootable/bootloader/lk/target/${project}/cust_leds.c
3.1.8 lk阶段编译命令
make –j12 lk 2>&1 | tee lk_build.log
lk.bin和logo.bin生成路径:out/target/product/${project}
3.2 kernel中lcm配置
3.2.1加入驱动文件:alps/kernel-xx/drivers/misc/mediatek/lcm/${lcm_driver_name}
3.2.2 修改同目录下makefile文件:
obj-y += lcm_driver_name .o
3.2.3 修改mt65xx_lcm_list.c
路径:alps/kernel-xx/drivers/misc/mediatek/lcm/mt65xx_lcm_list.c
Ex:
1: extern LCM_DRIVER xx_lcm_drv;
2: #if defined(xx)
&xx_lcm_drv,
#endif
3.2.4 背光配置
path:alps/kernel-xx/drivers/misc/mediatek/mach/${platform}/${project}/leds/mt65xx/cust_leds.c
3.2.5 Dct 配置
Toolspath: alps/kernel-xx/tools/dct/drvgen.exe
Codegen.dwspath:alps/kernel-xx/drivers/misc/mediatek/mach/${platform}/${project}/dct/dct/codegen.dws
3.2.6 编译步骤(通过menuconfig配置):
cd kernel-xx
mkdir out
make O=out${project}_debug_defconfig
make O=out menuconfig
接下来的配置需要到menuconfig中完成:
1路径:Device Driver ->Misc Devices->Mediatek Properitary Configgurations ->CUSTOM_KERNEL_LCM 此变量配置为我们所需要的lcm driver的名字
2 修改目录下面的LCM_HEIGHT和LCM_WIDTH为屏的实际分辨率。
复制kernel-xx/out/.config文件到alps/kernel-xx/arch/arm64/configs/${project}_debug_defconfig
编译命令:
在根目录下运行:make –j12 kernel bootimage
4 Touch Panel配置
4.1.1驱动及头文件路径:
Driver Path:alps/kernel-xx/drivers/input/touchscreen/mediatek/gt9xx/*.c 此目录下makefile需指定头文件的位置
头文件路径:alps/kernel-xx/drivers/misc/mediatek/mach/${platform}/${project}/touchpanel/gt9xx/*
4.1.2 kernel dws配置同上。
4.1.3makefile和kconfig配置
Path:alps/kernel-xx/drivers/input/touchscreen/mediatek/Makefile
Ex.
ifeq ($(CONFIG_MTK_GT9XX),y)
obj-y += GT9XX/
endif
path:alps/kernel-xx/drivers/input/touchscreen/kconfig/
ex.
config MTK_GT9XX
bool "GT9XX for Mediatekpackage"
default n
4.1.4 menuconfig配置
1: cd kernel-xx
mkdir out
make O=out${project}_debug_defconfig
make O=out menuconfig
2:menuconfig配置path:Device Driver->Inputdevice support->Touchscreens勾选相应的touch driver。
4.1.5 编译
编译kernel以及bootimage
在根目录下运行: make –j12 kernel bootimage
5 Camera配置
5.1.1 kernel driver添加
Path:alps/kernel-xx/drivers/misc/mediatek/imgsensor/src/mt6752/<camera_driver_name>,同时需要更改同目录下makefile文件
5.1.2 kernel中添加设备
Path:alps/kernel-xx/drivers/misc/mediatek/imgsensor/src/${plat}/kd_sensorlist.h
5.1.3 Hal中添加设备
Path:alps/vendor/mediatek/proprietary/custom/${plat}/hal/imgsensor/<camera_hal_name>
5.1.4 修改sensorlist.cpp
Path:alps/vendor/mediatek/proprietary/custom/${plat}/hal/imgsensor_src/sensorlist.cpp
5.1.5 添加设备id
path:alps/kernel-xx/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
5.1.6 配置上电文件
path:alps/kernel-x/drivers/misc/mediatek/mach/${plat}/${proj}/camera/camera/kd_camera_hw.c
5.1.7 menuconfig配置:
Path:Device Driver->Misc devices->Mediatek PropeiataryConfiguration中配置为所使用的camera,并将相应的.config文件拷贝为${proj}_debug_defconfig.
5.1.8 ProjectConfig.mk配置:
Path:alps/device/${comp}/${proj}/ProjectConfig.mk
CUSTOM_HAL_IMGSENSOR = s5k3h7yx_mipi_raw ov5648_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR= s5k3h7yx_mipi_raw
CUSTOM_KERNEL_IMGSENSOR = s5k3h7yx_mipi_rawov5648_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR= s5k3h7yx_mipi_raw
CUSTOM_HAL_SUB_IMGSENSOR =ov5648_mipi_raw
CUSTOM_KERNEL_SUB_IMGSENSOR = ov5648_mipi_raw
5.1.9 编译
make -j12 2>&1 | tee build.log
6 AF 配置
6.1.1 添加AF Driver文件
Path:alps/kernel-xx/drivers/misc/mediatek/lens/${platform}/<af_driver_name>/<af_driver_name>.c,同时修改同目录下makefile文件。
6.1.2 头文件
path:alps/vendor/mediatek/proprietary/custom/${plat}/kernel/lens/inc/<af_driver>.h
6.1.3 AF Hal层文件
Path:alps/vendor/mediatek/proprietary/custom/${plat}/hal/lens/<lens_floder>/<len_para>.cpp
Id定义 Path:alps/vendor/mediatek/proprietary/custom/${plat}/hal/inc/camera_custom_lens.h
6.1.4 修改 lenslist.cpp
Path:alps/vendor/mediatek/proprietary/custom/${plat}/hal/lens/src/lenslist.cpp
6.1.5 修改设备权限
Path:alps/device/${vendor}/${project}/init.project.rc
Ex:
chmod 0660/dev/BU6429AF
chown systemcamera /dev/BU6429AF
6.1.6 menuconfig中配置上所选af
7 Flashlight 配置
7.1.1 Driver Path:alps/kernel-xx/drivers/misc/mediatek/flashlight/src/${plat}/constant_flashlight/leds_strobe.c
7.1.2 ProjetConfig.mk修改
Path:alps/mediatek/config/${proj}/ProjectConfig.mk
CUSTOM_KERNEL_FLASHLIGHT=constant_flashlight
CUSTOM_HAL_FLASHLIGHT=dummy_flashlight
8 Sendor配置,以距离(光感)感应为例:
8.1.1 Driver相关
头文件 path:alps/kernel-xx/drivers/misc/mediatek/mach/${plat}/${proj}/alsps/xxx/*,需修改makefile控制编译。
driver path:alps/kernel-xx/drivers/misc/mediatek/alsps/xxx/*,需修改makefile
8.1.2添加控制开关到menuconfig
Kconfig修改path:alps/kernrl-xx/drivers/misc/mediatek/kconfig.drivers
添加所用sensor:
Ex:
configMTK_AP3216X
bool"AP3216X for MediaTek package"
defaultn
修改makefile文件,添加编译控制条件,Path:alps/kernel-xx/drivers/misc/mediatek/alsps/makefile
Ex.
ifeq($(CONFIG_MTK_AP3216X),y)
obj-y += ap3216x/
endif
接下来需用menuconfig勾选自己的sensor.
8.1.3 配置dws中相关的中断脚,触发方式等。
9 Sound 配置
9.1.1外部功放配置位置:
Path:alps/vendor/mediatek/proprietary/custom/${proj}/hal/audioflinger/audio/audio_custom_exp.h
Ex.
#define USING_EXTAMP_HP
9.1.2 使能speaker
Path:alps/kernel-xx/sound/soc/mediatek/mt_soc_audio_v2/mt_soc_codec_63xx.c
9.1.3 menuconfig配置:
Path:Device driver->sound card support->advancedlinux sound architecture->alsa for soc audio support/
基于MT6752/32平台 Android L版本驱动移植步骤的更多相关文章
- android L版本AAL新架构
[DESCRIPTION] 和之前KK版本相比,在L版本上面AAL的架构也有发生一些改变. 拿掉了之前KK平台上使用的MTK LABC,使用Android原生的自动背光功能. AALService内部 ...
- Ubuntu 试用Android L版本
Android L是最近google一个大更新的版本,目前google开发了android L的开发者预览版本,对于一个android 开发者来说很定是要下载下来体验一把,顺便也要了解一下Androi ...
- 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
一.移植环境: 1.主机:Ubuntu 10.10发行版 2.目标机:FS_S5PC100平台 3.交叉编译工具:arm-cortex_a8-linux-gn ...
- Android 最新L版本,都更新什么东西了
Android L版本重大修改 一:New Android Runtime (ART) 新的运行环境,4.4一下的版本ART是可选的运行环境,默认还是Dalvik.但是在Android L版本之后默认 ...
- [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)
温馨提示 建议你先了解一下上一篇博文([Android L]SEAndroid增强Androd安全性背景概要及带来的影响)所讲的内容,先对SEAndroid窥个全貌,然后再继续本节内容. ...
- Android L 之 RecyclerView 、CardView 、Palette
转: http://blog.csdn.net/xyz_lmn/article/details/38735117 <Material Design>提到,Android L版本中新增了Re ...
- Android L中的RecyclerView 、CardView 、Palette的使用
<Material Design>提到,Android L版本中新增了RecyclerView.CardView .Palette.RecyclerView.CardView为用于显示复杂 ...
- 基于335X平台的UBOOT中交换芯片驱动移植
基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...
- AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
随机推荐
- java.io.FileNotFoundException: ..\lib\commons-el.jar
安装openfire成功后,启动遇到java.io.FileNotFoundException: ..\lib\commons-el.jar错误,并不是缺少了jar包,只需以管理员身份运行即可解决.
- MyBatis与MySQL交互
MyBatis是我接触到的第一个框架,下面谈一谈我第一次使用MyBatis时的感悟. 首先是一些准备工作 下载相关的jar包.到GitHub上就行,上面有全面和完整的jar文件 在eclipse上安装 ...
- cocos2dx 3.3 C++工程添加lua支持
准备工作: 1. 拷贝cocos2d-x-3.3rc0\external\lua整个文件夹到项目中(如myProject\cocos2d\external\lua) 2. 拷贝cocos2d-x-3. ...
- Servlet之Listener监听器
Servlet2.5规范共有8中Listener接口,6种Event类型 ServletContextListener接口 [接口方法] contextInitialized()与 contextDe ...
- (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...
- 用SpriteBuilder简化"耕牛遍地走"的动画效果(四)
写到这突然有童鞋质疑,你这哪里是牛,分明是熊嘛! 仔细看了下,还真像牛.反正是这个意思.怪本猫猪牛熊不分,好在道理是一样的. 下面继续,言归正传. 添加一个空白的touchBegan方法,如果没有这个 ...
- SQL join 语句 画图果然更容易理解
我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的.不过正如在她的帖子 ...
- RxVolley使用文档 —— RxVolley = Volley + RxJava + OkHttp
RxVolley使用文档 -- RxVolley = Volley + RxJava + OkHttp 偶然有幸,看到这个框架,便深深的爱上了这个框架,赶紧转载一发到自己的博客上温故而知新,而且作者一 ...
- Java Web 高性能开发,第 1 部分: 前端的高性能
Web 发展的速度让许多人叹为观止,层出不穷的组件.技术,只需要合理的组合.恰当的设置,就可以让 Web 程序性能不断飞跃.所有 Web 的思想都是通用的,它们也可以运用到 Java Web.这一系列 ...
- Linux Shell脚本攻略学习总结:一
终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...