博客
关于我
msm8909 Android6.0杂记
阅读量:346 次
发布时间:2019-03-04

本文共 12769 字,大约阅读时间需要 42 分钟。

高通msm8909 Android6.0 笔记(未完)

一 : 添加新板

二 :DDR配置
三 : EMMC && SD card 配置
四: GPIO/I2C/SPI/SDIO/UART 配置
五 : Lights :背光、摄像机灯光配置
六 : 触摸屏配置
七 : 虚拟按键配置
八 : Connectivity : Bluetooth、Wi-Fi、GNSS配置
九: 传感器(sensor) : 重力传感器、环境光/接近传感器
十: LCD配置
十一: Audio音频配置
十二: Camera配置
十三: Power电源管理配置
十四: Logo 添加
十五: 开机动画(boot animation)
十六: OTA

一添加新板(Add new board)

1: Android 编译自定义(compile customization)

1.1:Android config(1):

在 /android/device/qcom 下创建 msm8909_xxx文件夹,然后拷贝其他文件的配置文件到msm8909_xxx 修改配置

1.2:Android config(2) :配置 msm8909_xxx中的配置文件

必须配置的(necessary) : AndroidBoard.mk  :  #board makefile                AndroidProducts.mk : #product makefile                BoardConfig.mk   :  #board config                msm8909_xxx.mk    : #target config    可选择的(optional) :   init.target.rc  : #init resource config                system.prop    :  #system properties                recovery.fstab  : #recovery fs table                fstab.qcom    :  #normal fs table

1.3:Android config(3) :

/device/qcom/common/vendorsetup.sh

add_lunch_combo msm8909_xxx-userdebug

/vendor/qcom/proprietary/common/config/device-vendor.mk

add into project list: PRODUCT_LIST += msm8909_xxx

/device/qcom/msm8909_xxx/msm8909_xxx.mk :asign product name && device:

$(call inherit-product, device/qcom/msm8909/msm8909.mk)
PRODUCT_NAME := msm8909_xxx
PRODUCT_DEVICE := msm8909_xxx

1.4:Android config(4) :

/device/qcom/msm8909_xxx/AndroidBoard.mk : asign kernel default config :

KERNEL_DEFCONGIF := msm8909-xxx_defconfig
/devcie/qcom/msm8909_xxx/AndroidProducts.mk : add product features
RODUCT_MAKEFILES : = \
$(LOCAL_DIR)/msm8909_xxx.mk
/device/qcom/msm8909_xxx/BoardConfig.mk : add board config:
include device/qcom.msm8909/BoardConfig.mk

1.5:Android config(5) : Add board to ./build_8909.sh

