PIXNET Logo登入

Just Linux

跳到主文

歡迎 Embedded Linux System 界的菜鳥老手們 , 一起來討論吧

部落格全站分類:圖文創作

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 8月 15 週五 200818:59
  • The First , Linux device driver Entry

之前提過的 , 要進入Embedded Linux系統 , 有太多可以進入的管道. 譬如寫寫API , 像是gtk+, Qt,  Mini Gui等 , 要不就玩玩Kernel build , 替核心加些新玩意什麼的 , 但就我個人而言 , 最有趣的莫過於是拿一個可以接在系統上的周邊 , 替它寫隻驅動程式 , 就像是在玩LEGO NXP機器人時, 藉由一些指令 , 可以讓機器人擺擺手 , 點點燈 , 感覺像是賦與其生命一樣的令人感動.   只是相較於機器人的簡易逗趣 , 驅動程式的撰寫 , 就顯得複雜許多 , 再加上使用的系統硬體 , 以及Linux 版本 , 往往讓一開始想進入的初學者摸不著邊際 , 而顯得挫折滿滿. 如果你也有這樣的問題的話 , 下面剖析一些進入Linux Device driver的方式 , 或許對你就能有些幫助.

一開始 , 我想你必須有一台能build linux image的電腦. 不管你是用vm ware , cygwin或是另外備一台電腦 ,要不就是切partition , 這都不管 , 只要你能在電腦上 , 建置一套已經有 gcc , glibc 等工具的系統 , 就能開始寫些linux image. 不過 , 以我個人建議 , 如果你身邊有一台個人電腦 , 你可以直接找一套市面上 linux distribution來安裝. 像是Fedora , SUSE , UBUTN ...., 當然這些Distribution 一定會有不同的版本 , 理所當然的會建議找越新的版本 , 對你手頭上硬體的支援性也就越高. 等一下 , 我所demo的程式片段 , 都是以Fedora 8 的版本來執行. 至於怎麼安裝 , 坊間有太多的資訊 , 就請自行翻閱查找囉.

有些同好初學者 , 曾經有這麼一個問題 , 一開始進入Device driver的領域時 , 倒底要選那一個版本的作業系統做開始呢? 2.4.x? or 2.6.x ? 我個人是覺得 , 2.6.x相對的成熟 , 周邊應用程式的支援性也比較高 , 許多Distribution 的人機介面 , 做的也比較理想 ; 或著是說比較像是熟悉的windows , 能一邊在上面寫程式 , 一邊聽mp3 , 會不會比較人性呢? 比較不會顯得枯燥呢? 前者的答案是肯定的. 但至於枯燥這一檔事 , 我只覺得 , 如果你是windows programmer ,  可能長期習慣在windows黑盒子周邊生存 , 遇到問題時, 你也只能摸著鼻子束手無策 ,所以難免會有寫code寫得既悶且煩的問題. 但如果你是linux的愛好者 , 你就會發現 , 隨著你對系統的熟捻度越高 , 遇到問題時 , 你可以隨心所欲的在核心瀚海裏查找 , 反正code是open的 , 除了你可以有mail forum的眾多高手可以問不說 , 你要是對原始的code不爽 , 那就自己動手改嘛. 完全by youself. 當然 , 要是動到核心的部份 ,可得遵手GPL的規定. 這是Linux當初創建的精髓. 最後回到我們一開始討論初學者進入的角度. 在你還沒有把功力練到一定的的層級前 , 我個人會認為 , 2.6.x版本 , 會讓出學者比較容易入手 . Fedora 系統都是base on Linux 2.6.x 版本開發的 , 相對的符合我們等會介紹的需求.

接下來 , 假設大家都已經準備好一台可以build linux code 的電腦 了, 也大概知道 "make Makefile" 是怎麼一回事 , 如果你對基本的語法仍是一頭霧水的話 , 很抱歉 , 你可能得先離席 , 先去k點這方面的資料後再回來. 坊間有許多書籍可供參考 , 像是歐萊禮的 "建構嵌入式系統" , 就算是一本不錯的入門書.

