對於非本行的朋友或是初次見面的外行人,他們對我的工作內容通常是
「完全不能從字面上了解。」
即使你告訴他,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了,你還在懷疑個屁啊!
有些事情不難,只是看起來麻煩了點,處理掉就好了!! (友人之名言)
大概就是這樣啦~
同行你好~
回覆刪除我是做bootloader和audio的
看完這篇我好想拜一下,太威了 XD
回覆刪除謝謝你的文章
回覆刪除猴塞雷啊~
那跟firmware工程師有啥不一樣?
回覆刪除可能貴公司有FW Engineer,但手機代工廠裡是沒有這東西的。
刪除手機代工廠的工程師就分下面幾種
ME(機構)、HW(硬體)、RF(天線)、SW(軟體) ....
也就是說,我在公司遇到ME、HW、RF,我都會各自歸成同一類,
但遇到SW,可能先問做什麼平臺(Android phone? Windows?)
然後問是 AP 還是 BSP ?
然後再問是負責什麼function/feature……
當然也有可能HW就覺得SW全都是SW…但遇到HW的也要問一下這樣…XD
順便一提,在我或我們這些BSP所講的FW,常常是指晶片的韌體;也因此我會覺得寫組合語言的才叫firmware Engineer。
所以也有同行的通常是先問:你寫什麼的? C? C++? Java?
而不是問在哪間公司,做啥產品。
你好,
回覆刪除我想請問一下台北有哪裡可以進修BSP呢??
Hi, SB:
回覆刪除在MB、NB等產品,也有所謂的BSP,Android BSP 算是嵌入式系統移植,您可以上網搜尋台北哪裡有此種課程,謝謝。