高通平台手机开发之Bring-up

手机Bring-up
3.1. Linux 部分编译
高通的代码分两部分:一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载。
将高通产权的代码放到:vendor/qcom/proprietary。
编译对应的目标:
sourcebuild/envsetup.sh lunch msm8974-userdebug
$ make -j4
编译出来的有以下几个目标文件:
Boot.img emmc_appsboot.mbn system.img userdata.img

3.2. AMSS 部分编译
主要由以下部分构成:
Adsp, boot, debug, modem, rpm, trustzone, wcnss,分别根据高通的说明编译这些模块,不过其中有些模块我们不会改,直接用release的binary文件就行,比如:debug,rpm,trustzone,wcnss。

3.3. 打包成可刷写文件
高通没有提供一个完整的制作可刷写包的工具,我自己写了一个。
核心思想是执行:common/build/update_common_info.py生成NON-HLOS.bin和把system.img,userdata.img等大包分成小包,以及生成分区表。

pack.sh封装了update_common_info.py,能够生成一个完整的可刷写包。

3.4. 刷机
使用高通提供的工具Qfil将代码刷入手机。
3.4.1. 使手机进入Emergency Download模式
如果手机里没有任何软件,手机默认进入Emergency Download。如果没有进入,需要短接一个特定的GPIO。硬件上设计好了一个测试点,把这个点接地,然后把连接手机的USB线插入到电脑,电脑上会出现驱动安装提示,安装好驱动后,会出现一个下载端口。

3.4.2. 刷机过程

刷机完成后,自动重启。

如果手机不能进入刷机模式,需要和硬件一起检查是USB的问题,还是别的电路问题。
3.4.3. fastboot 刷机
如果手机里面已经有分区表,可以通过fastboot来分别刷入不同的模块:boot.img system.img userdata.img
fastboot flash boot boot.img
3.5. 开机测试
这是最为关键的一部,需要根据Log来定位问题。
一般可以通过串口和Jtag工具来调试,对于基于Linux的智能手机来说,一般用串口工具来调试已经足够了。
串口Log能够打出从sbl1, lk到kernel的Log,看看到底问题出在什么地方?
下面是需要注意的:
➢ 修改硬件board_id
Boot_images/core/boot/secboot3/hw/msm8974/boot_cdt_array.c
uint8 config_data_table[CONFIG_DATA_TABLE_MAX_SIZE] =
{
/* Header */
0x43, 0x44, 0x54, 0x00,
0x01, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,

/* Meta data */
0x16, 0x00, 
0x05, 0x00, 
0x1B, 0x00, 
0x88, 0x01, 

/* Block data */

#ifdef BOOT_PRE_SILICON
#ifdef FEATURE_RUMI_BOOT
0x02, 0x0F, 0x01, 0x00, 0x00,
#else
0x02, 0x10, 0x01, 0x00, 0x00,
#endif
#else
- 0x02, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x08, 0x01, 0x00, 0x00,
#endif

修改sbl1里的board_id,与dts里的匹配
/ {
model = “Qualcomm MSM 8974Pro-AA/AB MTP”;
compatible = “qcom,msm8974-mtp”, “qcom,msm8974”, “qcom,mtp”;
qcom,board-id = <8 0>;
};
➢ DDR参数
手机能进如Kernel,但是做Kernel里会死,从Log上看,bitflip或者相关的问题。在这种情况下,需要修改DDR参数。
从芯片厂商获取数据手册,根据高通的说明来改动,改动后的数据放在
Boot_images/core/boot/secboot3/hw/msm8974/boot_cdt_array.c
uint8 config_data_table[CONFIG_DATA_TABLE_MAX_SIZE] =
{
/* Block data */
}
➢ 只编译对应的dts
高通的代码编译时,把一大堆的dts都生成了,放在一起,这样对我们的系统开发会造成不利影响。系统启动时调用的dts不是我们所希望的,所以需要改动build系统,只编译相关dts。
Kernel/AndroidKernel.mk
-DTS_FILES = $(wildcard $(TOP)/kernel/arch/arm/boot/dts/$(DTS_NAME)*.dts)
+DTS_FILES = $(wildcard $(TOP)/kernel/arch/arm/boot/dts/$(DTS_NAME)*$(OEM_PROJECT_NAME).dts)

Kernel/arch/arm/mach-msm/Makefile.boot
+ dtb-$(CONFIG_ARCH_MSM8974) += msm8974pro-ac-pm8941-$(OEM_PROJECT_NAME).dtb
➢ ADB log
如果前面的问题都解决了,手机能进入Kernel,就可以用ADB log了。
$ adb shell cat /proc/kmsg |tee log.txt
3.6. 调试好LCD和TP驱动
具体的调试见4.1和4.2。
LCD,TP功能正常,手机能进入Idle界面,能正常使用,USB连接正常。这样Bring-up工作就基本完成了。

你可能感兴趣的:(手机开发)