開始介紹Device driver前 , 我習慣將內容分成下列幾部份:

1.什麼是virtual file system? 

2.Device driver module 的註冊

3.fops 層的應用描述

4.Api與Devie driver的交互應用.

也因為各部份都佔有一定的篇幅 , 所以將分章深入論述. 也希望有興趣的人 , 一同討論並給予指教.

 

 

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(4) 人氣(1,987)

  • 個人分類:i386 Device driver
▲top
  • 12月 20 週四 200714:00
  • 如何進入Linux嵌入式系統(Embedded Linux system)

        在主機(Host)建立一個主機系統 , 其實該說是很容易的. 坊間有太多的開發套件(distribution) , 像是早期的RedHat , 或是Fedora , Mandrake , Suse等 , 多的不勝枚舉. 通常只有follow安裝光碟的步驟 , 就能很清楚的將一個帶有GUI(Graphic User Interface) 給安裝在你的電腦主機上. 但想要進入Linux 嵌入式系統(Embedded System) , 這只是一個最基本的課題而已.....


我們將面臨到的有:

        1. 選定什麼樣的Target Board , 作為實現嵌入式的系統的平台.
        2. 想將什麼樣的系統  , Built到Target Board上.
        3. 選定何種Bootload 來起動你的核心(zImage)
        4. 有沒有需要根檔案系統(root file system)
        5. 開發過程中 , 有沒有設定要如何進行除錯
.

光這幾項 , 就足以讓人傷透腦筋. 

        但隨著市場電子商品的蓬勃發展 , 尤其許多可攜式(portable)商品 , 像是PDA , GPS導航系統 , SMART Phone , 汽車電子等商品應蘊而生. 相對的坊間 , 有許多的業者 , 做了許多的開發板 , 並提供了相關的資訊論壇 , 讓使用者在學習層面上  , 有著許多可以互相交流的機會.

        不過 , 在進入實體操作層面時  , 建議還是先去拜讀一些相關書籍 , 這有助於在開發過程中 , 當遇到問題時 , 起碼有一些書中作者提供的經驗. 像是O'REILLY出的 " Building Embedded Linux Systems " 及 " Linux Device Driver " 或著是碁峰出的 " 建構嵌入式系統-使用Linux " , 都是相當不錯的書目. 尤其由YAGHMOUR作的 " Building Embedded Linux Systems "這本書中 , 會導引你如何從工具鏈(tool chain)的取得, 以及核心(Linux Kernel)編譯一直到開機程式(bootloader) 等過程 , 都會以不同篇幅 , 做相當詳盡的解說. 是本很值得收藏的工具書.

       在學習Linux Embedded System , 有一個相當的關鍵 , 就是要能忍的住挫敗. 因為相較於要收費的WIN CE套件 , 雖然要收費 , 但套件包裝的也較完整. Linux則因為來源多且雜 , 初學者一開始 , 可能會有無所適從的經驗 , 甚至照著書中的指導一步步的做 , 結果卻與書中的結果 , 有很大的差異. 所以就必須借重開發者的經驗 , 自行將其套件tune到穩定. 但在入門後 , 就能感受到在Linux 許多論壇中 , 那種不被收費 , 又可以不斷的收取許多資源的好處 , 是Microsoft所遠不能比擬的喔



