2009年11月9日 星期一

我對於 ARM 計畫

我將先以ARM為首先.
以目前,我所擁有的可限資源下.(*1)
對其ARM,進行更進一步的研究
如何使用以下資源
首先應是把
0.將其對ARM的所有相關的文章,閱讀
   尤其對其系統/中斷/bootload/

1.對其ehternel module,mp3 module.,,ROM,RAM.紅外線,等...
   設備的使用

2.uc/os-ii
   且要更一步對其內所有的相關的議題研究
3. 配合外部設備與uc/os-ii
    進行結合
4.發展系統,
    實現以前的專題中的網路mp3系統,並改進



ps:
*1
1.smart - ice jtag
2.h-jtag
3.NXP LPC2388
4.STM32P103
5.紅外線,
6.ethernel module
7.mp3 module


2007//11/27
我在網路上,找尋資料時,看到一個 "給想進入從事embedded system開發工作新手" 的文章
所以除了研究uc/os-ii外.在軟体方面,我會採取在x86上對其 Linux做詳細的研究及實作
但在ARM的開發平台上,我仍然會以windows為主.(主要是因我現存的工具

以下是轉貼文章(http://phorum.study-area.org/index.php/topic,58481.0.html
-----------------------------------------------

----------------------------------------------

首先,其實在下並不是什麼高手,進這一行的資歷比起版上的高手算是資淺很多,
本身也並非很資深的工程師。
這篇文章是給跟我一樣同為新手的人一點方向,也請熱心的大家一起來補充!

我當初也是跌跌撞撞地進入這一行~
不過我覺得自己還算幸運,好像不小心走對了方向....
版上很多人都在問,要怎樣入門? 需不需要去上課? 有沒有參考的書?

這裡我提一個比較不一樣的觀點,也許實際上很難達到.....但是先不管!
以我工作到現在的感想是,你想近這個領域的話,就去『找一份這樣的工作』
這樣最快! 也最有系統~ 比上一堆課都還有用!

---

你一定會想問? 哪有這麼容易就能找到這樣的工作?

你會發現,只要在討論區上問說『新手要怎麼入門』?
會得到一些五花八門的答案,像是『C語言必備』『組合語言要懂』『電子電路的基礎』
『複習計算機組織』『修單晶片的課程會有幫助』.....等等
不過, 等全部學完, 人都往生了....

其實這些答案都對,但是你可能不知道的是,其實不是每個工作都需要知道這件事情,
一個嵌入式產品從誕生到量產,都需要很多不同職務內容的 RD 來幫忙,
每個 RD 所需具備的知識內容一定是不一樣的。
所以就看你所在的公司,在這個產品開發的流程中,扮演什麼樣的角色!

---

就我目前所在公司(ODM廠)看到的流程來說,假如要做一個網路產品,wireless router 好了,
通常就是先決定 cpu 要用哪一家的,wireless chip 要用哪一家的,switch chip 要用哪一家的?
這些公司,就是我們口中說的 vendors(協力廠)。
決定好了之後,你用的開發環境(SDK),通常 vendors 都會提供(通常是提供 cpu 的那家公司)

我們 ODM 廠要做的事情,就是把這包 SDK 的架構弄懂,
然後把我們要加上去的 service 一一加上去,比方說一台 wireless router 上面會有什麼服務?
dhcp,NAT,routing 總要有吧? 或許還會有 vpn,ddns....等等的服務。

然後負責的工程師可能就會去網路上找 OpenSource 的 dhcpd,iptables...
然後嘗試將它修改後 porting 到 SDK 的環境上,
最後 build 出可以在 target board 上執行的 firmware。

簡單的說,整個開發工作就大致上是這樣,而且遇到比較難解的問題的時候,
vendors 廠的工程師也會來協助!

所以假如你找的公司是 ODM 廠,就是做產品的 software,做系統整合。
通常你要熟悉的就是 C 語言,還有學會在 Linux 上進行編譯的那一套流程(Makefile...等等),
其他的知識,你都可以在工作中慢慢補強~

假如你是我口中所說的那些 vendors 廠,尤其是 cpu 廠(系統晶片廠),
我個人覺得那對技術門檻的要求比較高,你可能真的要懂組合語言,懂 compiler,
懂一堆比較偏底層機制的知識,因為你可能要負責生出 SDK。

說真的,每次 chip vendors 來 support 的時候,
我都覺得他們很厲害,講的東西對我來說是另一個世界講的語言! = ="
不過利用這個 project 的機會,多跟他們打交道,自然會學到一些東西的!

---

所以你只要知道該公司扮演的角色,進入這一行的機會還是有的。
你一定想不到,我當初近這一行的時候,並不是負責很核心的開發工作,而是在負責寫 web UI。
沒錯! 就是寫網頁啦! 看起來我的工作跟 Embedded System 很不相關,
事實上我寫 HTML 的時間比寫 C 還多很多~ 而且我還寫了很久哩....
但是這個工作卻是我覺得入門最好的進入點。

很多網路設備都需要有人寫使用者介面,這也是整個嵌入式產品的一部分。
你放心,還是可以學到東西的; 你知道一支沒有 filesystem 的 wifi-phone 要怎麼弄出 web UI 嗎?
當你從 UI 上填一個值,按 OK 之後,你知道系統偷偷做了哪些事情嗎?
而且你還真得要知道這些事情才行,因為寫系統服務的人會告訴你,從 UI 上傳下去的值要檢查什麼,要注意什麼?
然後你只要花點心思去 trace 整個流程,跟寫 service 的人多聊聊,就會在工作中,漸漸地建立整個系統觀~

只要用心,多思考,總是會有很多有趣的議題的~
到現在我也幾乎不寫 UI 了,已經在做其它更有趣的事情了~

---

書的話,市面上的書也很多,很多書是那種需要搭配板子實習的,假如你沒有板子,說真的也沒什麼用!
而且我覺得我過去買的那些書,我看的時候完全都沒感覺,反而是工作一陣子之後,
在回頭去看看,才會跟現有的經驗做連結,才會有豁然開朗的感覺!

其實在下並非資訊系本科的學生,而且科系還差真遠,
所以我工作後,花了很多時間自己再進修。
關於上課,其實在下也曾去上過一些課,我對上課這件事情,是支持的,
我也覺得我當初上的那些課程給我的幫助是正向的~
但是慎選補習班是很重要的! 一定要有實習, 時數要夠~
不可能會有『快快樂樂無痛學會 Embedded Linux』這種事情~

另外,非常強烈建議你,假如你決定要去上課!
一定一定一定一定一定一定一定一定一定一定要熟悉 Linux 到一定的程度,
不是架 server 這種事情喔, 是至少了解 Linux 的指令,開機流程,和系統設計的邏輯,
因為我之前去上課的時候,總是會發現有些學員連基本的 Linux 使用都有問題,
常常老師已經在繼續講下一段了,他還很困惑於剛剛的指令在做什麼事情~
只是一股腦的想學就來上課,效果是有限的~

------------------------------------------
其實,我也是建議先從x86 base Linux 開始瞭解起會好很多,好處是

1. PC硬體零組件取得容易(除非真的要開發ARM driver or porting AP 再考慮買特定的實驗板)
2. 可以藉此瞭解Linux開機流程(想做embedded system必定要瞭解)
3. 練習rebuild kernel for hardware
4. 可以執行emulation
5. DRAM空間大很多,可以免除很多不方便
6. 新手可以練習從HD移轉system到另一個HD/Flash Disk ,然後測試移轉過去的系統開機

如果新手可以將上面這幾個項目玩得很熟,那要跨到ARM series的hardware相信也是很容易的!!

目前我就是在做PC for networking , 最主要的還是將系統放在RAM disk
Flash disk 只是拿來暫存initrd file而已...
已記錄

沒有留言:

張貼留言