非凡網(wǎng)站建設(shè)平臺網(wǎng)頁seddog站長之家
【SA8295P 源碼分析】00 - 系列文章鏈接匯總 - 持續(xù)更新中
- 一、分區(qū)、下載、GPIO等雜項相關(guān)
- 二、開機啟動流程代碼分析
- 二、OpenWFD 顯示屏模塊
- 三、Touch Panel 觸摸屏模塊
- 四、QUPv3 及 QNX Host透傳配置
- 五、Camera 攝像頭模塊(當(dāng)前正在更新中...)
- 六、網(wǎng)絡(luò)相關(guān)模塊(NFS、VLAN、telnet)
- 七、網(wǎng)絡(luò)相關(guān)模塊(Ethernet MAC)
- 八、Security 安全策略(QNX secpol、Android SELinux)
- 九、Thermal 溫控策略
- 十、QNX 側(cè)常用的調(diào)試命令
- 2023年8月20日 Note Update:
有些粉絲看我有些內(nèi)容寫的比較深入,以為我是高通負(fù)責(zé)相應(yīng)模塊的內(nèi)部人員,
澄清一下,我只是一個在做基于SA8295P
芯片項目的BSP
開發(fā)工程師,專欄參考代碼是原生SA8295P
基線代碼。
.
本專欄主要目的是:利用工作之外的時間去深入代碼 分析底層的代碼實現(xiàn)原理,來提高自身的技術(shù)能力。
實際工作中,有些人可能只是一個螺絲釘?shù)慕巧?#xff0c;只對當(dāng)前做的事精通,但其他模塊領(lǐng)域一竅不通;
有些人,可能只是會調(diào)會配,但為什么要這樣配這樣調(diào),可能就說不太清楚了。
這也是我想去解決的問題,兼顧知識廣度和深度,會配,會調(diào),也知道為什么要這樣配這樣調(diào)。
簡單來說就是,我希望自已目前做的事,通過我自身的努力, 做到懂原理懂流程懂代碼,而不是簡單的代碼搬運工。
要想做到這個程度,肯定很難,但我一定會努力,慢慢學(xué)習(xí),總結(jié),以更新博客。
.
本專欄文章內(nèi)容主要是個人工作之外的自我學(xué)習(xí)總結(jié)分享,不敢及不會泄露公司相關(guān)的所有信息,不敢也不會泄露高通的代碼文檔!!!。
.
本專欄介紹如下:
【高通原生代碼版本】:SA8295p-HQX-4-2-4-0_HLOS_dev_qnx.tar.gz
,SA8295_AU_LINUX_ANDROID_LA.AU.1.4.8.R1.10.00.00.1083.005
【文章類型】:晚上下班后在家、周末在家分析代碼自學(xué)所產(chǎn)出的自學(xué)總結(jié)文檔;協(xié)助粉絲兄弟咨詢的問題調(diào)試分析總結(jié)
【涉及領(lǐng)域】:除Audio
外的其他所有BSP
模塊(Audio
我也有相關(guān)的基礎(chǔ),但目前工作不會涉及,所以優(yōu)先級放后)
【廣度預(yù)期】:按由廣到精的思路,先把 SA8295 各個模塊做到滿足工作需求,各模塊做到會配、會調(diào)、會分析。
【深度預(yù)期】:精力有限,不可能所有模塊都精通,目前先側(cè)重三方面:系統(tǒng)啟動流程 > 屏/TP > 攝像頭,其他的模塊會調(diào)會配會分析就夠了。
【專欄更新時間】:持續(xù)學(xué)習(xí)總結(jié),持續(xù)更新(畢竟由廣到精,想要對SA2895平臺有一定的了解,得持續(xù)學(xué)習(xí),不是一時半會就能達成的)
.
老規(guī)矩,大家有啥遇到的問題,或者有哪個方面想了解的,也可以私信給我,如果我懂的且有時間的話,可以協(xié)助一起分析下。
私信時請說明:問題詳細描述,預(yù)期現(xiàn)象,當(dāng)前現(xiàn)象,當(dāng)前分析進展 及 相關(guān)log
匯總鏈接:
《【SA8295P 源碼分析】系列文章鏈接匯總》
《【SA8295P 源碼分析】00 - 系列文章鏈接匯總》
本系列正文鏈接如下:
一、分區(qū)、下載、GPIO等雜項相關(guān)
- 《【SA8295P 源碼分析】01 - SA8295P 芯片介紹》
- 《【SA8295P 源碼分析】02 - SA8295P 整包鏡像分析》
- 《【SA8295P 源碼分析】41 - SA8295所有鏡像位置、拷貝腳本、生成QFIL包》
- 《【SA8295P 源碼分析】43 - SA8295 基線代碼編譯相關(guān)的問題 答疑》
- 《【SA8295P 源碼分析】45 - 部分鏡像解包方法詳解:boot_la、boot、vendor_boot、dtb、NON-HLOS、super、persist、metadata、userdata》
- 《【SA8295P 源碼分析】48 - QNX 側(cè)GPIO 配置方法、中斷配置、調(diào)試工具 詳解》
- 《【SA8295P 源碼分析】52 - 答疑之 QNX 創(chuàng)建鏡像、Android定制修改selinux權(quán)限,user版本采用enforcing,userdebug版本permissive》
- 《【SA8295P 源碼分析】60 - QNX Host 如何新增 android_test 分區(qū)給 Android GVM 掛載使用》
- 《【SA8295P 源碼分析】62 - Android GVM Kernel 內(nèi)核 make bootimage 過程分析》
- 《【SA8295P 源碼分析】63 - defconfig 解析 之 修改 Kernel 宏控配置應(yīng)該修改哪些 config 文件才會生效?》
- 《【SA8295P 源碼分析】49 - Android編譯報錯:check_vintf.cpp For kernel requirements at matrix level 6》
二、開機啟動流程代碼分析
- 【試讀】《【SA8295P 源碼分析】03 - SA8295P QNX Host 上電開機流程分析》
- 《【SA8295P 源碼分析】04 - SA8295P QNX Host 上電開機過程中的各組件功能介紹》
- 《【SA8295P 源碼分析】05 - SA8295P QNX Host 上電開機過程 進一步梳理(結(jié)合代碼)》
- 【試讀】《【SA8295P 源碼分析】06 - SA8295P XBL Loader 階段 sbl1_main_ctl() 函數(shù)代碼分析》
- 《【SA8295P 源碼分析】07 - XBL Loader 解析 sbl1_config_table 規(guī)則分析》
- 《【SA8295P 源碼分析】08 - XBL Loader 加載 SMSS、XBL Config、SHRM、CDT 、DDR、APDP、RamDump、OEM_MISC、AOP、QSEE過程分析》
- 《【SA8295P 源碼分析】09 - XBL Loader 加載 QSEE、SEC、CPUCPFW、QHEE、APPSBL過程分析》
- 《【SA8295P 源碼分析】53 - mifs.build.tmpl 腳本詳解:啟動QNX procnto-smp-instr微內(nèi)核、啟動QNX串口終端shell、加載解析并執(zhí)行ifs2_la.img》
- 《【SA8295P 源碼分析】54 - /ifs/bin/startupmgr 程序工作流程分析 及 script.c 介紹》
- 《【SA8295P 源碼分析】55 - ifs2_la.img 鏡像加載解析過程分析》
- 待更新:
(1)《【SA8295P 源碼分析】VMM_Android 啟動過程分析》
二、OpenWFD 顯示屏模塊
- 《【SA8295P 源碼分析】70 - QAM8295P 原理圖參考設(shè)計 之 DP、eDP 接口硬件原理分析》
- 《【SA8295P 源碼分析】71 - QAM8295P 原理圖參考設(shè)計 之 MIPI DSI 接口硬件原理分析》
- 《【SA8295P 源碼分析】72 - WFD DP/eDP、MIPI DSI 顯示屏軟件代碼該如何配置? 有什么差異?》
- 《【SA8295P 源碼分析】73 - OpenWFD 顯示驅(qū)動庫 libDP2_COMMON.so 源碼分析》
display bringup
配置及調(diào)試過程分析:
- 《【SA8295P 源碼分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析》
- 《【SA8295P 源碼分析】11 - HQX Display(OpenWFD)儀表屏、中控屏 Bringup 代碼移植步驟》
- 《【SA8295P 源碼分析】40 - OpenWFD 顯示屏配置文件 graphics_ADP_STAR.conf 、qcdisplaycfg_ADP_STAR_LA.xml 的解析流程》
- 《【SA8295P 源碼分析】56 - OpenWFD 顯示驅(qū)動庫 libDSI_MAX96789_0.so 調(diào)用及解析流程分析》
- 《【SA8295P 源碼分析】57 - libDSI_MAX96789_0.so驅(qū)動庫 之 QDI_Panel_Init 顯示屏初始化函數(shù) 代碼分析》
- 《【SA8295P 源碼分析】58 - libDSI_MAX96789_0.so驅(qū)動庫 之 QDI_Panel_SetPower上下電流程及QDI_Panel_GetInfo 獲取顯示屏信息等代碼分析》
- 《【SA8295P 源碼分析】59 - QNX如何 Dump 顯示圖像 之 surfacedump 功能 源碼分析》
- 《【SA8295P 源碼分析】61 - QNX如何 Dump 顯示圖像 之 echo surfacedump=n [m] > /dev/displaylog 命令代碼調(diào)用流程分析》
- 《【SA8295P 源碼分析】64 - QNX 與 Android GVM 顯示 Dump 圖片方法匯總》
- 《【SA8295P 源碼分析】12 - HQX Display(OpenWFD)調(diào)試命令介紹》
- 待更新:
(1)《【SA8295P 源碼分析】Android GVM 如何將圖片給到QNX Host Disply 驅(qū)動顯示》
openwfd
服務(wù)啟動過程分析:
- 《【SA8295P 源碼分析】37 - OpenWFD Server 啟動流程 之 openwfd_server.c main()函數(shù)源碼分析》
- 《【SA8295P 源碼分析】38 - OpenWFD Server 啟動流程 之 WFD_ClientMgr 初始化 之 WFD Device 設(shè)備初始化源碼分析》
- 《【SA8295P 源碼分析】39 - OpenWFD Server 啟動流程 之 WFD_ClientMgr 初始化 之 WFD Port 端口初始化源碼分析》
- 《【SA8295P 源碼分析】42 - OpenWFD Server 啟動流程 之 WFD_ClientMgr 初始化 之 Pipelines、ClientContexts 初始化源碼分析》
- 《【SA8295P 源碼分析】46 - OpenWFD Server 啟動流程 之 /dev/openwfd_server_0 管道事務(wù)源碼分析》
- 《【SA8295P 源碼分析】50 - OpenWFD Server 啟動流程 之 wfd_server_tpp 線程池源碼分析》
三、Touch Panel 觸摸屏模塊
TP
觸摸點坐標(biāo)數(shù)據(jù),上報到 Android
整個流程分三步:
-
QNX
側(cè)TouchScreen
驅(qū)動獲取坐標(biāo)點上報給到Android
內(nèi)核層
《【SA8295P 源碼分析】15 - QNX側(cè) TouchScreen Panel (TP)觸摸屏 Bringup 流程 及 源碼分析》
《【SA8295P 源碼分析】16 - QNX側(cè) TouchScreen Panel (TP)線程函數(shù) tp_recv_thread() 源碼分析》 -
Android
內(nèi)核解析出數(shù)據(jù),存在/dev/input/event0
對應(yīng)的buffer[]
環(huán)形隊列中,待用戶空間讀取節(jié)點時,通過copy_to_user
給到用戶空間
《【SA8295P 源碼分析】66 - Android 側(cè)內(nèi)核層 TouchScreen Panel(TP)觸摸屏驅(qū)動生成 /dev/input/event0 源碼分析》 -
Android
用戶層輸入子系統(tǒng)管理并獲取到/dev/input/event0
的數(shù)據(jù),此時坐標(biāo)點數(shù)據(jù)到達Android
上層用戶空間
《【SA8295P 源碼分析】67 - Android 側(cè) 模擬輸入設(shè)備上報 input 事件 之 input 模擬點擊坐標(biāo) 實現(xiàn)源碼分析 adb shell input tap 100 600》
《【SA8295P 源碼分析】68 - Android 側(cè)用戶層 輸入子系統(tǒng)獲取 /dev/input/event0 節(jié)點數(shù)據(jù) 代碼流程分析》
四、QUPv3 及 QNX Host透傳配置
- 《【SA8295P 源碼分析】13 - Android GVM 虛擬機 QUPv3 UART / SPI / I2C功能配置及透傳配置》
- 《【SA8295P 源碼分析】14 - Passthrough配置文件 /mnt/vm/images/linux-la.config 內(nèi)容分析》
- 《【SA8295P 源碼分析】17 - 設(shè)備虛擬化 之 Passthrough透傳、Vdev Trap、HAB Socket 原理解析》
- 《【SA8295P 源碼分析】33 - Android GVM USB 透傳配置》
五、Camera 攝像頭模塊(當(dāng)前正在更新中…)
-
《【SA8295P 源碼分析】82 - SA8295P AIS Camera 模塊 硬件原理圖分析》
-
《【SA8295P 源碼分析】18 - Camera Bringup 流程 及 源碼分析》
-
《【SA8295P 源碼分析】77 - QNX Camera 之 ais_server 服務(wù) 源碼分析》
-
《【SA8295P 源碼分析】78 - AIS Camera PM Event 電源事件處理函數(shù) CameraPlatformPowerInit() 源碼分析》
-
《【SA8295P 源碼分析】79 - AIS Camera Event 事件處理函數(shù) AisEngine::EventHandler() 源碼分析》
-
《【SA8295P 源碼分析】80 - AIS Camera libais_max96722.so 驅(qū)動庫加載函數(shù) 之 CameraDeviceManager::Initialize() 源碼分析》
-
《【SA8295P 源碼分析】81 - AIS Camera Device 設(shè)備初始化 之 AisInputConfigurer::CreateInstance() 源碼分析》
-
AisIFEConfigurer
模塊初始化,接著調(diào)用AisIFEConfigurer::GlobalConfig()
進行配置 -
AisCSIConfigurer
模塊初始化,接著調(diào)用AisCSIConfigurer::GlobalConfig()
、AisCSIConfigurer::GlobalStart()
進行配置 -
AisProcChainManager
模塊初始化 -
AIS Camera Input
輸入設(shè)備檢測函數(shù):AisInputConfigurer::GetInstance()->DetectAll()
-
AIS Server
服務(wù)事件循環(huán)處理函數(shù):ais_server_create_client_ctxt()
六、網(wǎng)絡(luò)相關(guān)模塊(NFS、VLAN、telnet)
- 《【SA8295P 源碼分析】19 - QNX Host NFS 文件系統(tǒng)配置》
- 《【SA8295P 源碼分析】20 - GVM Android Kernel NFS Support 配置》
- 《【SA8295P 源碼分析】51 - QNX NFS Server + Android NFS Client 完整配置》
- 《【SA8295P 源碼分析】21 - Android GVM 虛擬網(wǎng)絡(luò) vlan 配置》
- 《【SA8295P 源碼分析】44 - 如何替換 NON-HLOS.bin 中的 Wifi Firmware 固件》
- 《【SA8295P 源碼分析】47 - AF66T - QCA6696 - QCA6390 - WIFI 功能導(dǎo)通》
- 《【SA8295P 源碼分析】69 - Android 側(cè)添加支持 busybox telnetd 服務(wù)》
七、網(wǎng)絡(luò)相關(guān)模塊(Ethernet MAC)
- 《【SA8295P 源碼分析】22 - QNX Ethernet MAC 驅(qū)動 之 emac_entry / emac_attach() 函數(shù)源碼分析》
- 《【SA8295P 源碼分析】23 - QNX Ethernet MAC 驅(qū)動 之 emac1_config.conf 配置文件解析》
- 《【SA8295P 源碼分析】24 - QNX Ethernet MAC 驅(qū)動 之 emac_pm_sys_pow_mon_thread_hdlr() 系統(tǒng)電源管理線程源碼分析》
- 《【SA8295P 源碼分析】25 - QNX Ethernet MAC 驅(qū)動 之 emac_isr_thread_handler() 中斷處理函數(shù) 源碼分析》
- 《【SA8295P 源碼分析】26 - QNX Ethernet MAC 驅(qū)動 之 emac_rx_thread_handler() 數(shù)據(jù)接收線程 源碼分析》
- 《【SA8295P 源碼分析】27 - QNX Ethernet MAC 驅(qū)動 之 emac_tx_thread_handler() 數(shù)據(jù)發(fā)送線程 源碼分析》
- 《【SA8295P 源碼分析】28 - QNX Ethernet MAC 驅(qū)動 之 emac_mdio_link_monitor_thrd() MDIO監(jiān)控線程 源碼分析》
- 《【SA8295P 源碼分析】29 - QNX Ethernet MAC 驅(qū)動 之 emac_resmgr_init() 資源管理器線程 resource manager 線程 源碼分析》
- 《【SA8295P 源碼分析】30 - QNX Ethernet MAC 驅(qū)動 之 emac_powerup() 上電流程 源碼分析》
- 《【SA8295P 源碼分析】31 - QNX Ethernet MAC 驅(qū)動 之 ifnet 接口emac_init、emac_start、emac_ioctl 源碼分析》
- 《【SA8295P 源碼分析】32 - QNX Ethernet Phy_Switch 驅(qū)動初始化 源碼分析》
- 《【SA8295P 源碼分析】35 - QNX側(cè) Marvell 88Q5152 Phy_Switch 導(dǎo)通實錄(硬核)》
- 《【SA8295P 源碼分析】65 - emac0-phy 與 emac1-switch兼容 方案實現(xiàn)》
- 《【SA8295P 源碼分析】36 - MDIO Clause 22、Clause 45 條款介紹》
八、Security 安全策略(QNX secpol、Android SELinux)
- 《【SA8295P 源碼分析】74 - QNX secpol 安全策略文件配置詳解 及 secpol.bin 編譯過程分析》
- 《【SA8295P 源碼分析】75 - QNX GVM Secpol 安全策略文件 gvm_la.txt 內(nèi)容分析解讀》
九、Thermal 溫控策略
《【SA8295P 源碼分析】76 - Thermal 功耗 之 /dev/thermalmgr 相關(guān)調(diào)試命令匯總》
十、QNX 側(cè)常用的調(diào)試命令
- 通過
qnx
進入fastboot
下載模式:reset -f
或 開機過程中串口下一直按Q
- 通過
qnx
串口進入Android GVM
的adb shell
環(huán)境:telnet 192.168.133.1
- 通過
Android GVM
的adb shell
環(huán)境 進入QNX shell
環(huán)境:busybox telnet 192.168.133.2
QNX
側(cè)獲取Android
開機log
:cat /dev/shmem/la_gvm.txt
QNX
殺死進程:slay xxxxx
,如slay vmm_service
QNX
重新可寫掛載mnt
:mount -uw /mnt
QNX
側(cè)啟動log
路徑:/dev/pdbg/qcore/bootlog
QNX
側(cè)C
代碼中運行 動態(tài)啟動uart
:(void)system("devc-quipv3 -E -F -b9600 15");
- 查看
GPIO
狀態(tài):msmgpiotool dump
# msmgpiotool
commands:dumpinfo <gpio number> [tlmm] 示例:獲取 tlmm 的GPIO0 信息 msmgpiotool info 0 info <gpio number> lpass 示例:獲取 lpass 的GPIO0 信息 msmgpiotool info 0 lpassinfo <gpio number> ssc 示例:獲取 ssc 的GPIO0 信息 msmgpiotool info 0 sscwrite <gpio number> <value> 示例:寫 GPIO0 輸出1 msmgpiotool write 0 1read <gpio> 示例:讀 GPIO0 電平 msmgpiotool read 0 ===> GPIO 0 is Highrawread <gpio> 示例:讀 GPIO0 電平 msmgpiotool read 0 ===> 1set-dir <gpio number> <value> 配置 輸出輸出模式: [0] Input, [1] Outputset-drive <gpio number> <value> 配置 GPIO 驅(qū)動能力, drive strength = [n] * 2mA for n[0..15]set-pull <gpio number> <value> 配置拉高拉低懸空: [0] No pull [1] Pull Down [2] Keeper [3] Pull Upset-func <gpio number> <value> 配置引腳函數(shù),GPIO模式無此功能enable-irq <gpio number> <value> 使能 IRQ 中斷:[0] Enable [1] Disableclear-irq <gpio> 清除 IRQ 狀態(tài)set-pol <gpio number> <value> 配置 中斷極性 [0] Inverted [1] Normalset-trigger <gpio number> <value> 配置邊沿觸發(fā)還是電平觸發(fā): [0] Level [1] Edge# msmgpiotool dump
OFFSET GPIO IN OUT DIR DRIVE PULL ALT FUNCTION TARGET IRQ POL TRIG STS
---------------------------------------------------------------------------------------------
f100000 0 High Low Out 8 mA No pull 1 NONE 0 1 Level 0
f101000 1 High Low Out 8 mA No pull 1 NONE 0 1 Level 0...... 省略 ......
f1e2000 226 High Low In 2 mA Pull down 0 NONE 0 1 Level 0
f1e3000 227 High Low In 2 mA Pull down 0 NONE 0 1 Level 0----------------------------------------LPASS TLMM GPIO Dump---------------------------------------OFFSET LPASS GPIO IN OUT DIR DRIVE PULL ALT FUNCTION HYSTERISIS CTL MISC CFG
---------------------------------------------------------------------------------------------------0x33c0000 0 Low Low Out 8 mA Pull down 0x2 Low 0x20x33c1000 1 Low Low Out 8 mA Pull down 0x2 Low 0x2...... 省略 ......0x33d1000 17 Low Low In 2 mA No pull 0x2 Low 0x00x33d2000 18 Low Low Out 8 mA Pull down 0x2 Low 0x0----------------------------------------SSC TLMM GPIO Dump---------------------------------------OFFSET SSC GPIO IN OUT DIR DRIVE PULL ALT FUNCTION HYSTERISIS CTL MISC CFG
-------------------------------------------------------------------------------------------------0x2b40000 0 Low Low In 2 mA No pull 0x0 Low 0x00x2b41000 1 Low Low In 2 mA No pull 0x0 Low 0x0...... 省略 ......0x2b52000 18 Low Low In 2 mA No pull 0x0 Low 0x00x2b53000 19 Low Low In 2 mA No pull 0x0 Low 0x0