(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(8,591)

  • 個人分類:Embedded Linux
▲top
  • 11月 14 週六 200922:33
  • Device driver module的註冊

此篇文章受密碼保護,請輸入密碼後閱讀。

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(2,327)

  • 個人分類:BootLoader
▲top
  • 9月 06 週日 200923:49
  • Google -- Android

好久沒上來寫寫Linux的玩意兒 ~ 除了忙著公事外 , 其實也花上了大半的時間 , 在研究Google的手機開放平台--Android.

其實 , 如果一開始 , 就要把Android定為手機開放程式的平台 , 只能說是因為Google想藉著這日趨成熟的Smart Phone市場 , 大力的推廣其Google社群的魅力所在. 但其實 , 按未來最大的可能 , 應該是要將Android定位在MID(Mobile Internet Device)的類別 , 也就是說 , 只要是一個可攜式的通信裝置 , 多可以藉由Android的開放平台大力的開發. 所以 , 隨著未來無線網路通信設備的更加普及 , 數據傳輸的廣泛度更加成熟 , 幾乎可以預期會有許多的相關的周邊產品 , 使用該平台的SDK來撰寫應用程式及作業系統.

如大家所知的的 Android是Linux background的產品. 在玩了好一陣子的Embedded Linux , 終於見到有一個比較完整的社群在大力的推廣. 我想有興趣著墨這一塊的 , 該是共襄盛舉的好時機.


----以下是IP設計商 , 正大力的將Android這套作業系統 ,給po在其IP能建置的各項不同的處理器及衍生的電子產品上. 可以預期的 , 越來越多的商品 , 被"Android化"是指日可待的.

Android on MIPS®

MIPS科技公開原始程式碼!

MIPS科技正將功能強大的Android™平台帶到全球各地廣大的MIPS開發社群中。MIPS開發人員現在可以利用此一革命性平台進行消費性產品設計,包括機頂盒、數位電視、行動上網裝置(MID)、家庭媒體播放器,以及VoIP系統等。

憑藉MIPS科技在數位家庭的領先地位,此舉將能為推動Android跨入行動電話以外的龐大市場奠定重要基礎。

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(1) 人氣(887)

  • 個人分類:Embedded Linux
▲top
  • 2月 06 週五 200910:58
  • fuser --- identify processing using files or sockets

fuser 這指令, 乍看之下都會讓人解讀為 "fuse --保險絲 " , 但在Linux中, 應該是解釋為 File using

什麼時後會用到fuser這指令呢, 大體是你想知道有那一個程序 , 正使用著系統的某些接口. 像是那一個網路介面 , 或是那一個檔案系統掛載等.  由其是當我們想卸載某一檔案系統 , 如 umount /dev/win_d ,  卻一直出現 "Device is Busy" 的訊息, 就可以使用 fuser , 把正佔住該資源的程序給找出來.

例如

#fuser -m -v /mnt/win_d       會出現
 
                      USER       PID    .... COMMAND
/mnt/win_d    root        4154       bash

也就是說 ,  有一隻編號4154的bash 程序 , 正在access著/mnt/win_d

其中下的參數 :
-m 參數顯示所有使用指定文件系統的進程,後面可以跟掛載點,或是dev設備( Thanks lisir :),-v參數給出詳細的輸出


當然啦 , 問題一定是要解決的 , 如果是剛好有程序在使用 , 可以關掉就算了. 偏偏有的是錯誤的程序 , 卻關不掉. 這時就得把它給kill 了, fuser裏也安排了這樣的參數命令
fuser -m -k /mnt/win_D

這招自動把霸佔著/mnt/win_d的程序殺死。如果你不是很明確是否要殺死所有霸佔設備的程序,你還可以加一個-i 參數,這樣每殺死一個程序前,都會詢問:
# fuser -m -v -i -k /mnt/win_d

                      USER       PID    .... COMMAND
/mnt/win_d    root        4154       bash
kill process 4154? (y/N)

當你選Y時 , 那佔住的程序(pid) , 就會被刪掉了. /mnt/win_d , 也將會被釋放.

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(946)

  • 個人分類:RedHat Linux
▲top
  • 2月 06 週五 200910:33
  • 如何查看系統現行的程序 -- ps , snapshot current process

常用 Windows的user 一定很習慣 , 當系統出現藍色之死時 , 我們會同時按 " Alt" + "Ctrl " +"Del " , 來起動工作管理員 ,好來看看倒底是那一隻程式當掉了,  或著是死命的佔住系統資源. 然後點選刪除或停用.

這樣的問題 , 在Linux上也是會發生 , 當系統因為某些程序 crash時 , 會出現系統無法釋放資源等現像, 例如我們要umount /dev/win_d , 但老是出現 Device is busy這檔事. 我們就可以使永 "ps " 這指令 , 來好好的觀察到底是那一隻process , 偷偷的在內層搞鬼.

#ps         可以列出目前user 所執行的程式

#ps -u     則是列出所有user 所執行的程序.

但上面所提的 , 指的都是由前台console所鍵入的程序 , 但像是一開機所啟動的程序 , 則會被暗藏在後台中. 這時我們可以利用

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(3,969)

  • 個人分類:RedHat Linux
▲top
  • 12月 22 週一 200809:43
  • 偷懶是人的原罪呀~

有好一陣子沒來更新這裏的文章. 主要是公司的案子一忙 ,再加上有時沒有把k進腦袋裏的 , 消化成文章. 慢慢的日子一積久了, 動筆敲鍵盤的意願 , 也就懶了許多. 學習其實也就是這麼一回事 , 社會新知不會因為你停止學習的當下 , 也跟著停滯的. 所以 , 完Linux的夥伴們, 可得堅持下去. 有時後可以懶一下 , 墮落一下. 但那種想窺探Linux究竟的好奇心 , 可得一直努力的保存下去.

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(413)

  • 個人分類:
▲top
  • 4月 16 週三 200809:41
  • [轉貼] 嵌入式開發社群擁抱Eclipse發展

        越來越多的嵌入式開發人員正轉向採用開放原始碼工具,以建構可靠與靈活的系統及軟體。開放原始碼既可提供建構系統軟體和應用程式所需的原材料,也能提供開發工具。特別是像Eclipse和GNU工具組等開放原始碼開發工具,開發人員可對其進行定製與擴展,以滿足精確的計劃要求。不僅如此,許多嵌入式開發商採用了多種開放原始碼工具,以作為更全面的開發環境基礎。

Eclipse是一種可擴大並推動嵌入式工具生態環境成長的整合開發環境(IDE)。Eclipse基金會正從事Eclipse平台及相關技術的開發,該基金會是一個由軟體公司組成的非盈利組織,目標是促進技術的共享。

在嵌入式設計與開發領域中,Eclipse平台主要受到平台的成本與靈活性;以及共享技術貢獻者與外掛程式供應商的社群規模這兩大因素推動。今天的嵌入式供應商若不是搶搭Eclipse列車,就必須為他們為何不投入提出理由。但一旦置身其中,他們就會設法運用免費的開放原始碼軟體賺取更多營收。

業界對快速開發系統的渴望為Eclipse平台帶來了一些複雜的問題,而一種計劃在今年夏天問世的Callisto整合型系統則可望解決這些問題。該系統牽涉到由多家公司領導的多個專案、數百個委員會以及數以千計參與其中的人員之間的協調。

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(1,691)

  • 個人分類:
▲top
  • 3月 19 週三 200818:13
  • 配置DHCP SERVER



Building Embedded Linux SytemDHCP , NFS , TFTP

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(3,709)

  • 個人分類:RedHat Linux
▲top
  • 3月 18 週二 200814:08
  • 好用的 alias 指令

Linux 2.6的plarform 上TOMB Rider

alias

(繼續閱讀...)
文章標籤

jslinux 發表在 痞客邦 留言(0) 人氣(9,292)

  • 個人分類:RedHat Linux
▲top
123»

自訂側欄

近期文章

    文章分類

    toggle bootloader (2)
    • BootLoader (16)
    • U-boot (48)
    toggle Device driver (1)
    • i386 Device driver (32)
    • Embedded Linux (64)
    • RedHat Linux (72)
    • Cross Compiler tools (8)
    • Trainning Course (8)
    • 未分類文章 (1)

    參觀人氣

    • 本日人氣:
    • 累積人氣: