| |
知識分享:回答 |
|
| |
超『夯』題材『嵌入式系統』?
到底什麼是「Embedded System(嵌入式系統)」呢?這個『夯』到不行,人人都在討論的題材,究竟是什麼東西?嵌入式系統儼然成為科技業主要投入研究的主題,就讓中華數位嵌入式學院來告訴各位看官什麼是「嵌入式系統」。依據美國電機工程師協會的定義,【嵌入式系統為控制、監視或輔助設備、機器或甚至工廠運作的裝置】。它是一種電腦軟體與硬體的綜合體,並且特別強調『量身定做』的原則,也就是基於某一種特殊用途,我們就會針對這項用途開發出截然不同的一項系統出來,也就是所謂的客制化(Customize)。我們中華數位嵌入式學院所要談論的嵌入式系統,就直接將目標鎖定在最熱門的『Embedded OS 的技術』,然後再繼續縮小我們的主題,而題目就只會剩下了 Embedded Linux 與 Win CE了!而中華數位嵌入式學院,從民國94年開始投入Embedded Linux系統的教育訓練至今,累積了五年多的嵌入式系統教育訓練經驗,我們直接就鎖定在 Embedded 實作運用的主題上,並給予有志想要投入嵌入式系統開發的朋友們一個正確的、有效的學習方向,讓想要進入嵌入式系統領域的學員能抓住最主要的『Key Point』。 回到最上ㄧ頁
|
|
| |
 |
|
如何有效的學習嵌入式系統?
•抓住嵌入式的精髓與切入點:
(1)Linux + C 語言 :這是學習 Embedded Linux 的基本功。
建議學習方式:
將Linux 安裝在PC上實際動手練習並習慣操作介面,並且找一些C語言的書,利用Linux 安裝後即有的GNU Compiler Collection ,將書上的實例或者範例拿來練習。
(2)Linux Programming :IPC、P-Thread、Processes、Shell programming等,觀念架構與親自動手Coding是不能少的。
•建議學習方式:
書局有很多Linux Programming 的書籍,但並非每一本書人人都能適用,所以一定要找一本自己看的懂的比較重要,而非聽說哪一本比較好就買哪一本,取決於自己是否能夠理解作者所要闡述的觀念。並將書中的實例仔仔細細的coding過一遍。
(3)Embedded Linux 實作練習:找一塊ARM的開發板,這是必備的工具。從架Embedded Linux環境開始 ,大部分的開發板都會附上source code ,然後利用source code 去cross-compiler 新的boot loader和Kernel image,download 到RAM 或燒到Nand FALSH裡。 自己在寫一些簡單的Application ,Porting 一些原本在x86 Linux 的軟體到ARM Linux上。
•建議學習方式:
Boot loader :用Gnu tool-chain去重新build U-boot,目前可參考的文獻相當多。
Kernel:可以選擇Kernel 2.6.x,目前Linux kernel的里程碑,許多新技術、新觀念、驅動程式支援與作業系統架構都在此版本實作。
FSH觀念的建立:FSH 全名為 Filesystem Hierarchy Standard,是一份定義檔案與目錄標準的文件,FHS 的標準定義了目錄與檔案的擺放位置,而 UNIX-like 的系統則是根據這個標準來管理整個檔案結構。
Root File System:可以使用Busybox這個方便的工具來打造自己的根目錄。
Linux device driver :用Linux device 的架構寫一個簡單的driver 例如:點LED燈、USB driver等等。各位是否有發現,嵌入式系統要學的東西怎麼會那麼多,也不知道要從何著手﹖那麼可以參考我們中華數位嵌入式學院的課程,由業界的工程師指導您如何有效的學習Linux與C語言,將C語言活用在實務上,讓您融會貫通將基本工穩穩的打好,打好地基才能在迅速的往上延伸。之後一步步的往嵌入式的核心架構深入的了解。
回到最上ㄧ頁 |
| |
 |
