基于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版本驱动移植步骤的更多相关文章

  1. android L版本AAL新架构

    [DESCRIPTION] 和之前KK版本相比,在L版本上面AAL的架构也有发生一些改变. 拿掉了之前KK平台上使用的MTK LABC,使用Android原生的自动背光功能. AALService内部 ...

  2. Ubuntu 试用Android L版本

    Android L是最近google一个大更新的版本,目前google开发了android L的开发者预览版本,对于一个android 开发者来说很定是要下载下来体验一把,顺便也要了解一下Androi ...

  3. 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植

    一.移植环境:        1.主机:Ubuntu 10.10发行版        2.目标机:FS_S5PC100平台        3.交叉编译工具:arm-cortex_a8-linux-gn ...

  4. Android 最新L版本,都更新什么东西了

    Android L版本重大修改 一:New Android Runtime (ART) 新的运行环境,4.4一下的版本ART是可选的运行环境,默认还是Dalvik.但是在Android L版本之后默认 ...

  5. [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)

    温馨提示      建议你先了解一下上一篇博文([Android L]SEAndroid增强Androd安全性背景概要及带来的影响)所讲的内容,先对SEAndroid窥个全貌,然后再继续本节内容.   ...

  6. Android L 之 RecyclerView 、CardView 、Palette

    转: http://blog.csdn.net/xyz_lmn/article/details/38735117 <Material Design>提到,Android L版本中新增了Re ...

  7. Android L中的RecyclerView 、CardView 、Palette的使用

    <Material Design>提到,Android L版本中新增了RecyclerView.CardView .Palette.RecyclerView.CardView为用于显示复杂 ...

  8. 基于335X平台的UBOOT中交换芯片驱动移植

    基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...

  9. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

随机推荐

  1. TBschedule入门

    tbschedule 淘宝的wiki: http://code.taobao.org/p/tbschedule/wiki/index/ 截取内容如下: 此文档内部包括: 1.设计目标说明 2.主要概念 ...

  2. Servlet之Response对象

    下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头.这些方法通过HttpServletResponse 对象可用. 1    String encodeRedirectURL(Stri ...

  3. Android开发学习之路--RxAndroid之操作符

      学习了RxAndroid的一些基本知识,上篇文章也试过了RxAndroid的map操作符,接着来学习更多的操作符的功能吧.   操作符就是为了解决对Observable对象的变换的问题,操作符用于 ...

  4. Oracle AP Invoice APIs

     These APIs are handful when you want to do Insert, Update or Delete programmatically for some bus ...

  5. 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  6. Android开发学习之路--Android Studio项目目录结构简介

    既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...

  7. How to Find the Self Service Related File Location and Versions

     How to Find the Self Service Related File Location and Versions (文档 ID 781385.1) In this Document ...

  8. (九十四)集成PKRevealController实现左右抽屉视图

    使用PKRevealController可以实现类似于QQ等软件的左右抽屉视图,拖出的视图分为leftView和rightView,分别取自View的左半部分和右半部分,因此,根据不同的需求,可以选择 ...

  9. iOS中分段控制器与UIScrollView结合使用

    指定根视图: // 设置window的根视图控制器 self.window.rootViewController = [[UINavigationController alloc] initWithR ...

  10. android sensor架构

    Android Sensor 架构深入剖析 作者:倪键树,华清远见嵌入式学院讲师. 1.Android sensor架构 Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器 ...