2014年8月28日 星期四

ASUS Android BSP team工作滿三年心得

時間就是這麼無情 都不等人的
一轉眼間就滿三年了

來分享一下這三年的所學所得囉!

對於新鮮人的你,可以把它當作是一篇參考
對於已是老鳥的你,也許可以當作是一篇回憶錄

會儘量以淺顯易懂的文字
表達出我的想法

請大家看下去吧!


主要想要談兩個部分:
(一)BSP工作性質
(二)工作三年心得

想直接看心得的,可以直接往下捲囉!

(ㄧ)BSP工作性質
首先先大概介紹一下自己的工作性質:
自己所負責開發的產品是平板。
職稱是軟體工程師(簡稱SW RD),但因為SW RD聽起來,實在是太籠統了。
所以我來簡介一下~
在ASUS,SW RD又可分成是:
-->BSP RD (主要是負責Linux kernel driver porting,系統穩定性維護)
-->AMAX RD (主要是負責Framework層開發)
-->Protocol RD (主要是負責通訊協定上的軟體開發)

在下就是BSP RD。

至於BSP是什麼東東,還是引用自己寫過的話來稍稍解釋一下好了XD
"BSP的全名為「Board Support Package」

BSP可以想成它就是一包source code,而這包source code透過linux所建構出來的firmware(韌體),可以在Android裝置上開機。"

至於更多詳細內容可以參考我之前寫過的一篇網誌:


以我們部門來說,BSP的工作類型,主要可分成兩大類型:
-->System team:
基本上如果有任何關於系統穩定度,效能好壞,耗電與否,韌體更新方式...etc的需求,通常都會先找system team來分析

-->Function team:
主要著重在硬體上各元件(ex: camera, display panel, sensor, audio, wifi, usb, bluetooth...etc)的功能性移植(feature porting)。


而身為一個BSP RD,幾乎每天在工作上會做到的事情有哪些呢?
以下就舉一些例子吧,順便帶一點解釋:
*Linux指令使用
Linux是一個open source所建構而成的作業系統,通常手機或平板上的軟韌體,都是從一大堆android程式碼透過Linux去作所謂"building"的動作,產生出來的。所以每天幾乎都會作build code的動作。當然,也很常使用一些Linux基本的語法,像是cd, cp, mv, mkdir...etc 日子久了,很多語法也漸漸地熟悉了!


*Git指令使用
Git是Linux開發者Linus Torvalds所設計用來管理Linux kernel版本控制的一種套件。它可以記錄過去多個開發者開發的軌跡,所以對於code base的控管,是一個非常好用的玩意兒。對於我們來說,非常常用的語法有:git log, git diff, git status, git branch, git push...etc
其實一樣用久了就會熟了,是個十分有趣的東西!

*Image building
之前在Linux指令使用就有提到了,SW RD很常做的一件事情,就是:
改程式碼-->build出image-->燒image到機台裡-->看看剛剛改的程式碼有沒有達到自己預期的結果
基本上就是一直這樣的循環...

*Image版本更新
同Image building中提到的,所謂的image版本更新,其實就是將image燒到機台裡面。
那到底什麼是image? 更新的方式又有哪些?
Image,就是BSP程式碼透過linux所建構(build)出來的韌體。對android行動裝置來說,常看到的image有:boot.img,recovery.img,system.img...etc

版本更新方式,其實有蠻多種的,較常見到有這幾種:
(1) fastboot
(2) SD update
(3) OTA (Over The Air)
細節都可以從網路上查到~

*adb指令使用
adb是android debug bridge的縮寫,是android開發者非常非常倚賴的一種debug或是跟機台之間溝通的工具。像是我們常常會想得知機台裡面的資訊,那就要使用adb shell進去機台裡面的核心,去取得一些有用的資訊或是debug message。因此,熟悉adb指令,是身為SWRD一個必備的能力。

