基于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配置
?????? 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文件
????????????????????? 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
????????????????????? 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_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
?????????????????? 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控制編譯。
?????????? 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版本驱动移植步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用UltraISO制作U盘启动盘
- 下一篇: Android Hal层简要分析