android(){cd ${TOP_DIR}/LINUX/androidsource build/envsetup.sh lunch 27     //新板编码号 lunchmkdir -p ${OUT}/download_imagesmkdir -p ${OUT}/collect_elfsm -j8 2>&1 | tee build_android.logcd ${TOP_DIR}}

2: Kernel 配置自定义: 自定义默认配置 :

in kernel/arch/arm/configs 拷贝其他工程的配置文件并且重命名,此配置文件被用于 AndroidBoard.mk

3:SBL dts 自定义配置:

3.1: 选择那一种DTS ?MTP ? QRD

选择DTS基于硬件设计,包括高通公司默认的 MTP或者QRD设计;

3.2: 应该怎么在代码中选择具体的DTS :

修改 platform_id 在 boot_images/core/boot/secboot3/hw/msm8909/boot_cdt_array.c去匹配新的 platform id 在dts中

3.3: SBL中的平台ID对内核上的DTS有什么影响?

SBL获取平台ID 和 平台子类型 SBL写入共享内存 LK(即为bootloader(littlekernel))获取信息并且找到合适的DTS条目    boot_images/core/boot/secboot3/hw/msm8909/boot_cdt_array.c:    0x03,0x0B,0x01,0x00,0x00,0x00    对于SBL:Byte0 : 0x03    platform_id version         Byte1 : 0x0B     platform_id type                    0x08 : target is a MTP device                  0x0B : target is a QRD device         Byte2 : platform_id major platfoem version         Byte3 : platform_id minor platform version         Byte4 : paltform_id subtype    对于DTS :        qcom,board-id = 
对于MTP型dts : compatible = "qcom,msm8909-mtp" qcom,board-id = <8 0x100>;// 8 :Byte1 0x08 0x00:Byte4 0x00 对于QRD型dts : qcom,board-id = <0x1000b 0x100>; //Byte1 0x0B 0x00:Byte4 0x00

4:启动流:

PBL : 固话在CPU内部,是芯片上电后执行的真正的第一行代码,在正常的启动流成中会加载 SBL1SBL1: 位于eMMC中,由PLB加载,初始化buses,DDR,clocks,加载QSEE,RPM,APPSBL等QSEE:创建安全环境APPSBL:即为bootloader 目前使用LK(little kernel) 初始化设备,设置启动模式,加载kernelKernel: 设备以及内核初始化,加载Modem,加载WCN,内核态init进程Android: 用户态init进程,Zygote启动,Android,Framewoek初始化

二:DDR配置 :

DDR配置文件:boot_images/core/boot/secboot3/scripts/    jedec_lpddr2_single_channel.xml    jedec_lpddr3_single_channel.xmlDDR配置参数:    例如 DDR type、Mode、tRFC、tXSR, check DDR vendor specification:    
5
0
2100
2200
CDC(Calibrated Delay Circuit)部分参数请参考文档:ddr_workflow_and_debugging_guide.pdfDDR参数生成流: 在配置文件目录下执行 python cdt_generator.py jedec_lpddr3_single_channel.xml platform_ddr.bin 生成 platform_ddr.bin boot_cdt_array.c 替换目标文件 boot_images/core/boot/secboot3/hw/msm8909/boot_cdt_array.c

三:EMMC and SD Card 配置:

EMMC and SD Card 配置: 功能描述、EMMC分区配置、外部SD卡配置、驱动探测函数说明EMMC分区配置 :2个引导分区(boot area partitions):两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好,所以很多chipset上都会使用这两个区域来存放一下关键数据,如boot image,default 配置参数等等,MTK使用UDA来存放boot data,而使用boot area来存放配置参数;Qualcomm则使用Boot 1 来存放boot data,boot 2 来存放配置参数1个RPMB(Replay Protected Memory Block):用于给系统存放一些特殊的需要进行访问授权的数据1个UDA(User Data Area) 用户数据空间:是AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右,即4GB的eMMC UDA的区域只有4GB*93%=3809MB

之前说的BOOT1&2、RPMB和UDA区域我们都可以认为他们在物理上是独立的(当然都是存在于同一块die上)。即他们各自的物理起始地址都是0x0

……略

四:GPIO/I2C/SPI/SDIO/UART 配置

……略

五:Lights

5.1 : LED Architecture 见 LED_Architecture 图片

5.2 : 代码结构

HAL : /hardware/qcom/display/liblight/lights.c    Kernel : /kernel/drivers/leds/leds-class.c          /kernel/drivers/leds/led-core.c          /kernel/drivers/leds/led-triggers.c    Custom driver file(自定义驱动文件)        lcd backlight driver:          /kernel/drivers/pwm/pwm-qpnp.c          /kernel/drivers/video/msm/mdss/mdss_fb.c          /kernel/drivers/video/msm/mdss/mdss_fb_panel.c          /kernel/bootloader/lk/target/msm8909/target_display.c        camera led flash driver          /kernel/drivers/leds/leds-msm-gpio-flash.c          /kernel/drivers/media/platform/msm/camera_v2/sensor/flash/msm_led_trigger.c          /kernel/drivers/media/platform/msm/camera_v2/sensor/flash/msm_led_flash.c          /kernel/drivers/media/platform/msm/camera_v2/sensor/flash/msm_led_torch.c

5.3 : 背光: PWM mode、DCS mode、WLED mode

PWM mode : PMIC输出PWM控制背光芯片    DCS mode : 通过MIPI配置LCMIC寄存器输出PWM控制背光芯片    WLED mode: GPIO、I2C等控制背光芯片

5.4 : 修改 bootloader(LK(litte kernel))部分修改:增加LCM供应商提供的(lcd显示驱动接口)文件时,要增加相应的背光配置:

确认背光模式:本项目是 WLED模式     /bootable/bootloader/lk/dev/gcdb/display/include/panel_otm1285a_auo_hd_video.h        static struct backlight otm1285a_auo_hd_video_backlight = {        1,1,255,100,0,0,  //第一个位 0:PWM mode; 1:WLED mode; 2:DCS mode        };      确认引脚:/bootable/bootloader/lk/target/msm8909/include/target/display.h        static struct gpio_pin bkl_gpio    确认占空比 频率:        PWM mode : /bootable/bootloader/lk/target/msm8909/target_display.c            #define PWM_DUTY_US 13   //占空比            #define PWM_PERIOD_US 27  //频率?        WLED mode :lk/platform/msm_shared/mipi_dsi.c            static char lcm_pwm_cmd1[] = {                0x02, 0x00, 0x29, 0xC0,                0x51, 0x7F, 0xFF, 0xFF,            };    在背光入口函数: 修改增加背光芯片驱动控制, 例如GPIO控制        /bootable/bootloader/lk/target/msm8909/target_display.c        bkl_gpio.pin_id = 36; //背光控制引脚设定

5.5:kernel部分:增加LCM供应商提供的文件时,需要增加背光配置,参考硬件原理图和背光驱动芯片的PWM工作频率范围,在设备树中添加属性,比如frequecny,bank,gpio等等

/kernel/arch/arm/boot/dtsi/qom/msm8909-mtp.dtsi    //改成 pwm 或者 wled 或者 dcs 模式    &spi_gc9305_qvga_cmd {        qcom,mdss-spi-bl-pmic-control-type = "bl_ctrl_wled";//WLED mode        qcom,mdss-spi-bl-pmic-bank-select = <0>; //PWM BANK : 0        qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;        qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;        qcom,cont-splash-enabled;        };    PWM MODEL:        驱动文件修改: MPP 2 配置为PWM 输出        /kernel/arch/arm/boot/dtsi/qom/msm8909-pm8909-mtp.dtsi        mpp@a100 { /* MPP 2 */        /* Backlight PWM */            qcom,mode = <1>;        /* Digital output */            qcom,invert = <0>;      /* Disable invert */            qcom,src-sel = <4>;     /* DTEST1 */            qcom,vin-sel = <0>;     /* VPH_PWR */            qcom,master-en = <1>;       /* Enable MPP */        };    驱动文件修改: 配置PWM基础属性:        /kernel/arch/arm/boot/dtsi/msm-pm8909.dts            pm8909_pwm: pwm@bc00 {        compatible = "qcom,qpnp-pwm";//pwm 寄存器地址 偏移量        reg = <0xbc00 0x100>; //        reg-names = "qpnp-lpg-channel-base";        qcom,channel-id = <0>; //pwm通道ID        qcom,supported-sizes = <6>, <9>;//PWM 占空比        #pwm-cells = <2>;        };    WLED MODE:        修改DTS文件 : /kernel/arch/arm/boot/dtsi/qom/msm8909-mtp.dtsi        backlight_1wire:bklt-1wire {            compatible = "qcom,leds-gpio-bklt";            status = "disabled";            qcom,bklt-1wire = <&msm_gpio 15 0>;//36?            linux,name = "bklt-1wire";            linux,default-trigger = "bkl-trigger";        };    在目录 /kernel/drivers/leds 新增 leds-msm-bklt-wd3138.c    修改编译配置 /kernel/drivers/leds/Makefile  :  obj-$(CONFIG_LEDS_MSM_GPIO_FLASH) += leds-msm-bklt-wd3138.o    修改编译配置 /kernel/drivers/leds/Kconfig    /kernel/arch/arm/config/msm8909-1gb_defconfig  : CONFIG_LEDS_WD3138 = y

六:触摸屏配置

6.1 :编译配置

TP驱动文件    .c路径 : kernel\drivers\input\touchscreen    .h路径 : 在.c文件中使用include声明,如果和c文件不处于同一个文件,则对应修改 kernel\drivers\input\touchscreen\focaltech_touch\focaltech_core.ckernel\arch\arm\boot\dts\qcom\msm8909-mtp.dtsi                    挂载  &i2c_1 { /* BLSP1 QUP1 */                            focaltech@38{                         // i2c设备7位地址                                compatible = "focaltech,fts"; //匹配驱动文件 compatible                                reg = <0x38>;                 // i2c设备7位地址                                interrupt-parent = <&msm_gpio>; //中断属性配置                                interrupts = <13 0x2>;       //中断属性配置                                vdd-supply = <&pm8909_l17>;  //电源口配置                                vcc_i2c-supply = <&pm8909_l6>;  //电源口配置                                pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release";                                pinctrl-0 = <&ts_int_active &ts_reset_active>;                                pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;                                pinctrl-2 = <&ts_release>;                                reset-gpios = <&msm_gpio 12 0x0>;                                interrupt-gpios = <&msm_gpio 13 0x2008>;                                focaltech,panel-coords = <0 0 240 320>;  //驱动文件获取的各项参数                                focaltech,display-coords = <0 0 240 320>;                                focaltech,button-map= <139 102 158>;                                focaltech,no-force-update;                                focaltech,i2c-pull-up;                            };                    };    编译控制        kernel\arch\arm\configs\* :CONFIG_TOUCHSCREEN_XXX = y      CONFIG_TOUCHSCREEN_FTS=y            Kconfig  : kernel\drivers\input\touchscreen\Kconfig        Makefile : kernel\drivers\input\touchscreen\Makefile

6.2 配置设备树

配置文件: kernel\arch\arm\boot\dts\qcom\xxx.dtsi  根据编译配置寻找对应的i2c设备挂载文件        世纪天元手机6.0 kernel\arch\arm\boot\dts\qcom\msm8909-mtp.dtsi        世纪天元手机5.1 kernel\arch\arm\boot\dts\qcom\msm8909-E8909-mtp.dtsi

6.3 驱动文件

6.3.1 : 驱动文件挂载配置 :驱动文件和设备树匹配,需要在C文件中添加语句

世纪天元手机6.0  kernel\drivers\input\touchscreen\focaltech_touch\focaltech_core.c        世纪天元手机5.1  kernel\drivers\input\touchscreen\focaltech_touch\focaltech_core.c

6.4 检验:

查看dts设备是否初始化成功: adb shell cd /sys/bus/i2c/devices 1-0038

查看dts驱动是否初始化成功: adb shell cd /sys/bus/i2c/drivers /ls 1-0038

七 虚拟按键配置

…略

十二 LCD配置

12.1:LK部分配置

12.1.1: 增加屏的初始化文件

增加屏的初始化文件(供应商提供参数,自己按照平台格式添加初始化命令),以ST0281为例 :/bootable/bootloader/lk/dev/gcdb/display/include/panel_gc9305_qvga_spi_cmd.h

12.1.2:修改设置 LCD 屏引脚参数

/bootable/bootloader/lk/target/msm8909/include/target/display.h : 修改设置 LCD 屏引脚参数

12.1.3: 增加本项目LCD屏选项 : /boottable/bootloader/lk/target/msm8909/oem_panel.c

/boottable/bootloader/lk/target/msm8909/oem_panel.c          增加头文件 : #include "include/panel_gc9305_qvga_spi_cmd.h"      在选择屏幕列表中添加 本项目LCD屏    enum {    HX8394D_480P_VIDEO_PANEL,    ...    GC9305_QVGA_SPI_CMD_PANEL,    };    在panel list中添加 panel_name 和 panel_id    static struct panel_list supp_panels[] = {    ...    {"gc9305_qvga_cmd", GC9305_QVGA_SPI_CMD_PANEL},         };    在 init_panel_data函数中添加 本项目LCD屏幕结构体初始化:                              case GC9305_QVGA_SPI_CMD_PANEL:    panelstruct->paneldata    = &gc9305_qvga_cmd_panel_data;    panelstruct->panelres     = &gc9305_qvga_cmd_panel_res;    panelstruct->color        = &gc9305_qvga_cmd_color;    panelstruct->panelresetseq= &gc9305_qvga_cmd_reset_seq;    panelstruct->backlightinfo = &gc9305_qvga_cmd_backlight;    pinfo->spi.panel_cmds   = gc9305_qvga_cmd_on_command;    pinfo->spi.num_of_panel_cmds= GC9305_QVGA_CMD_ON_COMMAND;    pan_type = PANEL_TYPE_SPI;    break;    选择本项目LCD:    屏幕的自适应方式配置 oem_panel_select() :    if((280000 <= lcd_id)&&(lcd_id < 480000))  /* 0.38 */        panel_id = OTM1285A_AUO_HD_VIDEO_PANEL;    else        panel_id = ILI9881C_YUSUN_HD_VIDEO_PANEL;        panel_id = GC9305_QVGA_SPI_CMD_PANEL;  //根据lcd_ID值范围实现自适应

12.4:Kernel部分配置:

添加屏幕驱动文件: /kernel/arch/arm/boot/dts/qcom/..添加 spi-panel-gc9305-qvga-cmd.dtsi增加对屏幕的支持: /kernel/arch/arm/boot/dts/qcom/msm8909-mtp.dtsi 文件中增加对屏幕的支持         增加头文件  #include "spi-panel-gc9305-qvga-cmd.dtsi"        设置背光控制模式 :                    &spi_gc9305_qvga_cmd {                    qcom,mdss-spi-bl-pmic-control-type = "bl_ctrl_wled";                    qcom,mdss-spi-bl-pmic-bank-select = <0>;                    qcom,cont-splash-enabled;                };

……………………………………………………………………..剩余部分慢慢补充…………………………………………………………………………….

 

转载地址:http://wlme.baihongyu.com/

你可能感兴趣的文章
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>