|
請問 X86 Embedded Linux 和 一般Embedded Linux (ARM) 在製作過程有何不同?
Ans: x86家族的處理器為 CISC (複雜指令集)電腦, ARM 為 RISC (精簡指令集) 電腦, 兩者使用時機各有不同, 功率消耗為主要考量, 其他部份在課程內容會講授; 職是之故, 在建構 linux kernel 的時候也需要不同的系統程式(compiler / assembler / linker / loader) 一般稱為 tools chain, 來進行建構(課程中會介紹這些 tools chain),當然有時候也需要因應特定的硬體周邊進行driver (驅動程式)的 porting(移植)! X86平台的kernel 建構就更簡單了, 不需要什麼 tool chain, Fedora 拿來灌一灌就可以建構出一般 x86 用的linux kernel ,工具不是大問題,問題在於你懂不懂linux kernel 裡面的 C 語言程式碼寫了些什麼? 回到最上ㄧ頁 |
| |
 |
|
若我想學習 X86 Embedded Linux 開發(ex: x86 UMD or PDA , x86 phone ), 上 Embedded Linux (ARM9)有幫助嗎?
Ans: 絕對有! 事實上,雖然本課程主要針對 ARM 處理器進行講授, 但是除了 (EMBEDDED SYSTEM) ARM 的介紹外我們講授的課程還有,C 語言與資料結構? ==>? 強調演算法與資料結構(可參考講義篇幅即可了解), 課程中帶入講師的工程經驗 (透過程式的技巧將處理器及Linux系統的效能逼出來)。Linux Programming?? ==>? Linux 的程序管理, system call, Networking Programming ... (就是一般常聽到的 Unix 程式設計啦, Linux 會有極小極小部份的使用差異而已)。以上無論你學的是那種處理器, 這些都是你將來必須面對的; 可以這麼說, 你學到的是全面性的專業技能,而不是只偏廢在處理器上打轉, 況且處理器的原理都是依樣的, 沒有那種說會了一種, 其他的就得重頭學的道理! 這課程只會讓你懂得比別人多, 沒那種學了沒用的問題! 回到最上ㄧ頁 |
| |
 |
|
請問 X86 Embedded Linux 和 一般的x86 Linux 有何不同( 除了size)?
Ans: 沒什麼兩樣, 重要的是linux kernel的程式碼你看得懂不懂, 跟有沒有 embedded 無關, embedded 只是個概念字眼, 他意味著這個 kernel 的使用領域 (嵌入式設備)! 回到最上ㄧ頁 |
| |
 |
|
為何要重做 ? 使用一般的發行( 例如: FC7or SuSe) 刪刪減減不也行嗎?
Ans: 事實上, 你所提的那些套件, 因為考量到大多數的一般用戶, 因此他安裝起來的時候非常龐大,因為他的考量在於"應有盡有",即便如此他們用的? kernel 還是只有 1 ~ 2 MB 左右 ! Embedded system所用的 Linux kernel 與那些沒什麼兩樣, 論及Embedded Linux 其實只是說, 讓 Linux kernel 以外的檔案系統保留絕對需要的程式和設定檔即可,並儘可能把那 1~2 MB 的Linux kernel 在 configuration 階段再抽掉許多用不到的 driver以提升效能, 且因為嵌入式設備通常輔助儲存記憶空間很小(就是硬碟或所謂的Flash / ROM 啦), 這裡所談得 size 考量通常不會是 kernel (因為他就是那 1~2 MB)而是檔案系統(就是根目錄 / 下的所有東西)? 一般都控制在? 16~32 MB 左右, 常見的就是用 CF卡儲存!! 某些特定情況下你可能還得要因應嵌入式設備的特定硬體, 改寫部份 driver 的程式碼,如此而已, 但是這就已經是一門大學問了, 你看得懂 Linux 驅動程式碼嗎?看得懂才能寫或改 (課程會教這部份的概念)!最後再強調一次,不論你用的處理器是 x86 或 ARM / PowerPC, kernel 程式碼都是用同一份, 就是叫做? "linux kernel source" !他們建構起來就是叫做"bzImage"? 就是所謂的linux kernel 大概都在 1 MB 左右。 回到最上ㄧ頁
|
| |
|
|
PeeWeeLinux 是做甚麼用? 我們課程沒提?
Ans: A Small Linux Distribution for Embedded Application。 回到最上ㄧ頁 |
|
KS2410 裡的kernel source 和網路上download 的是否一樣. (不考量version)
Ans: 基本上一樣, 但有修改過加了一些driver如 TFT-LCD, Network card driver。 回到最上ㄧ頁 |
| |
|
|
compile boa ok under x86. boa 要如何執行. 和arm 上有何不同?
Ans: 執行方式都一樣,但ARM平台要cross-compiling。 回到最上ㄧ頁 |
| |
 |
