提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着MTK代码的不断迭代,代码构架在配置方式上有了许多的变化。
这里主要介绍: 1.MTK ABS & AOSP 的对比 2.Preloader的配置 3.LK的配置 3.Kernel的配置
提示:以下是本篇文章正文内容,下面案例可供参考
一、MTK ABS & AOSP 的对比
? ? ? ? ? ? ? ? ABS架构 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AOSP架构
差异性 | ABS | AOSP |
---|
构架差异 | ABS架构中各个部分的耦合性很高。 | AOSP架构各个部分界限划分明确,耦合性低 | 文件路径 | ABS架构文件管理比较集中 | AOSP架构都是各个部分(层次)分开管理 | 配置方式 | ABS架构是全局集中式配置 | AOSP架构是分布式配置的。各个层次单独配置 |
因MTK后续开发是AOSP架构,依次后面介绍只有AOSP相关
二、配置方式
1.preloader配置
代码路径:vendor/mediatek/proprietary/bootable/bootloader/preloader/ 客制化文件路径:vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/${PROJECT}
${PROJECT}.mk -- 默认的配置文件
cust_bldr.mak -- 客制化配置文件
inc/custom_MemoryDevice.h --Memory配置文件
custom_MemoryDevice.h配置文件需要根据对应平台的 MemoryDeviceList_MTxxxx.xls里面也有的内容进行配置
路径:vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MTxxxx/MemoryDeviceList_MTxxxx.xls
后续很多开发公司为了方便开发编辑,大多数公司将配置文件放到了:
device/mediateksample/project${PROJECT}_pl.mk
device/mediateksample/projectcustom_MemoryDevice.h
通过编译脚本将配置文件覆盖到客制化文件路径!
编译命令:
> make -j24 pl
vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/emigen.mk
会将MemoryDeviceList_MTxxxx.xls编译成文本形式。
编译生成路径:
out/target/product/${PROJECET}/obj/PRELOADER_OBJ/inc/custom_emi.h
PL层 UART LOG端口配置
路径:
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/${PROJECT}/cust_bldr.mak
CFG_UART_LOG := UART1 #配置端口
CFG_LOG_BAURATE := 921600 #配置波特率
PL层配置电池检测
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/${PROJECT}/${PROJECT}.mk
MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION=no #默认开启电池检测 设置为yes为关闭电源检测
> PS:电池检测分preloader/lk/kernel层次分别控制。控制宏名一致。此操作适用于无电池项目以及电源调试阶段!
编译指令:
1.利用PL编译脚本编译(编译速度快)
$ cd vendor/mediatek/proprietary/bootable/bootloader/preloader
$ export TARGET_PRODUCT=${PROJECT}
$ ./build.sh 2>&1 |tee pl.log
bin生成路径:
out/target/product/${PROJECT}/obj/PRELOADER_OBJ/bin/preloader_${PROJECT}_LINKED.bin
2.将pl当作android module来编译(编译速度慢)
$ make -j24 pl 2 > &1 |tee out/pl.log
bin生成路径:
out/target/product/${PROJECT}/preloader_${PROJECT}.bin
PS:以上操作都在 source build/envsetup.sh; lunch ${PROJECT}后操作
2.LK配置
代码路径:vendor/mediatek/proprietary/bootable/bootloader/lk/ 客制化路径:vendor/mediatek/proprietary/bootable/bootloader/lk/target/${PROJECT} //主要是一些编译选项控制。 客制化driver文件路径:vendor/mediatek/proprietary/bootable/bootloader/lk/dev/ //LK层的驱动代码存放路径 客制化项目配置路径:vendor/mediatek/proprietary/bootable/bootloader/lk/project/${PROJECT} .mk
后续很多开发公司为了方便开发编辑,大多数公司将配置文件放到了: device/mediateksample/project/**/${PROJECT}_lk.mk
修改开机Logo
vendor/mediatek/proprietary/bootable/bootloader/lk/project/${PROJECT}.mk
BOOT_LOGO =wuxganl #修改对应分辨率的logo配置值为对应logo的文件夹名
> PS:device/mediateksample/${PROJECT} /ProjectConfig.mk 内的BOOT_LOGO要设置成一致
logo存放目录:
vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/
PS:编译lk的同时会编译出 logo.bin & lk.bin logo.bin包涵lk以及kernel的logo
修改LK阶段的LCM vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/rules.mk //编译控制文件对应控制编译对应的LCM driver源文件 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/mt65xx_lcm_list.c //编译控制调用对应的LCM driver
配置文件:vendor/mediatek/proprietary/bootable/bootloader/lk/project/${PROJECT}.mk
lcm driver路径:vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/
CUSTOM_LK_LCM="xxxxxx" #配置值根据lcm driver路径内的文件夹名,可以配置多个LCM driver 以空格隔开
PS:Kernel层的LCM driver 需要另外配置。
修改LK阶段的背光 vendor/mediatek/proprietary/bootable/bootloader/lk/target/${PROJECT}/cust_leds.c
25 static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
26 {"red", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
27 {"green", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
28 {"blue", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
29 {"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
30 {"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
31 {"button-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},
32 {"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},
33 }
> PS:修改"lcd-backlight" 中的配置即可
> Kernel层的背光设置需要单独设置
编译指令:
1.利用lk编译脚本编译(编译速度快)
$ cd vendor/mediatek/proprietary/bootable/bootloader/lk/
$ make -j24 ${PROJECT} 2 > &1 |tee lk.log
生成路径:out/target/product/${PROJECT}/obj/BOOTLOADER_OBJ/build-${PROJECT}/
2.将lk当作Android module来编译(编译速度慢)
$ make -j24 lk 2 > &1 |tee out/lk.log
bin生成路径:
out/target/product/${PROJECT}/lk.img
out/target/product/${PROJECT}/logo.bin
PS:以上操作都在 source build/envsetup.sh; lunch ${PROJECT}后操作
3.Kernel配置
代码路径:kernel-4.9/ #不同平台kernel版本有差 配置文件路径:kernel-4.9/arch/arm64/configs/${PROJECT}_defconfig ? ? #user/userdebug版本配置 ??????? kernel-4.9/arch/arm64/configs/${PROJECT}_debug_defconfig? ? #ENG版本配置
PS: 后续很多开发公司为了方便开发编辑,大多数公司将配置文件放到了: device/mediateksample/project/**/${PROJECT}_defconfig
MTK Driver路径:kernel-4.9/drivers/*/mediatek/? ? ?# *的取值可以为SPI / input/ power/ 等 ? ?? ?????kernel-4.9/drivers/misc/mediatek/ ?#存放LCM、Sensor、Camera、USB等
直接修改defconfig文件:? ?编辑方便直接,会出现依赖项问题
利用 menconfig(make menuconfig):? ?自动处理依赖性。编辑麻烦。只能修改kernel目录下的.config。
$ cd kernel-4.9
$ mkdir out
$ make O=out ${PROJECT}_defconfig
$ make O=out menuconfig
修改后需要保存则:
cp out/.config arch/arm64/configs/${PROJECT}_defconfig
PS:因开发方便非必要的情况下基本都是使用直接修改${PROJECT}_defconfig来配置
配置LCM LCM driver路径:kernel-4.9/drivers/misc/mediatek/lcm/ kernel-4.9/arch/arm64/configs/${PROJECT}_defconfig
CONFIG_CUSTOM_KERNEL_LCM="xxxx" #配置LCM driver 可以配置多个以空格隔开
CONFIG_LCM_HEIGHT="1920" #配置LCM的宽高
CONFIG_LCM_WIDTH="1200"
Kernel层配置电池检测 kernel-4.9/arch/arm64/configs/${PROJECT}_defconfig
CONFIG_MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION=y # 设置y即关闭电池检测
编译指令:
1.Kernel标准编译(编译速度快)
$ cd kernel-4.9
$ mkdir out && make O=out ${PROJECT}_defconfig
$ make -j24 -k O=out zimage modules |tee kernel.log
生成路径:out/target/product/ ${PROJECT}/boot.bin
2.将kernel当作Android module来编译(编译速度慢)
make -j24 kernel 2 > &1 |tee out/kernel.log
生成路径:out/target/product/ ${PROJECT}/boot.bin
总结
以上就是今天要讲的内容,本文仅仅简单介绍了ABS 与 AOSP的区别以及AOSP的基本配置方式。
|