高通平台开发

手机Bring-up 
3.1. Linux 部分编译 
高通的代码分两部分:一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载。 
将高通产权的代码放到:vendor/qcom/proprietary。 
编译对应的目标: 
sourcebuild/envsetup.shsourcebuild/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 */
1
2
3
4
5
6
7
#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工作就基本完成了。

原文:https://blog.csdn.net/winva/article/details/50739105 
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值