Re: [問題] 請問S3C6410與OMAP3530
※ 引述《JFTU (QQ)》之銘言:
: 剛進入linux世界裡,有太多不了解地方
: 第一我已經買了devkit8000開發板,天漠開發的板子,
: 當然買回了就是先看了手冊,按照步驟,大部分都可以成功執行,
: 只不過對於詳細運作方式當然就不知,
: 所以花錢去上第一門課 嵌入式linux系統設計-ARM架構與軟體設計
: 目前VM-ubontu下做交叉編譯,把它的LED範例程式跑在目標板上是OK的
: 現在有一個問題(喝喝上面囉唆一堆)在目標板上都是命令模式
: (kernel 2.6.28 & rootfs,為什麼rootfs檔案會比kernel大?)
: 我要如何將執行LED範例程式改成視窗模式,
: 查了網站,因該就是使用QT來開發,但是這對新手來講很超過了,
: 請教我第一步該怎麼做
: 有使用devkit8000的同好可以加入好友嗎?或者有開放論壇 (問問題@@)
: 希望能夠共同開發產品的同好(這是重點),也可以付小額指導費用
: 謝謝(我住台北)
: PS. 因為找不到如何發表文章,所以寄生在此文章,請見諒
小弟因為實驗室需要,所以從初學者到現在也有一點小心得,在這邊分享一下。
個人跟原PO一樣,一開始也只是看別人建立好得使用手冊,一步一步的建立開發環境,
然後跑跑已經準備好的demo程式,看看會有怎樣的變化,然後Download Kernel和rootfs
之類的,經過一連串Google的指導,大致上對於嵌入式系統開發分為下列兩大項以及
開發環境的建立。
一、系統層面開發:
這邊泛指bootstrap(大部分都用u-boot),Linux Kernel(拿到一個開發版怎樣將Linux
porting上去)以及週邊驅動。這部份大致上需要相當的精神去了解OS基礎運作以及驅動
撰寫等等,進入起來相對花功夫。需要了解就是上述的三項:
u-boot:
當按下開關之後會發生的事情,像是從Flash讀取bootloader(u-boot)然後
bootloader開始載入Linux Kernel到Memory接著將權限轉到Linux Kernel進行系統
啟動。
Linux Kernel:
指整個作業系統的核心,包含週邊裝置、程序管理等等,這部份參考一般大學
作業系統(恐龍書)就會有基本的了解。
Rootfs:
這部份指的就是開機完之後,Linux Kernel會掛載「磁區」上去,進行系統操作
像是裡面會包含基本的linux指令,如ls, cp, mv等等,這部份可以參考busybox,
所想fs應該都是透過busybox來製作。
整個系統啟動流程大致為:
開機→u-boot→載入Kernel至Memory,移交權限給Kernel→系統初始化或載入必要週邊
驅動→進入檔案系統。
其實我後來認為,只要有OS的嵌入式系統,大致上就跟一般電腦沒兩樣,差別在於大小
、速度、耗能等等。
個人認為可能會需要的基礎知識:
1. 作業系統
2. Linux Kernel
3. Linux Driver
4. 啟動程序
至於原PO有提到的為什麼大部分都是Command Line方式呈現,那是因為某些"板子"
可能不支援螢幕輸出,甚至只有COM Port,所以一般來說Command Line最適合各種
情況。接著要有GUI首先要先有x-window,這部份參考Linux作業系統的圖形化介面
的啟動流程可以得到一點概念。最後一點就是x-window會吃一點資源,所以也是有
效能上的考量,但是就跟上面所說得一樣,現在板子越來越威,也有人在beagle上
跑ubuntu,也能在上面玩以前的game,這真的很厲害。beaglebroad和pandabroad都
有ubuntu support的Project(沒有記錯的話)。
二、應用層面開發:
以已經架構好得Embedded Linux(指基於別人開發好得系統層面進行加值)舉例來說,
Android的應用程式開發,就是一個,只是他提供的工具以及開發環境較高階,所以寫
起來就跟一般在PC寫程式一樣。在這邊應用開發,通常會根據不同的"板子"的不同而
會有不同的。那這邊為什麼要選擇Qt?其實有很大的一點是「跨平台」的關係,何謂
「跨平台」?簡單的說就是:「我只想要寫一次Code,就可以跑在各種平台上」,
這邊Qt提供的是一個跨平台的Framework,何謂Framework?就是在OS上面在加上一層
應用,讓使用者透過該層去跟OS溝通。想像win32有win32的API,Linux有Linux的API
在寫code的時候,同樣程式就會有兩種寫法。那透過Qt Framework只要寫一次,也就是
呼叫Qt Framework所提供的API來實現你的程式,這樣只Linux有裝Qt Framework那
你的程式碼可以原封不動的轉到Linux重新編譯然後就可以動了,簡單說就是這樣,
Android也是一種Framework。
根據原PO的問題,想要寫一隻GUI程式然後控制LED,可以分為兩個步驟:
一、先利用Qt寫好視窗,然後有按鈕代表燈號。這樣算完成圖形介面
二、從範例找到控制燈號的方法,這部份就要Trace Code,先找到main function
開始尋找他的流程,可以找到控制燈號的實現方式,把這方式抽取出來,分別
實現在GUI程式中。大致上是這樣。
最後,開發環境:
這部份因人而異,像我就不太喜歡在Windows掛VM裡面裝Linux因為這樣在跑NFS
就需要再設定一下,個人覺得不太喜歡,再者,既然都要學好Linux那乾脆灌
雙系統會比較能強迫學習。
為什麼環境需要Linux?這部份牽扯會比較廣闊,但主要的原因在於,板子的環境
是「Linux」。在開發環境部份,主要注意的就是:
Cross Compiler:
Target端的資料(板子):
一、u-boot
二、linux kernel
三、root file system(rootfs)
傳輸方式:
(Download u-boot)
一、JTAG Download(在板子u-boot掛掉的情況下需要,通常用於剛出廠或u-boot搞壞)
二、TFTP Download(在板子有u-boot的情況才有辦法,通常用於更新)
(Download linux kernel)
一、JTAG Download(理由同上,畢竟可以直接指定要存的位址)
二、TFTP Download(理由同上)
(Download rootfs)
一、TFTP Download(通常用於開發完成後,需on-board測試,或是出去DEMO或出廠)
二、NFS 掛載(通常用於快速驗證用,因為不用重新打包,直接利用網路掛載
等到程式開發好,可以直接放在掛載的目錄,這樣板子可以直接看到,所
新增的檔案)
以上是一點心得淺見,也可互相交流一下心得,如有錯誤煩請糾正,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.88.241
推
04/17 22:30, , 1F
04/17 22:30, 1F
→
04/17 22:31, , 2F
04/17 22:31, 2F
推
04/19 10:50, , 3F
04/19 10:50, 3F
推
04/19 12:29, , 4F
04/19 12:29, 4F
→
04/19 12:37, , 5F
04/19 12:37, 5F
→
04/19 12:39, , 6F
04/19 12:39, 6F
謝謝指教。m(_ _)m
※ 編輯: chiang0823 來自: 140.113.55.238 (04/19 22:09)
推
04/30 20:50, , 7F
04/30 20:50, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):