*fastboot指令使用
fastboot mode是機台處於可經由USB方式做image置換的一種模式。對BSP RD來說,最常燒image的方式,應該就是透過fastboot了。比如說要燒boot.img,那麼它的指令就是:
fastboot flash boot boot.img
它其中的意義為何,可上網查詢,這邊不多加贅述了...

*Kernel log分析
以軟體的角度來看,kernel可想像是每台android行動裝置的心臟。而kernel log可以想像是,心臟如何跳動或是做過任何事情的歷史記錄。常常我們debug就是在仰賴這樣的資訊,具備kernel log分析的能力,是身為一個BSP RD該有的。

*開bug請廠商分析
在之前BSP介紹的文章有提到,每一包最原始的BSP source code,也都是由CPU SoC vendor(像是Qualcomm, Nvidia, Intel..etc)所提供出來的。因此,其實95%以上裡面的code都是他們寫的。也因此,常常有些bug是跟他們自己寫的code有關係,所以常常需要開bug請他們協助分析。開bug用的語言是英文沒錯,重點就是要如何用簡單的英文去表達,去敘述一件事情,我覺得這是很重要的。

比較嚴肅的部分到這邊為止...
接下來就是工作三年心得囉!

(二)工作三年心得

三年,是一個說長不長,說短不短的數字...
遙想當初,自己還是一個會天天看每一餐刷了多少錢,爬樓梯累積的分數多高的小毛頭
(華碩員工餐廳都是刷識別證,然後有爬樓梯累積分數抽電影票活動)
到現在也算是各方面都還算懂一點點的小老鳥了...

要說這三年帶給我最大的改變...
當然,跟學生時代不同,有穩定且夠用的收入,可以自給自足。
也學習到了很多工作上的技能。
但對我來說,最大的收獲,是認識到了很多很多很棒的夥伴。

在我的部門裡,大家幾乎年紀相仿,所以話題上其實也都相近許多。
我們都會加彼此的FB,有時下了班後,會偶爾去聚聚餐。
甚至假日也是會一起約出去玩。

因此,擁有一個還不錯的人際關係,是我工作以來感到驕傲的部分。

華碩是個大公司,員工也有到五六千人
我覺得有個快速拓展人際的好方法:
"去認識別人,不如讓別人來認識你"

來到一個新環境,多去參加一些活動,
例如像是歌唱比賽,球類比賽...etc

如果部門需要幫忙舉辦什麼活動,
其實可以自告奮勇地幫忙舉辦。

如此一來,雖然是有點累
犧牲了自己的一些時間
可是換來的是可能是用錢也買不到的回憶,以及一些好朋友們。

很多人都說,在台灣科技業當RD,生活一定很無趣。
每天都有de不完的bug,又晚下班...
感覺回家後,洗個澡,闔上眼後立馬又要上班了...
如此日復一日,年復一年的日子...好苦啊~~~

但我覺得其實可以不用這樣耶
有一個很關鍵的地方,就是我很喜歡去設定一個小目標
比如說:
這禮拜某天平日晚上要出去吃好吃的東西
這週末要去好玩的地方玩
下個月有誰誰誰會來找我

"一直期待著有趣且好玩的事情"
應該就是我消除平常工作會無聊最大的動力吧

因為有期待,所以做起工作會更有個目標,也會較有效率。
設想如果今天晚上要跟自己喜歡的人吃飯,
為了準時赴約,再怎麼辛苦,都要以最大的效率讓自己早點下班。
這就是雙贏的結果~

所以,不是生活很無趣,而是自己懶惰了。
想辦法讓自己保持雀躍的心情,是支撐自己努力下去的理由,不是嗎?

我覺得自己運氣很好,
因為經手過幾個重點project,在三年內,出差了五次。
其中美國四次,大陸一次。

出差的工作內容大家其實都是不在意的,也不會把它記錄下來...
我們在意的是,假日可以去哪裡哪裡玩耍,去體驗一下在台灣體驗不到的人,事,物。

