1. 程式人生 > >高通平臺手機開發之Bring-up

高通平臺手機開發之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工作就基本完成了。

相關推薦

平臺手機開發Bring-up

手機Bring-up 3.1. Linux 部分編譯 高通的程式碼分兩部分:一部分是開源的,可以從codeaurora.org上下載,還有一部分是高通產權的,需要從高通的網站上下載。 將高通產權的程式碼放到:vendor/qcom/proprieta

平臺手機開發Sensor

4.6. Sensor 高通文件 1) 80-N7635-1_E_Snapdragon_Sensors_Core_New_Sensor_Driver_Integration_LA.pdf 2) 80-NA157-92_C_MSM8974_Snap

平臺手機開發Camera

4.3. Camera 參考文件: 1) 80-NA157-22_PRESENTATION- MSM8974-APQ8074-MSM8X26-APQ8084 LINUX CAMERA OVERVIEW.pdf 2) 80-NE717-1_MSM8

平臺手機開發充電

4.4. 充電 高通文件 1) 80-NL239-4_F_PMIC_SW_Driver_Overview_MSM8916.pdf 在手機能夠充電以後,需要把向電池廠商要電池曲線,然後整合到dts裡。 qcom,battery-data {

平臺手機的power概覽

Power消耗相關 下面的東西總結性居多,沒有涉及到具體的方法,操作性不強,只是作為一個全域性概覽。 1.Power相關測試的KPI選項 靜態:手機閒置時的功耗 suspend:當手機明確不使用時,特別是按了power鍵滅屏告訴手機我要休息的時候,此時手機會主動發起susp

平臺android開發總結 MSM平臺上的AMSS

1、高通平臺android開發總結 1.1 搭建高通平臺環境開發環境 在高通開發板上燒錄檔案系統 建立高通平臺開發環境 高通平臺,android和 modem 編譯流程分析 高通平臺 7620 啟動流程分析 qc

linux驅動由淺入深系列:camera驅動二(基於平臺的V4L2結構及程式碼分析)

在上一篇文章中介紹了camera的基礎知識和相關概念,我們一起來了解一下驅動相關的程式碼結構。本文以高通+android平臺為示例,首先看一下整體框圖:這張圖是從整體上來看的1,圖中最下面的是kernel層的驅動,其中按照V4L2架構實現了camera sensor等驅動,向

平臺msm8953 Linux DTS(Device Tree Source)裝置樹詳解二(DTS裝置樹匹配過程)

本系列導航:有上一篇文章,我們瞭解了dts的背景知識和相關基礎,這次我們對應實際裝置進行一下相關分析。DTS裝置樹的匹配過程一個dts檔案確定一個專案,多個專案可以包含同一個dtsi檔案。找到該專案對應的dts檔案即找到了該裝置樹的根節點。kernel\arch\arm\bo

平臺開發環境搭建、編譯、燒錄(android5.1以上系統)

1. 安裝Ubuntu(12.04LTS以上穩定版本)     安裝過程中必須以根使用者登入或使用sudo獲取root許可權。     1.1按照http://releases.ubuntu.com中的說明,建立安裝光碟,將其安裝到計算機上。     1.2. 安裝完成後,通過下列選項之一來更新軟體:    

德地圖JS開發入門

1.高德地圖JavaScript API引入: 方式1:頁面直接引入 <script type="text/javascript"src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></script&g

基於Android7.1 8953 平臺下零死角玩轉裝置樹DTS

【基於Android7.1 8953 高通平臺下零死角玩轉裝置樹DTS】 更新內容:  【創科之龍_安卓開發】第01課_為什麼引用linux裝置樹和對比優勢  【創科之龍_安卓開發】第02課_如何在Linux-3.x核心

平臺啟動log概述(PBL log、sbl1 log、kernel log)【轉】

本文轉自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平臺啟動log概述(PBL log、sbl1 log、kernel log)在嵌入式linux的除錯過程中log有著至關重要的地位,

平臺讀寫nv總結【轉】

本文轉載自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言      1. 什麼是NV      &nbs

平臺 ramdump-parser 簡介

ramdump 是什麼?簡單來說就是把系統memory中的某一個時間點的的資料資訊通過一定手段取出來儲存起來的記憶體崩潰檔案,屬於ELF檔案格式。 當系統發生致命錯誤無法恢復的時候,主動觸發抓取ramdump把異常現場保留下來供離線分析定位問題是一種非常重要的高階除錯手段。 高

通過平臺簡單總結的許可權問題

 android 5.x開始,引入了非常嚴格的selinux許可權管理機制,我們經常會遇到因為selinux許可權問題造成的各種avc denied困擾。有時候我們在添加了一些驅動或應用的時候,發現不能用,但是程式本身查不出問題來,那就要抓log看一下了,很多時候就是因為沒有新增許可權,下

平臺電池曲線

跟電池相關的一些名詞: FCC Full-Charge Capacity 滿電荷電量 UC Remaining Capacity RC 剩餘電量 CC Coulumb Counter 電量計 UUC Unusable Capacity 不可用電量 PC Percentage

平臺SPI外設的片選訊號配置

spi master 和spi device有各自的dts配置: 這是spi master的配置示例,也就是spi控制器 這是一個spi device的配置示例,也就是spi外設(從裝置) 一個spi控制器上可以連線多個從裝置,在任何時刻只有一個從裝置可以通

平臺新增或者移植一個完整的camera

OV8865 1、kernel部分: A、kernel_driver: 把驅動檔案ov8865_qtech_f8865ac.c 放到kernel/drivers/media/platform/msm/camera_v2/sensor/目錄下 B、kernel_dt

平臺GPIO模擬PWM控制背光

    很多時候由於節省硬體資源,降低成本,會把PWM控制晶片去掉或者是改做它用,導致當我們想用PWM方式控制背光時只能使用帶有clk功能的GPIO口。本篇文件就來講解下如何使用GPIO模擬PWM功能進行背光的控制。本文以MSM8909為例。 一、選取GPIO口並進行配置

平臺 efs.mbn的製作與修改

1.修改需要修改的mbn相關檔案 如MDM9607/trunk/modem_proc/mcfg/mcfg_gen/genneric/China/CT下的 2.EFS相關程式碼修改 開啟相關巨集定義 #define FEATURE_EFS_NAND_FACTORY_STAR