高通平臺環境搭建,編譯,系統引導流程分析參考
高通有兩個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
相關文章
- Android編譯環境搭建Android編譯
- openform環境搭建-編譯ORM編譯
- Ubuntu18.04 搭建go編譯環境UbuntuGo編譯
- Pinpoint 編譯環境搭建(Pinpoint系列一)編譯
- CentOS7.3 編譯搭建 lamp 環境CentOS編譯LAMP
- Android10.0 系統解析(02)——搭建Android原始碼編譯除錯環境Android原始碼編譯除錯
- qgroundcontrol開發環境搭建原始碼編譯開發環境原始碼編譯
- Linux系統環境搭建Linux
- 最新高通平臺驅動開發參考文件
- 直播平臺開發經驗分享——直播平臺搭建環境配置詳解及分析
- 【爬坑】.Net編譯環境導致的問題編譯
- RK3288 Linux SDK 編譯開發環境搭建Linux編譯開發環境
- [環境搭建] 透過原始碼編譯安裝 Redis原始碼編譯Redis
- WIN10x64系統安裝AliOSThings編譯環境Win10iOS編譯
- linux環境下vscode 中C/C++編譯及除錯環境的搭建LinuxVSCodeC++編譯除錯
- 搭建軟體執行平臺以及IDE環境IDE
- 以太坊教程:搭建環境、編寫編譯一個智慧合約編譯
- 高通mdm9607 mcfg_sw.mbn配置編譯流程編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- 高通程式碼編譯編譯
- 跨平臺編譯編譯
- Hi3511平臺開發環境搭建資料開發環境
- Ubuntu交叉編譯環境配置Ubuntu編譯
- MinGW環境編譯WonderTrader攻略編譯
- Milvus 編譯環境演進編譯
- 【AIX】AIX7.1 C編譯環境部署指導說明AI編譯
- babel本地編輯環境搭建Babel
- 編譯環境 Golang開發環境 vscode+git編譯Golang開發環境VSCodeGit
- 全志A40i開發板編譯環境的搭建編譯
- 如何在CentOS 7上搭建LAMP環境(使用YUM或編譯)CentOSLAMP編譯
- win10系統下如何搭建ndk環境_怎麼在win10系統下搭建ndk環境Win10
- 分享個高通平臺NV引數恢復工具-QSerWriteNumber
- Windows系統中搭建python開發環境WindowsPython開發環境
- 羽夏看Win系統核心——環境搭建
- 智慧公安情報研判大資料系統分析平臺搭建大資料
- VLC在ubuntu環境下編譯編譯
- win10環境下fortran怎麼編譯_win10環境下fortran如何編譯Win10編譯
- 2023sg138中原系統OA信用盤原始碼網站平臺搭建部署環境原始碼網站
- AgileTC --滴滴開源測試用例管理平臺環境搭建