高通平臺環境搭建,編譯,系統引導流程分析參考

軒茗諾發表於2013-09-17

高通有兩個cpu,他們分別跑不同的系統,應用程式(ap)端是android系統,modem 端是高通自己的系統。

要編譯出可供燒寫使用的映象檔案需要三部分程式碼:
1) 獲取經過高通打補丁的 android 原始碼
2) 獲取高通針對不同處理器的 vendor 原始碼
3) 獲取 modem 原始碼
高通的開發板子為例,看如何選擇原始碼,通過 QPST 連線高通的開發板,我們可以看到他的配置資訊

BREW 無線二進位制執行時環境.BREW 是一個位於嵌入式晶片作業系統之上的抽象層,它能夠提供對一些低階功能、環境變數和子程式的訪問功能。
mbn型別檔案時最終要燒寫到板子上的映象檔案。

modem程式碼編譯結果:
其中 adsp.mbn,amss.mbn,dbl.mbn,osbl.mbn,partition.mbn 位於以下目錄:
./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn
./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/amss.mbn
./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn
./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn
./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn
appsboot.mbn,boot.img,system.img,userdata.img 位於以下目錄:
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3
./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3

要燒錄的映象檔案:
燒錄的映象檔案appsboothd.mbn  appsboot.mbn boot.img system.img userdata.img persist.img
來自 android 原始碼appsboot.mbn 的主要功能是裝載 linux 核心,通過 linux 的引導來完成 android 系統的載入。
appsboot.mbn的生成過程
make out/target/product/msm7630_surf/appsboot.mbn
make out/target/product/msm7630_surf/nandwrite
make out/target/product/msm7630_surf/emmc_appsboot.mbn

boot.img->kernel+ramdisk
1  kernel:arm/boot/zImage
2  ramdisk:make  out/target/product/msm7630_surf/ramdisk.img showcommands
手動生成 boot.img 需要使用命令 mkbootimg ,語法如下:
mkbootimg --kernel 核心 --ramdisk ramdisk映象 --cmdline 命令列 --base 基地址 --pagesize 大小 --output 輸出的boot.img

appsboot.mbn:目錄 bootable/bootloader/lk 下

env.MbnBuilder過程解析:
mbn 型別的檔案是我們最終燒寫到板子上的映象檔案
在檔案: ./AMSS/products/7x30/core/bsp/build/scripts/mbn_builder.py 中有 mbn 檔案的編譯規則,要注意的是,不同的 modem 原始碼版本,它裡面的規則有可能不一樣

partition規則解析:
eMCC 啟動和 NAND 啟動的分割槽格式是不一樣的,如果是 eMCC 啟動,多了編譯選項:
USES_SDCC_BOOT=yes USES_HSU_MS_FD_BOOT=yes
如果 USES_HSU_MS_FD_BOOT=yes
=== Compiling  boot/osbl/fd_storage_scsi.c
=== Compiling  boot/osbl/fd_storage_usb.c
如果 USES_SDCC_BOOT=yes
那麼會進行 partition 規則的處理,它會覆蓋掉 corebsp_build 規則階段生成的 partition.mbn
./AMSS/products/7x30/build/ms/dmss_rules.min
partition 規則主要完成以下功能:
1) 編譯 ./AMSS/products/7x30/core/storage/tools/jsdcc/partition_load_pt 程式碼,生成 loadpt 和 msp
2) 解析 loadpt 解析 partition.xml 檔案,把分割槽資訊儲存成二進位制檔案 partition.bin
3) 由 partition.bin 檔案生成 partition.mbn,然後拷貝到 ./AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn

高通平臺 7630 啟動流程分析
1.4 高通平臺 7630 啟動流程分析
開機後,首先從 rom 中的 pbl 開始執行,pbl 裝載 dbl
pbl 是固化在高通晶片中的一段程式,沒有相應的原始碼。
pbl執行以後,它會裝載 dbl,dbl是從其__main 函式開始執行,此函式在彙編檔案 dbl.s 中.
經過一系列的初始化,dbl 會把控制權傳遞給 osbl
osbl 通過 osbl_main_procs 中定義的 osbl_load_appsbl 函式把應用程式的控制權交給了android 系統,modem 端的控制權通過 bl_shared_data.amss_entry_ptr() 交割 AMSS,他們分別在兩個處理器上同時執行,兩個處理期間通過 smd 進行通訊。
obsi{
 //初始化 迷你usb 充電硬體
 osbl_hw_init
 //在 osbl 階段會提升系統時鐘
        #ifndef RUMIBUILD
        osbl_increase_clk_speed,
        #endif
 //初始化 osbl 模並且鎖住介面
 osbl_init_modules,
 初始化 flash 裝置 
        osbl_flash_init,
  //檢測是否通過sd卡更新映象檔案
        osbl_sd_image_upgrade,
 //初始化資料結構,以便裝載 AMSS 映象
 osbl_init_amss_image,
 #endif /* FEATURE_FOTA */
    //amss 映象進行授權鑑定 
    osbl_auth_amss_image,
    //如果有 adsp 那麼進行相應處理
 #ifdef FEATURE_OSBL_LOAD_AND_BOOT_ADSP
    //裝載 adsp 映象
   osbl_load_adsp,
   //授權 
 osbl_auth_adsp,    
 #endif
 #ifdef FEATURE_SDCC_BOOT
    //裝載 amss 映象
    osbl_load_amss_image,
 #endif
 #ifndef FEATURE_STANDALONE_MODEM
    //從flash 裝置裝載 appsboot
    osbl_load_appsbl,
    //從flash中裝載 OS 映象
    * Load the OS image from flash
    osbl_load_apps_os,
    //引導 aARM 處理器
    osbl_boot_aarm,
 #endif /* FEATURE_STANDALONE_MODEM */
   對於 nand 啟動,AMSS 應該在 apps 引導以後再裝載
 #ifndef FEATURE_SDCC_BOOT
    // nand 啟動,裝載 amss 映象
    osbl_load_amss_image,
 #endif

 更新到:

{

1.4.5 appsbl 流程(原始碼在 android中)

appsbl 是 applications ARM boot loader 的簡稱,不同的軟體框架,此分割槽來自不同的原始碼

參考網址:http://blog.csdn.net/lq50714/article/details/7053493

}


高通手機開發過程大揭祕

{

看門狗餵食

參考網址:http://wenku.baidu.com/view/dac78693daef5ef7ba0d3c31.html

}


Qualcomm手機開機全過程大揭密

http://www.ci800.com/news/htmlnew/2007-11/18767.htm

 

相關文章