在北美出差的時候:
第一次看到優勝美地那漂亮的景觀,舊金山藝術宮,真讓人讚嘆不已
還有原來晚上9點還是可以看到太陽啊...高緯度的夏天白天真是長...
親眼看到夢寐以求的MLB棒球比賽(陳偉殷好近,而且我們還上電視了XD),NBA季後賽勇士隊Steven Curry好神!

在德州出差時:
第一次在國外過聖誕節,跨年在當地最local的夜店裡面真的好嗨!
看到了當地最美麗的夕陽
聖誕節大賽馬刺對火箭,親眼看到了書豪葛格打籃球

在上海出差時:
外灘夜景真的讓我印象深刻,過了一年多,到現在FB封面照片還是它。
因為是去工廠support,也了解到所謂產線是怎麼運作的。

說實在的,這一切是在我投履歷的時候想也想不到的...
而我能做的,就是好好把握這一切,並且把值得回憶的事情記錄下來。


還記得在上班一周心得中,寫下了以下這些目標:
----------------------------------------------------- 
去好好把握住一天該有的工作時間
1.和自己比 要對的起自己
2.Know what I do and how to do
3.早一點下班
4.保持心情愉悅,跟隨自己的步調走
----------------------------------------------------

過了三年,我覺得自己應該都有達到了
找到自己的tempo,凡事處理起來就能夠不疾不徐
其實也比較不會那麼緊張

幸好有華碩這個大舞台,
讓我認識了這麼多人
參與到了這麼多活動,
經歷到了這麼多的專案。

未來會發生什麼事情,老天才知道
唯獨"把握當下,展望未來"才是自己該做的
加油囉!

12 則留言:

  1. 這個工作內容挺有趣的欸。

    不知道可以分享要得到這樣的工作需要什麼背景?
    或是分享您的背景?

    先說一下我的背景好了,

    會基本 Linux、會基本 GIT、build 過 boot.img (不過只是 repo sync 之後直接 make 而已QQ),然後目前在前幾大 CSIE,不知道畢業後有沒有機會做這些。 QQ

    回覆刪除
  2. 只要會C就可以了吧
    資工電機相關的都ok~

    回覆刪除
  3. 你好 請問一下關於android BSP 需要先survey 那些知識?例如書籍之類的..

    回覆刪除
  4. 您好

    我最近剛好也面試這份工作,想問一下如果只會C語言其他真的什麼都不會這樣進去會不會沒辦法跟上,還是公司會有培訓之類的?

    ASUS裡面工時應該是很長,這樣會不會調適不過來? 學長會不會沒時間帶新人?

    回覆刪除
  5. 只是剛好用C的機會最大
    如果要先看書的話,可以考慮讀一些Linux kernel方面的書籍,其實主要就是補強一下OS的觀念吧

    其他像是Linux指令,git指令,因為算是有用的話就會熟,所以可以進去邊看邊學。

    再怎麼樣都會帶新人的啦,除非遇到不好的主管,放心吧。

    回覆刪除
  6. 板主前輩你好!我這潛水客也該浮出水面跟你打聲招呼了!
    當初也是經過幾番思考才選擇ASUS!
    你的文章也有幫助到我更了解公司的狀況!感謝你
    Btw我也是高雄人!
    9/9 on board 的大同廠HW/RD
    祝你工作順利

    回覆刪除
  7. 不用客氣啊~
    有幫助人就好~

    回覆刪除
  8. 感謝victor的分享,謝謝唷!!

    回覆刪除
  9. 請問這個工作一年大概幾個可以拿到幾個月

    回覆刪除
  10. 這篇文章可以分享在我的timeline上嗎?

    謝謝

    回覆刪除
  11. 板大您好,我也是今年八月底要進去ASUS BSP team的新鮮人,想請問有跟您連絡的管道嗎? 有些小問題想請教一下,希望在進去前能夠先做點準備,謝謝^^

    回覆刪除