基于MT6752/32平台 Android L版本驱动移植步骤
基于MT6752/32平臺(tái) Android L版本驅(qū)動(dòng)移植步驟
????????????? 根據(jù)MK官網(wǎng)所述,在Android L 版本上Turnkey ABS 架構(gòu)將會(huì)phase out,而Mediatek Turnkey架構(gòu)將會(huì)全面轉(zhuǎn)向Turnkey AOSP架構(gòu)。本博文將會(huì)大致描述下如何將ABS架構(gòu)下KK版本的驅(qū)動(dòng)如何移植到AOSP架構(gòu)的android L版本上。
1.1 Turnkey ABS與AOSP簡(jiǎn)介
????? Turnkey ABS架構(gòu)是MTK設(shè)計(jì)的架構(gòu),深度客制化的編譯系統(tǒng),統(tǒng)一的配置文件和全局配置。mediatek將改動(dòng)部分集中管理。而Turnkey AOSP架構(gòu)采用Google標(biāo)準(zhǔn)架構(gòu)(Android Open Source Project),將preloader、lk、kernel、android獨(dú)立維護(hù)和配置,在標(biāo)準(zhǔn)AOSP架構(gòu)上做了客制化,并且采用分開(kāi)維護(hù)的方式。兩者的差別大致可以用下圖表示:
?
? 由于Turnkey ABS架構(gòu)是MTK深度客制化的系統(tǒng),與google標(biāo)準(zhǔn)AOSP相聚甚遠(yuǎn),不符合標(biāo)準(zhǔn)的AOSP精神;且各個(gè)部分相互引用,耦合性比較高,無(wú)法獨(dú)立編譯和維護(hù),內(nèi)部開(kāi)發(fā)周期較長(zhǎng);同時(shí)kernel部分并非獨(dú)立維護(hù)的,而是分散在codebase的多個(gè)目錄,不易將kernel部分開(kāi)源出去,開(kāi)源領(lǐng)域大部分的應(yīng)用都是針對(duì)標(biāo)準(zhǔn)AOSP開(kāi)發(fā)的,不容易整合。而Turnkey AOSP依然是Turnkey,但保留了MTK得各個(gè)Feature,各個(gè)模塊獨(dú)立維護(hù)和編譯。相對(duì)ABS架構(gòu)而言,AOSP架構(gòu)的主要變化如下:Android采用標(biāo)準(zhǔn)AOSP編譯方式,kernel編譯方式保持與原生一致;preloader、lk獨(dú)立編譯,文件路徑各模塊完全分開(kāi),mtk改動(dòng)的分別嵌入到各個(gè)部分;大部分driver架構(gòu)都沒(méi)變,以前的driver依舊可用,kernel部分逐漸進(jìn)行標(biāo)準(zhǔn)化,采用標(biāo)準(zhǔn)api等等...
? MTK官網(wǎng)上有關(guān)于新架構(gòu)的相關(guān)介紹資料以及基于mt6572/6582的driver all in one。而在Android L版本上有相當(dāng)一部分文件的放置路徑有很大變化。但是,從移植的過(guò)程中來(lái)看,各個(gè)模塊需要配置的文件基本沒(méi)變,只是嵌入到新的目錄中去了,這個(gè)只需要我們用grep和find命令找出其所在的位置即可,另外,新的架構(gòu)的一些配置需要使用menuconfig來(lái)操作以及進(jìn)行一些compile的控制,也就是makefile的編寫(xiě)。在一些配置不是很了解的情況下,最好的辦法就是參考系統(tǒng)自帶的同類(lèi)driver的配置方法。
2 Turnkey? AOSP上driver的配置
?? 2.1 Flash配置?
????? 2.1.1 相關(guān)配置文件路徑
??? ? ?? Xls表格里面找到相應(yīng)的Flash型號(hào):
????????????? Xls路徑:alps/bootable/bootloader/preloader/tools/emigen/{platform}/MemoryDeviceList_{platform}.xls
????? ? custom_MemoryDevice.h文件修改為所使用的flash型號(hào):????????
?????????? ? 路徑: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可以通過(guò):get_build_var TARGET_DEVICE獲得。
?????? 生成的bin文件位于bootable/bootloader/preloader/bin目錄下,并不會(huì)生成在out目錄下。
?????? 也可以使用下面的命令:
??????? make -j12 pl 2>&1 | tee pl_build.log
??????? 其生成的bin文件會(huì)在out目錄下。
???? 3 LCM配置
??????? 3.1 LK部分相關(guān)文件目錄
??????????? 3.1.1 驅(qū)動(dòng)文件路徑:alps/bootable/bootloader/lk/dev/lcm/${lcm_driver_name}/xx.c
???????????? 3.1.2 修改同目錄內(nèi)的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修改開(kāi)機(jī)logo
?????????????????? 1:開(kāi)機(jī)logo資源文件:
? ? ? ? ? ? ? ? ? ? ? ? ?? 路徑:alps/bootable/bootloader/lk/dev/logo/${項(xiàng)目對(duì)應(yīng)的分辨率圖片}
??????????????????? 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中l(wèi)cm配置???????????????? 3.2.1加入驅(qū)動(dòng)文件: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 編譯步驟(通過(guò)menuconfig配置):
???????????????????????????? cd? kernel-xx
? ? ? ? ? ? ? ? ? ? ? ? ? ?? mkdir out
? ? ? ? ? ? ? ? ? ? ? ? ? ?? make O=out${project}_debug_defconfig
???????????????????????????? make O=out menuconfig
???????????????????????? 接下來(lái)的配置需要到menuconfig中完成:? ? ? ? ? ? ? ? ? ? ? ? ? ?? 1路徑:Device Driver ->Misc Devices->Mediatek Properitary Configgurations ->CUSTOM_KERNEL_LCM?? 此變量配置為我們所需要的lcm driver的名字
????????????????????????????? 2 修改目錄下面的LCM_HEIGHT和LCM_WIDTH為屏的實(shí)際分辨率。???????????????????????? 復(fù)制kernel-xx/out/.config文件到alps/kernel-xx/arch/arm64/configs/${project}_debug_defconfig
??????????????????? 編譯命令:
?????????????????????? 在根目錄下運(yùn)行:make –j12 kernel bootimage
??? 4 Touch Panel配置????????? 4.1.1驅(qū)動(dòng)及頭文件路徑:
??????????????? 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勾選相應(yīng)的touch driver。
????????? 4.1.5 編譯????????????? 編譯kernel以及bootimage
??????????? ? ? ? 在根目錄下運(yùn)行: make –j12 kernel bootimage
??????? 5? Camera配置???????????????? 5.1.1? kernel driver添加
?????????????????? Path:alps/kernel-xx/drivers/misc/mediatek/imgsensor/src/mt6752/<camera_driver_name>,同時(shí)需要更改同目錄下makefile文件
????????????????????? Path:alps/kernel-xx/drivers/misc/mediatek/imgsensor/src/${plat}/kd_sensorlist.h
???????????????? 5.1.3 Hal中添加設(shè)備
??????????????????? 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,并將相應(yīng)的.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,同時(shí)修改同目錄下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 修改設(shè)備權(quán)限
????????????????? 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配置,以距離(光感)感應(yīng)為例:
??????????? 8.1.1 Driver相關(guān)
?????????????? 頭文件 path:alps/kernel-xx/drivers/misc/mediatek/mach/${plat}/${proj}/alsps/xxx/*,需修改makefile控制編譯。
?????????? 8.1.2添加控制開(kāi)關(guān)到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 ?????
???????????? 接下來(lái)需用menuconfig勾選自己的sensor.
??????????? 8.1.3 配置dws中相關(guān)的中斷腳,觸發(fā)方式等。
????????? 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/
總結(jié)
以上是生活随笔為你收集整理的基于MT6752/32平台 Android L版本驱动移植步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 采用UltraISO制作U盘启动盘
- 下一篇: Android Hal层简要分析