2012年6月14日 星期四

什麼是 Android BSP Engineer?



對於非本行的朋友或是初次見面的外行人,他們對我的工作內容通常是

「完全不能從字面上了解。」

即使你告訴他,BSP Board Support Package,依舊是

「完全無法理解。」

在我要來面試前,甚至是真正上工前,我也是不太理解我的工作內容。
後來想想,之所以在網路上找不到相關資訊的原因可能是因為:
「做這種工作的各位同行,根本沒時間寫文章」
(我有空的時候,基本上連開電腦上FB都懶)

於是為了讓「非本行的朋友或是初次見面的外行人」能迅速知道我在混什麼的(誤)
我的開場白通常是:

「我們公司負責把整隻手機從無到有 (可以順便附帶動作 XD)
  硬體就是你看得到的外型,裡面的元件等等,
  我是軟體工程師,軟體又要細分很多塊,不過我們管最大的那一塊,
  APP知道吧? 就遊戲那些你下載來用的;(通常對方會點頭,並誤以為我就是寫APP的)
  但我不負責這個......(打槍對方)
  扣掉上層APP之外的,都可以算是歸我們管 (對方就會開始覺得你很厲害的感覺~XD)

但對於真正想要了解這職稱工作內容的人,我想通常是找工作的人
這時候,你就得把對方當本行的入門初學者,來詳細訴說。
那麼Android BSP Engineer要負責什麼呢? 我們必須先來看一下簡單的Android架構……

       Application (APP, 應用程式)
API ------------------------------------------------
       Java framework (框架)   (以上皆為Java)
JNI -------------------------------------------------(三種語言都有)
       Native framework          (有c/c++ language)
-------------------------------------------------------------------
                                              (有c/c++ language)
               Libraries        
   Android Runtime = Dalvik VM + Core Libraries
   
HAL -----------------------------------------------硬體抽象層
                                               (只有 C language )
          Linux Kernel
          各元件驅動程式(driver)
          Modem (基本上有專門負責的team)
---------------------------------------------------以上皆為軟體工程師負責
   
          硬體、元件、天線……(由硬體/天線工程師負責)
          整隻手機的外型則由機構工程師負責 (所以跟軟體工程師可說是無交集)


Android BSP Engineer負責的就是
「以上皆為軟體工程師負責」的一大塊 -「Application」的那一層

由於每個公司分工的情形不一樣,大致可以分成水平分工跟垂直分工兩種

水平分工的話,我們就是中間和C/C++有關的那一大塊
確定問題不在這一大塊裡就可以把問題pass出去

不過有些單位(公司)採用垂直分工,我的工作內容就是如此
此時會以元件(function)來分工,
元件(function)很多,例如:
Display、keypad、Codec、3D Accelerator、Audio、Camara、GPS、
Sensor、Vibrator、back light、WIFI、Bluetooth、Battery...etc.

例如我負責Bluetooth(藍芽)
發現Bluetooth有問題,我就要負責追出問題源頭
此時你就得從底層Kernel一路打通到上層API

有時可能發現是 XXX 解 bug 後造成我的 Bluetooth 有問題
此時就可以把問題 pass 給 XXX,告訴他解問題的過程中造成原本ready的function有問題了
或是追查後發現是 app 本身的問題同樣也可pass 給 app team 去解
其他狀況就得自己解決。
若是水平分工,像是有專門的team 在管 framework 的話,
當你確定問題在framework層之上,你就可以pass出去。
這就是兩種分工的差別。

BSP有時要看電路圖,所以偏工程,電機工程/資訊工程的人都有可能在這行
就像這種

因為每隻手機用的元件不同,Layout也不同,pin腳接到哪兒去了,就是我們用到電路圖的時候了
也因此會有機會和硬體/天線工程師合作,就是因為需要他們幫忙我們來排除硬體問題。

當硬體READY後,我們的主要工作當然就是讓它"動起來",
porting driver是主要工作之一,當各元件都可以動的時候,
原先還無法動作的系統team、APP team、Ril team等,才能開始動作。
所以當一個新案子要開發,前面是硬體先OK,再來就是我們BSP,
BSP過了後,我們可以稍事喘息,不過不會太久……XD
因為此時正是所有軟體工程師可以一起動員的時候,Bug將如雨後春筍般的不斷冒出,
於是我們又開始忙著debug……Orz

我們的工作環境必需是在Linux系統底下,現在大部份是使用Ubuntu,Debian也可以
然後大部份是在黑黑的terminal視窗下指令,這些不會不用擔心,進來再學就好了,
所以對於不敢丟履歷的新鮮人,我真心的建議你,不丟履歷,就沒機會,那你又何必煩惱?

「那如果丟了履歷後,通知面試呢?」

 我:就去面試啊,上了再說。

「那如果好死不死上了呢?」

 我:主管都覺得你的能力ok了,你還在懷疑個屁啊!

有些事情不難,只是看起來麻煩了點,處理掉就好了!! (友人之名言)

大概就是這樣啦~