|
如何掛載program on linux’s program list. (such as PDA phone’s game or any program and called by user click from program list)?
Ans: 每個 GUI system 都不同. 若是Qtopia Platform, 可以參考中華數位 GUI Qt 課程。 回到最上ㄧ頁 |
| |
 |
|
google phone OS’s solution 和embedded linux 的比較?
Ans: 都是Linux了,但 google phone OS 代號Android 。
Android is a mobile phone platform based on the Linux operating system。 回到最上ㄧ頁
|
| |
 |
|
How to combine kernel + initrd.gz ?
Ans: 參考 uClinux kernel ,的作法,( 搜"CONFIG_BLK_DEV_RAMDISK_COMPILED_IN" ,)然後Patch 到中華數位上課用的SDK
。 回到最上ㄧ頁
|
| |
 |
|
如果分開burn initrd to Nand Flash and kernel, 那其Nand Flash address allocate 是不是自己規劃, 然後傳入kernel 的參數為何?
是的,要自己規劃, kernel參數部份,請參考中華數位嵌入式實作講議U-boot章節。 回到最上ㄧ頁 |
| |
 |
|
u-boot, kernel, rootfs, 開機後mapping to memory 的配制為何? U-boot? Addr? Kernel’s addr ? and RootFs’s Addr?
Kernel’s addr 從 kernel linker script 即可知道RootFs’s addr 和 U-boot Addr 在Linux 開機後不用管。 回到最上ㄧ頁 |
 |
如何學嵌入式系統設計跟韌體設計?
如果想要從工作中學到嵌入式和韌體設計,機會會比較低一點。大部分公司都希望他們可以找到有一定水準的人,這樣對於公司的開發上會有所幫助,所以想要在工作上學到,有一點困難啦!我倒是會建議,目前台灣有賣開發板的產商還滿多的。建議可以找一家廠商買個開發板,要到所有的source code,先照著他們的開發手冊做一次。另外建議可以學Linux嵌入式課程,從底層開始玩,會比較有趣一點。先找一塊ARM的開發板,從bootloader、Kernel、Device Driver到RootFs再加上AP,可以找一些原本就在Linux底下就有的AP,例如播放影片的Mplayer,http://www.mplayerhq.hu/design7/dload.html,下載source回去修改可以在ARM的開發板上面work,這樣會來的有趣一點。
如果還是搞不懂!可以到中心詢問相關資訊
回到最上ㄧ頁 |
 |
在Linux環境下如何驅動電腦週邊硬體裝置?
撰寫Linux Device Driver, 看裝置型別去新增如Character Device, Block Device,Network Device或是在某個kernel的subsystem下去註冊。
回到最上ㄧ頁 |
 |
USB2.0介面驅動程式這種的該從哪下手學?
了解 USB 2.0 Specification, code 可以參考 linux/usb? 回到最上ㄧ頁 |
 |
我該如何快速的進入linux driver的領域?
參加CDPDA linux device driver人才養成 回到最上ㄧ頁 |
 |
手邊只有兩套fedola & sentOS 也有gcc我該如何寫好的驅動程式做編譯?我目前是以OREILLY LINUX驅動程式第三版做編譯不知道我該如何在我原有的linux下做編譯?
要有kernel source tree. 必要的話得修改Module Source下Makefile 回到最上ㄧ頁 |
 |
有一個 USB 2.0 轉 Ethernet 的 adapter如果沒有此裝置的規格書有辦法寫出它的 driver 嗎?
若要從最底層的開始寫的話,確實是沒有辦法! 回到最上ㄧ頁 |