1. 程式人生 > >Single chip和multi chip對Linux研發的影響

Single chip和multi chip對Linux研發的影響

僅就自己淺薄的認識來回答,如有不正確之處,歡迎指正。

Q1: What relationship and principles amongst RIL, RPC, and SMD under android/linux?

當初Google釋出Android的源始碼時,在RIL的部分為了顧及Qualcomm以外的其他平臺,只在RIL的部分實做出一個reference RIL,以做為採用Qualcomm以外的的參考實做。就採用Qualcomm solution的開發者來說,Qualcomm會提供一個名為qcril的實做,裡面則會完整地提供該有的telephony及data communication功能。
而Qualcomm為Android提供的7K系列均採取Single chip multi core的架構,以一顆ARM9的核心來處理所有Modem方面的功能,所執行的作業系統則是以L4 kernel為base發展出來的AMSS,另一顆ARM11核心則是用來執行Android的所有程式,而二者之間的溝通方式有二種,一為RPC,另一則為Share memory。前者有點類似即時對話式的溝通,而後者則比較像是郵件投遞式的溝通。
回到RIL,在RIL層裡會有許多的ARM9及ARM11之間的溝通動作,可以想像我們一般在下AT command時,行為就像是在和Modem做對話一樣,如ATD後,Modem會回OK一般。因此qcril裡大多是以RPC call來實做出類似AT command的行為。
而share memory的部分,則大多是由Modem將必要的資訊寫入share memory,再由ARM11端將之讀出,比如說,AMSS可以將自己的版號寫入share memory中,讓ARM11的bootloader或kernel driver讀取出來做識別等。AMSS定義許多share memory中的欄位,而ARM11則要能識別這些欄位,這樣在讀寫share memory時才不會出錯。可以參考kernel裡
smd_private.c
裡的enum。

Q2: What modules/components does AMSS consist of?

嗯,關於這個,由於AMSS為Qualcomm的proprietary OS,我只能說它基本上是建構在L4 kernel上。Qualcomm將ARM9這顆核心當做是整個系統的Master CPU,概略將我所知的分為以下幾點,
1. AMSS除了各種driver之外,當然還會有Modem在執行時該有的task或稱為service。
2. AMSS掌控著所有PIN腳的主控權,可以指定某根GPIO的控制權要不要交給ARM11等。
3. 由於肩負著所有通訊的重任,在BAND的切換以及RF的控制,以及各種protocol等,都是寫在AMSS中。因此在ARM11中執行的RIL就不大會處理到protocol的問題。
4. 關於PMU的控制,在AMSS中都是最直接去做控制。
5. 對於RPC的回應及做相對應的處理等。

Q3: What procedures of booting on android/linux enabled msm7k?

基本上,msm 7K的二顆CPU是各自獨立執行的。當系統上電後,CPU中巳經預燒好的一小段boot code會被執行,在做好CPU本身的初始化後,會將CPU的控制權交給下一階段的primary boot loader(簡稱pbl),pbl係屬於行為控制的bootloader,而對硬體直接的操做,如reset ARM11並將flash中的image載入到RAM裡等,都是交給oemsbl來做,當oemsbl將image載入到flash後,就會reset ARM11,此時ARM11才開始執行Android boot loader,同一個時間,ARM9會繼續向後執行AMSS的main code,而ARM11則並行地由Android boot loader將kernel 載入,之後就如同各有一個單一CPU一樣的執行AMSS以及Linux/Android了。