顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - andrew

頁: [1]
1
今天改 code 時不小心發現的~
事實證明....寫 code 很容易把一個人逼瘋!
[attachment=1]

2


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

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

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

---

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

你會發現,只要在討論區上問說『新手要怎麼入門』?
會得到一些五花八門的答案,像是『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 使用都有問題,
常常老師已經在繼續講下一段了,他還很困惑於剛剛的指令在做什麼事情~
只是一股腦的想學就來上課,效果是有限的~

這點還好我當初做對了選擇,我先去上了 Linux LPI 的課,
當然不是為了要考證照啦! 只是為了要了解 Linux。

而且我忍不住要提一件事情,我還真他X的幸運!
我在台南念書時,有報名 LPI 的課,沒想到老師是 netman 大大!
後來我到新竹工作後,可以重聽一次,沒想到老師是 小州 大大,你說說我是不是很幸運!

我始終都記得 netman 大大在第一堂上課時所提的金字塔學習觀念~
我一直都非常感謝兩位老師幫我紮下的基礎,他們教會我的是一個學習 Linux 的方法!
這對我後續的學習新東西時,有很大的幫助!

所以一定得把基礎打好,Linux 就像積木一樣,你手中握的積木越多,學習的彈性會越大。
你手中握的都是別人用積木組好的套件時,你會在學習上有一種很虛的不安全感!

---

以上, 只是個人淺見, 也請各位有經驗的大大多多分享與指導囉, 感謝!

順便提一下,之前我翻到一本書,我其實還沒時間去看它,
但是我覺得寫的不錯:『Linux系統架構與目錄之解析。 作者:邱世華 』
它講了很多我覺得不錯的系統觀念,可以參考看看囉~

在此祝各位工作愉快!



3
首先, 因為發現有些提問放太久了, 或是問題中沒有提供足夠的資訊讓版友回答,

我想也不會有人想回答了, 所以刪除之!



再者, 在此宣導各位提問者, 當問題解決後, 請記回到版面寫下您的心得.

我發現版上很多提問的文章, 有開頭, 也有熱心的版友參與討論,  並且給予經驗上的建議,

但卻總在最後不見原始提問者將測試後的心得做回饋!

任何解決後的心得, 甚至是測試後又發現的新問題, 都是很好的回饋, 也都可以寫!



另外, 我把一些我個人覺得整理的比較有系統的文章暫時置頂!

假如個位覺得影響閱讀的話, 可以再提出來討論~

4
我們在開發 embedded system 時遇到一個問題,
產生 firmware 的過成大約是這樣:
1. 產生 filesystem
2. 產生 kernel image
3. 整合 1 & 2 變成 firmware

但是1.的步驟需要用到 mknod 的指令建置 /dev 下的裝置檔.
一般的開發者都用自己的 Linux 環境, 所以自己是 root, 執行 mknod 沒有問題,
但是客戶要求我們可以用一般 user 的身份 build firmware,
這會使得產生 filesystem 的過程中發生 mknod 權限不符的錯誤.

請問各位有遇過這樣的問題嗎? 是如何解決的呢?


5
我遇到一個情況, 系統每次開機時:

1.我會去執行 dhcp client
2.設定好網路組態
3.執行 ntpclient的程式去做網路對時

但是因為這三個程序是寫在 rc 的啟動script 中,
又因為是dhcp的關係, 所以你不能保證執行(3)的時候,
(1),(2) 的dhcp 已經取得資訊並且設定完成.

常常遇到的問題是當 dhcp client 尚未將網路組態設定好時,
如果就去執行 ntp client程式, ntp client 就會發出
"Unknown Host" 的錯誤訊息, 然後結束,
可以理解, 因為 Gateway, DNS 都還沒設定之前,
根本無法連到 ntp server.

所以問題變成是 - 怎麼確保 ntp client在網路組態生效之後才執行,

我試過修改原始程式讓 dhcp client 再要到網路設定之後,
利用 system("ntpclient"); 這個方式去啟動,
但是有些邊際效應產生, 結果不是很好,

另外, 有個方向是利用我們的函數,
因為 dhcp 取得網路組態之後會將設定寫入 FLASH 中,
我們也有funciotn可以存取, 例如: get_flash("gateway");

所以我有想過在 dhcp client 的程式中寫個 while(1) {...}
裡面隔一段時間就 get_flash("gateway"), ...等等的數值,
如果不是 "0.0.0.0" 就去啟動 ntp client,
不過感覺這樣做效率會不好, 所以想請問大家有沒有好的解決辦法???

6
Hi all:

不管是為了在 Linux 上作程式開發,或是為了證明自己對 Linux 的熱情,
你可能會採取的方式就是花個幾萬塊去敗一台 PC 灌 Linux,
但如果你像我一樣窮的話,大概會尋求用 MinGW+MSYS,Cygwin,VMWare...等等的替代方案,
這幾個東西我都粗淺的玩過,不過我這邊要推薦的方式是使用 CoLinux。

小弟覺得 MinGW+MSYS,Cygwin 的方案沒有讓我有 "使用Linux的感覺",
可能我這個人比較龜毛,我就是不爽打 ls 時會看到像 "\Documents and Settings" 這樣詭異的目錄,
VMWare 給我的感覺蠻肥大的,雖然你可以自己客制化安裝,但我總是覺得它很佔資源又蠻龜速的。
而且像我這樣沒錢又買不起正版的人,如果不用 VMWare Player 的話,大概又要花額外的時間找XX檔...非常麻煩。

我相信有用過 CoLinux 的人應該會對它的表現感到滿意,
網路上有很多熱心的前輩寫了很多教學檔,有些教學甚至非常深入,
教你在 CoLinux 上安裝自己的 Linux Distro (哇~~)
當初小弟也是看了一堆文章後才辛苦地建立了我自己的 CoLinux 環境,
但是跑過一次流程之後,你就會很清楚 CoLinux 的運作哲學了。

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

首先,這篇文章談不上什麼 "分享" 啦!主要是我自己整理的 "學習筆記" ,
我會用 "最簡單" 的方法去做,並沒有什麼高段的技術可言(因為高段的我也不會),
我直接使用網路上人家包好的 image 做說明(Mini Fedora Core 1),
如果你想自己在 CoLinux 上弄個 SuSE Linux 或是其他我沒聽過的 Distro,
小弟就真的無能為力囉!因為我也沒嘗試過在 CoLinux 上重新安裝 Linux Distro。

先說說我的需求,當初會去用 CoLinux 是因為公司只分配一台 NB 給我,
我個人用 vi 寫程式又非常龜速,我曾經也是懷抱滿腔的熱血逼迫自己使用 vi,
並且配合 ctags 和 taglist plugin,使用了一個月之後還是不習慣,
主要的原因是不是對指令不熟,而是我操作的很慢,Trace Code 還好,
但是寫的速度就是慢,我也嘗試過一些 Linux 下的 IDE 環境,但.......
抱歉!我真的覺得很難用。

之後,我在討論區上看到一個方式,就是用個很鳥的軟體(名稱我忘記了)去 mount FTP 資料夾,
概念是你先在 Linux 上啟動 FTP Service,在 Windows 上執行那個軟體,
利用那個軟體去把遠端 Linux 主機上的 FTP 目錄 mount(也許Windows上叫做"連線遠端磁碟機")
成 Windows 上的一個磁碟機,這樣你就可以用你心愛的 UltraEdit 去 Trace Code,
不過....超難用的,龜到爆!如果你的情書放在 Linux 主機上的話可以這樣修改,
但千萬不要想要用它來寫程式,光是在一個大型專案之中做 "Find in Files" 的動作所花的時間
足夠讓你去茶水間泡杯茶或是跟公司的總機小姐聊個天打情罵俏一下,
好啦!我承認我當初就是懶得去學什麼 SAMBA 啦!(後來用 SAMBA 之後速度 "明顯提升")

對於 Embedded Linux 的開發工作,小弟只是個剛入門的菜鳥,所以如果有什麼地方的用詞不嚴謹,
或是觀念上不正確,還請各位前輩不吝指教。

以下我會從安裝 CoLinux 開始說明,然後示範安裝並且設定一些開發 Embedded Linux 專案時常用的套件,
像是 tftp Server 之類的,還有一些我自己在管理 Project 的方法,
這個部分包括如何擴充 CoLinux 的容量(就是你打 df -h 看到的那些資訊)。

最終的目的就是協助各位將你的 Embedded Linux 開發環境移到 CoLinux 上,
如果你有什買什麼開發板的話,你可以試著將你現在用的 Cross-Toolchain 和
 Project SourceCode 放到 CoLInux 上編譯看看,如果你也喜歡這個開發模式,就推廣一下吧!
目前小弟所在的公司就是用這個開發方式唷!

ps: 蝦密?X-Window!你要 X-Window......
  抱歉,這篇文章不會告訴你怎麼在 CoLinux 上安裝 X-Window,
  不過我會在文中給你一個參考網頁,它教你怎麼用 apt 裝 Gnome 環境,
  當初我的確參考它在 CoLinux 上裝過 X-Window,
  用 VNC Viewer 去看還會有登入畫面耶(真是見鬼了!)

  效能怎樣?......我覺得還可以看啦!但我相信你不會想用它來看網頁!

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

目錄:

[1] CoLinux 簡介
[2] 下載所需套件
[3] 安裝 CoLinux
[4] 解壓縮 Root FileSystem & swap Devic
[5] 設定網路名稱 & 修改 fc1.colinux.xml
[6] 啟動 CoLinux
[7] 後續的網路設定
[8] 設定/啟動/關閉 swap
[9] 相關套件安裝
[10] 設定 Service 以及開機後立即啟動服務的方法
[11] 在你搞爛系統之前
[12] 關於分割區的的擴充和 Project 管理
[13] 有的沒的 - 將 CoLinux 以 Windows "服務" 的方式來啟動
[14] 其它無關痛癢的議題

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

[1] CoLinux 簡介:
  略過......哈哈!自己去 Google 一下吧!

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

[2] 下載所需套件:

  官方網站: (http://www.colinux.org/ )
  下載處: (http://sourceforge.net/projects/colinux )

  下載:
    (1) coLinux-0.6.3.exe (coLinux主程式)
    (2) colinux_minimal_fedora_core_1.zip
      (Root FileSystem Image, OS Image,隨便你要叫他什麼,反正就是有人先幫你安裝好
       Minimal Fedora Core 1,然後封裝成一個檔案)

  下載WinPcap: (http://www.winpcap.org)

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

[3] 安裝 CoLinux:

  基本上用 "下一步" 安裝法就可以安裝好了,但是有兩個地方請注意:

  (1) 安裝時取消 Root Filesystem image Download 選項,因為我們會自行下載。
    (就是你剛剛下載的 colinux_minimal_fedora_core_1.zip )

  (2) 建議安裝在c:\colinux 或是 d:\colinux (建議有3G以上的空間)
    (小弟的測試環境安裝在d:\colinux下)

  安裝過程中會安裝一個虛擬的網路卡: "TAP-Win32 Adapter V8 (coLinux)"
  安裝完後重新開機之後,檢視你的 "網路連線" 應該會多一張虛擬的網路卡。

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


[4] 解壓縮 Root FileSystem & swap Device:

  安裝完 CoLinux 之後,你應該會在安裝目錄下看到幾個檔案,像是:
  vmlinux,initrd.gz
  我想這不用我說明吧,但是這樣還不能使系統運作,因為你只有 Kernel image 和
  Initial Ram Disk,一般開機完之後不是有個動作叫做 mount Root FileSystem 嗎?
  是的,以下就來 "安裝它"(其實只是把它解壓縮出來而已啦!)

  將 colinux_minimal_fedora_core_1.zip 解壓縮之後可以看到:

D:\colinux_minimal_fedora_core_1>dir

磁碟區 D 中的磁碟沒有標籤。
磁碟區序號:  AAA0-D909
D:\colinux_minimal_fedora_core_1 的目錄
2006/02/16  下午 05:03    <DIR>          .
2006/02/16  下午 05:03    <DIR>          ..
2004/03/10  上午 05:55                45 blank_1.bz2
2004/03/10  上午 05:55                49 blank_10.bz2
2004/03/10  上午 05:55               113 blank_100.bz2
2004/03/10  上午 05:57               785 blank_1024.bz2
2004/03/10  上午 05:57               112 blank_128.bz2
2004/03/10  上午 05:57               208 blank_256.bz2
2004/03/10  上午 05:58               306 blank_384.bz2
2004/03/10  上午 05:58               402 blank_512.bz2
2004/03/10  上午 06:00                79 blank_64.bz2
2004/03/10  上午 06:00               594 blank_768.bz2
2004/04/14  上午 08:05               490 fc1.colinux.xml
2004/04/14  上午 08:17        83,727,430 fc1_2GB_root.bz2
2004/04/13  下午 09:12             1,413 README.txt
      3 個檔案      83,732,026 位元組
      2 個目錄   9,922,768,896 位元組可用


  這邊我需要的檔案有:
  (1) blank_128.bz2 可以被格式化為 swap device。
  (2) fc1_2GB_root.bz2 是 Fedora Core 1 的 Root FileSystem,解壓縮之後約 2G 多。
  (3) fc1.colinux.xml 是 CoLinux 的主要環境設定檔,它與安裝完 CoLinux 之後,
    會在安裝目錄下看到的 default.colinux.xml 是同一個東西,
    原則上你只要使用它去修改就可以了,概念上"有點像"是 Grub 和 fstab 的綜合體。

  安裝: (路徑可以自由設定)
  (1) 解壓縮 fc1_2GB_root.bz2 會得到檔名為 fc1_2GB_root 的檔案,將它複製到d:\colinux\下。
  (2) 將 fc1.colinux.xml 複製到d:\colinux\下。
  (3) 解壓縮 blank_128.bz2 會得到檔名為 blank_128 的檔案,
    將它複製到 d:\colinux\ 下並更名為 swap_device

  ps: 事實上我上面步驟中所用的檔名與目錄,你都可以自己更改,只要在接下來的設定檔中正確地指到
    Root FileSystem 和 swap device 所在的路徑。

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

[5] 設定網路名稱 & 修改 fc1.colinux.xml:

  這是比較重要的步驟,很多人無法完成 CoLinux 的開機都是因為這邊的步驟發生錯誤:
  修改 fc1.colinux.xml (剛才複製到d:\colinux\下了):

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
  <block_device index="0" path="\DosDevices\d:\colinux\fc1_2GB_root" enabled="true">
  </block_device>
  <block_device index="7" path="\DosDevices\d:\colinux\swap_device" enabled="true">
  </block_device>
  <bootparams>ro root=/dev/cobd0</bootparams>
  <image path="vmlinux"></image>
  <memory size="128"></memory>
  <network index="0" type="bridged" name="LAN">
  </network>
</colinux>

  重點說明:

  (1) block_device index 0 是我們的 Root FileSystem 所在位置,
    不管你放在哪裡指定到正確的路徑和檔名就好。

    它的 device 不像我們所熟悉的 hda0, hda1,而是 cobd0, cobd1,
    我猜是 "COlinux Block Device" 的意思,稍後 CoLinux 開機之後,
    你應該可以在 /dev/ 下看到這些 devices。

  (2) block_device index 7 是 swap device,為什麼一定要是 "7"?
    我看討論區的文章說是這一個 Root FileSystem 的預設值?
    我之前嘗試手賤改了 index 值,但是我忘記測試有沒有成功?
    因為反正 index 7 可以用,我也很懶得去測試,如果你測過的話可以告訴大家結果如何!

    不過基本上在 CoLinux 開機之後,你去check /etc/fstab 的設定和 fc1.colinux.xml
    的設定互相對應就沒問題了(這個過程也可以讓你了解 CoLinux 的配置哲學)。

  (3) 其中這裡示範的網路設定方式為 bridged,注意 name 的設定是你網路連線的名稱,
    安裝 CoLinux 時會安裝一張虛擬網卡 "TAP-Win32 Adapter V8 (coLinux)",
    我目前的電腦連線出去的網卡是 "Intel(R) PRO/100 VE Network Connection",
    他的連線名稱為 "區域連線" ,也許你安裝 CoLinux之後,會有個 "區域連線2"。

    因為修改設定檔 fc1.colinux.xml 不支援中文名稱,
    所以你只要在 [開始] --> [設定] --> [控制台] --> [網路連線] 中,
    在那個 "區域連線" 上按右鍵,重新命名為任意名稱,
    在設定時填入 name="YOUR_NETWORK_CONN" 中就可以了,
    這裡我將原本的 "區域連線" 更名為 "LAN" ,將 "區域連線2" 更名為 "TAP",
    由於我是透過 "LAN" 那張網卡連線出去的,所以在剛剛的是定中才會設定 name="LAN"。

    說明一下目前我的工作環境的網路是透過 LAN 連線出去,在 10.10.2.x 的網段上,
    透過DHCP自動取得IP,(但其實固定的也沒有差別啦)。

  ps:
    在 SourceForge 上你可以下載到不同的 Root FileSystem Image(Gentoo, Debian...),
    你可以為每個 Root FileSystem Image 撰寫不同的 *.xml 設定檔,並且各別取不同的名字,
    然後在啟動 CoLinux 時傳參數指定到不同的 *.xml 設定檔,就會開啟不同的 OS,
    但是......你會這麼變態嗎?(我硬碟小啦!... >_<)

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

[6] 啟動 CoLinux:

  使用 Windows 的 Command Line Window (cmd.exe)
  (記住我剛剛將 CoLinux 安裝在 d:\ 下)

  1. D:\coLinux>colinux-daemon.exe -h

  Cooperative Linux Daemon, 0.6.3
  Compiled on Sun Feb  5 20:25:03 2006
syntax:
  colinux-daemon [-h] [-d] [-t name]
         ([-c config.xml]|[configuration and boot parameters])
   -h             Show this help text
   -c config.xml  Specify configuration file
          (default: colinux.default.xml)
   -d             Don't launch and attach a coLinux console on
          startup
   -t name        When spawning a console, this is the type of
          console (e.g, nt, fltk, etc...)

  這是說明檔,不用再說明了吧,重點是 -c 可以自己指定設定檔的名稱,
  不指定的話,預設會找 colinux.default.xml

  注意:
    執行之前必須先安裝好WinPcap,否則會出現找不到wincap.dll的錯誤而無法啟動。

  執行:
    colinux-daemon.exe -c default.colinux.xml -t nt

  (跑了一大串資訊之後...)

Fedora Core release 1 (Yarrow)
Kernel 2.6.11-co-0.6.3 on an i686

colinux login:

  預設帳號是root,不用密碼。

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

[7] 後續的網路設定:

  登入之後 ifconfig 你會發現預設的 ip 是 192.168.0.40,
  你可以經過修改 /etc/sysconfig/network-scripts/ifcfg-eth0 讓你的 CoLinux 與你的網段一致。

  修改網路設定:
  (1) /etc/sysconfig/network-scripts/ifcfg-eth0
  (2) /etc/resolv.conf

  修改完後: service network restart
  就可以 ping 出去囉!

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

[8] 設定/啟動/關閉 swap:

  記得我們剛才設定的 swap 嗎?

  (1) 確定你的config.xml有這一段:
    <block_device index="7" path="\DosDevices\d:\colinux\swap_device" enabled="true">
    </block_device>

  (2) 確定你的 CoLinux 系統的 /etc/fstab 有這一段:
    /dev/cobd7 swap swap defaults 0 0

  (3) 以 free 指令查看 swap 有沒有啟動

  (4) 若要關閉 swap 用 swapoff -a 指定

  (5) 若想自行增加或替換swap大小:
    可以去下載 swap (http://gniarf.nerim.net/colinux/swap/)。

    或是去下載 blank (http://gniarf.nerim.net/colinux/blank/)
    再自行 format 為 swap device,修改方式:

    1). 先改 config.xml
    2). 開機後改 /etc/fstab
    3) # mkswap /dev/cobd7 (視你的設定而定)
    4) # swapon -a
    5) # free (檢查)

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

[9] 相關套件安裝:

  然後呢?......基本上,Linux OS 有了網路之後,剩下來應該就是你的事情囉!
  這一版的 Mini Fedora Core 1 上的預設安裝套件非常少,連 gcc 都沒有,
  但它有 apt 和 wget 可以讓你下載套件,你可以開始用 apt-get 安裝所有你需要的套件。

  其實我也是因為學習安裝 CoLinux 才學會使用 apt 指令的,關於apt的指令,
  我個人推薦這篇文章:
  http://apt.nc.hcc.edu.tw/web/apt/apt.html

  這是我自己安裝的套件 (for My Projects):

  apt-get update (每次使用之前一定先下這個指令)
  apt-get dist-upgrade (建議先將目前的套件更新)
  (這個步驟有夠久,先去泡杯咖啡吧!)

  apt-get install gcc
  apt-get install make
  apt-get install genromfs
  apt-get install lftp
  apt-get install vsftpd
  apt-get install tftp-server
  apt-get install tftp
  apt-get install samba
  apt-get install samba-client
  apt-get install subversion
  apt-get install tar
  apt-get install gzip
  apt-get install unzip
  apt-get install ncurses(或ncurses-devel)
  (沒有這個ncurses套件,make menuconfig 不會顯示畫面)

  apt-get install file
  apt-get install man

  視你需要做增減,重點就是善用 "apt-cache search <keyword>" 指令找到你要的套件。

  這個微型化的 Linux 版本上面所安裝的套建,和啟動的 Service 非常少,
  這可以讓你練習管理自己的 Linux 主機,包含套件管理,System Services 管理...等等。

  如果你願意的話,你可以用 apt 自己把 X-Window裝起來,用 VNC 或是 FreeNX 連進去之後,
  你會看到一個 X-Window 登入畫面,並且可以使用你的桌面環境。

  想要動手裝看看的話,可以參考這一篇:
  http://pukiwiki.kandix.idv.tw/index.php?Fedora%2FMiniFedora

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

[10] 設定 Service 以及開機後立即啟動服務的方法:

  設定 tftp server, samba server, vsftpd,設定的方式應該不用我說明了,
  網路上可以找到很多文件。

  我記得 CoLinux 預設只啟動 sshd,那麼如何設定開機後自動啟動其它的 Services 呢?
  也許你以前很依賴 RedHat/Fedora 的 setup 指令,但是 CoLinux 沒有這個指令唷~

  請你學會正統 Linux 用的指令 - chkconfig
  不再贅述了,請參考這一篇:
  http://linux.vbird.org/linux_basic/0560daemons.php#starting_daemon

  ps: 使用 ssh 登入 CoLinux 時,帳號/密碼為 root/colinux。

  ps2: 我自己目前都把專案放在 CoLinux 中,並且將專案資料夾以 SAMBA 分享給
     Windows 系統 "連線遠端磁碟機"(我真討厭這個冗長的名稱!)
     這樣我可以用我的 UltraEdit 去看 Code。

  ps3: 因為啟動 CoLinux 的方式是透過 Windiws Command Line 的視窗,
     而且視窗大小不好調(事實上,我不知道怎麼調啦!)
     複製貼上的行為也是 Windiws Command Line 的模式,
     所以我建議用 Putty 或是 SecureCRT 之類的軟體 ssh 進去做編譯。

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

[11] 在你搞爛系統之前:

  到這邊你已經建構了一個完整的開發環境,也安裝了你所需要的套件,
  所以我會建議你在你搞爛你的 CoLinux 系統之前先備份吧!

  現在就先 poeroff CoLinux,然後把你的 d:\colinux\fc1_2GB_root
  壓縮備份起來 (壓縮之後 size 約在 300Mb 以下)

  你可以連 *.xml 的設定檔和 CoLinux 的主程式一起燒錄起來,然後放在你家的貓找不到的地方,
  這樣你下次想幫別人安裝或是重新安裝時,就不用在重新搞 apt update 那個步驟了。

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

[12] 關於分割區的的擴充和 Project 管理:

  到這邊如果你應該有足夠的資訊可以把你的嵌入式專案搬移到 CoLinux 下,
  並且在 Build firmware 之後透過 tftp load 到你的 Target Board 上。

  可是你可能會問,當初我們安裝的 RootFS 約有 2G 的空間,如果我需要維護不同的專案,
  勢必一定會到空間吃緊的狀況,這個時候就需要擴充分割區了,
  其實概念跟你在 PC 上裝一顆新的硬碟很像啦!

  步驟如下:

  (1) 下載 ext3fs image (http://gniarf.nerim.net/colinux/fs/)
    把它解壓縮到你喜歡的地方,這裡示範是: d:\colinux\fs_2048Mb
    (我下載的是已經格式化為 ext3 的 2G FileSystem 空間)

  (2) 修改 config.xml,增加一個新的 block device:
    <block_device index="2" path="\DosDevices\d:\colinux\fs_2048Mb" enabled="true">
    </block_device>

  (3) 開機進 CoLinux 之後,修改 /etc/fstab:
    增加: /dev/cobd2 /mnt/projects ext3 defaults 0 0

  (4) # mount –a (可在下指令之前和之後用 df 指令檢查比較)

  一般而言我們可以將/home,/opt,/mnt,/YOURNAME,使用額外的 FileSystem image,
  好處是方便管理與備份,比如你可以為每一個 project 開一個 "cobd?" 設定 /project?? 之類的掛載點,
  然後設定 SAMBA 讓 Windows mount 它,這樣要備份的話也只是備份那個 /project?? 所對應的
  Filesystem Image File 而已。

  ps:
    我的管理方式是我去下載很多 ext3fs image,並且全部都 mount 到 /mnt/ 下的資料夾,
    比如 /mnt/project01,/mnt/project02 其實都對應到各自的 Ext3 格式的 FileSystem Image。

    我把各個專案用到的 SourceCode 和 Cross-Toolchain 都放進去 /mnt/project?? 中,
    然後在我的工作目錄下(例如: /home/andrew)去做 Symbolic Link 到 /mnt/ 下的各個專案,
    這樣就算是要設定 Cross-Toolchain 的 PATH 都不會有問題。

    有些龜毛的 Cross-Toolchain 一定要你安裝在 /opt下,
    但你又不想增加 Base OS 系統(指 Root FileSystem 的分割區)的空間時,
    都可以用 Symbolic Link 的方式解決。

    我這樣做的用意是我想切開 Base OS 系統所用的 image (例如:fc1_2GB_root)
    和存放專案所用的 image (例如:fs_2048Mb)。
    所以我想備份專案時,或是我想把專案移交給別人時,
    只要將專案對應的 image tar 給其它成員就好了!

  ps2:
    另外,當你開啟 SAMBA 分享專案時,可能會發生你在 Windows 上用 UltraEdit 去修改
    卻不能存檔的情況發生,主要的原因幾乎都是因為你連線時的帳號,
    對那個 Project 存放路徑的權限設定的關係,解決的方式我就不談了,
    相信大家都會用 chmod,chown,chgrp 的指令。

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

[13] 有的沒的 - 將 CoLinux 以 Windows "服務" 的方式來啟動:

  每次都要寫一長串指令來啟動 CoLinux 是不是很麻煩,跟我這樣做:

  (1) 開啟一個命令列視窗 (開始=>執行=>cmd)
    cd D:\coLinux
    D:\coLinux>colinux-daemon.exe –h (看--install-service)

  (2) 打: colinux-daemon.exe -c default.colinux.xml -t nt --install-service coLinux
    (最後一個 "coLinux" 的名字是自己取的,將會加到 Windows 的啟動服務清單中)

  (3) 要啟動 coLinux 可以直接執行:
    net start coLinux
    要停止 coLinux 可以直接執行;
    net stop coLinux
    或是直接到 "服務" 裡去啟動或停止 coLinux,您也可以將其設定成開機後自動啟動 coLinux。

  ps: 不過...有誰會無聊到去用它嗎?誰願意一開機就有個 CoLinux 啟動吃我的記憶體,
    還是寫個 DOS Batch File 吧:

    D:\coLinux\colinux-daemon.exe -c D:\CoLinux\colinux.xml -t nt

    如果你變態到一次使用多個 OS image,你可以在桌面寫幾個這樣的 Batch Files,
    然後每一個都指到不同的 *.xml。

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

[14] 其它無關痛癢的議題:

  這是幾個無關開發工作的議題,但是是我目前想知道的議題,
  如果你剛好有研究過且測試過的話,希望你可以跟大家分享一下吧:

  (1) 我不知道怎麼 Compile CoLinux 的 Kernel (升級?)
  (2) 我不知道在 CoLinux 下怎麼用 minicom (我測試都沒成功耶)
  (3) 怎麼在 CoLinux 上安裝我想要的 Distro?

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

2006/05/19 Andrew

(END)

7
Hi all:

我想在我的嵌入式系統中弄個syslog的機制,
我使用busybox提供的syslogd和klogd,
關於這方面目前我所認知的是:

(1)使用syslog()函數可以讓一般的Application將message紀錄到
   /var/log/messages中, 但是syslogd必須要啟動, 否則訊息不會被寫入/var/log/messages中.

(2)使用printk()函數可以讓Kernel Module把訊息紀錄到/var/log/messages中,
   但是syslogd和klogd都必須先啟動, 否則訊息不會被寫入/var/log/messages中.

---

但是因為我又不想紀錄太多的訊息, 所以我想詢問的是要怎麼對訊息做過濾,
關於這方面目前我所認知的是:

(1)使用syslog()函數時可以設定level, 關於level的定義如下:

   0: LOG_EMERG
   1: LOG_ALERT
   2: LOG_CRIT
   3: LOG_ERR
   4: LOG_WARNING
   5: LOG_NOTICE
   6: LOG_INFO
   7: LOG_DEBUG

例如, 如果我在Application中寫了這樣的程式碼:
syslog(LOG_NOTICE, "System Message - Notice");
syslog(LOG_INFO, "System Message - Info");

syslogd啟動後執行, 會在/var/log/messages中看到下面兩項訊息:

Jan  1 00:00:50 Hostname syslog.notice System log daemon exiting.
Jan  1 00:00:50 Hostname syslog.info System log daemon exiting.

(2)使用printk()函數也可以設定level, 定義如下:

   0: KERN_EMERG, 系統無法使用
   1: KERN_ALERT, 必須立即執行
   2: KERN_CRIT, 緊急狀態
   3: KERN_ERR, 錯誤狀態
   4: KERN_WARNING, 警告狀態
   5: KERN_NOTICE, 正常狀態且十分重要
   6: KERN_INFO, 報告
   7: KERN_DEBUG, debug-level訊息

例如, 我寫了一個簡單的kernel module,
再insmod時會 printk("<4>Hello, World\n");

若klogd和syslogd"同時啟動"(我測試的結果似乎兩個都要啟動?)
insmod之後會在/var/log/messages中看到:
Jan  1 00:39:38 Hostname user.warn kernel: Hello, World

---

我想做的事情就是做過濾, 比如說我只想讓syslogd 紀錄
LOG_ERR以上的層級(就是只顯示0~3的層級) <== 對一般Application而言
KERN_ERR以上的層級(就是只顯示0~3的層級) <== 對kernel事件而言

要如何做到呢?

---

另外, 我還發現一件詭異的事情, 測試這兩個case時,
如果使用remote logging (指令: syslogd -R <ip>)
我發現application的訊息可以被傳到遠端,
但是kernel module所紀錄的訊息只能被紀錄在target端, 無法傳送到遠端!
不知道是什麼原因, 有人試過嗎?

---

OK~以上是我目前的測試和認知, 如果各位也有開發過syslog的話,
請給我一點建議和觀念上的指證, 謝謝!

8
當一份專案的程式碼 經過多人經手荼毒後, 可能會有一些"垃圾"存在?

比如說: 宣告, 但是永遠用不到的變數, 或是永遠也不會被呼叫到的函數!

它散佈在程式碼專案中....

這些通常都是 "前人" 所留下來的 code, 而前人通常都已經離職了!

除了一行行程式碼去trace之外, 我想知道的是各位是否知道有

沒有什麼工具或是什麼好方法可以找出這些垃圾?

9
我想寫個shell script, 開機時偵測硬碟後
要自動分割和格式化最後要掛載到/

目前問題卡在分割, 我只知道fdisk指令,
但是他是交談模式的, 假設我只有一顆hda要分割,
而且全部切割成hda1, 可以有方法一行指令就自動完成嗎?

10
雜七雜八 / Linux 桌布
« 於: 2005-06-22 23:34 »
Linux 桌布
有幾張debian的桌布做的不錯
有幾張好像有點走火入魔....哈哈!
http://www.easylinuxcds.com/wallpapers/thumbs5.shtml

11
官方網站的介紹...是蠻漂亮的啦!
http://www.nokia.com/nokia/0,,74866,00.html

===========================================

CNET新聞專區:Dinesh C. Sharma  2005/05/26

Nokia週三宣布推出一款可無線寬頻上網的口袋型網頁瀏覽器裝置,這也是該公司第一款以Linux為基礎的裝置,且沒有內建手機功能。

Nokia 770 Internet Tablet主要用來瀏覽網頁與讀取e-mail功能用,該手機製造商表示。裝置配備一個4英吋的水平觸控式螢幕,可放大縮小,並有螢幕鍵盤。Nokia表示,使用者可藉由無線熱點或者以藍芽連結手機來進行上網。


該裝置是採用以Linux為基礎的Nokia Internet Tablet 2005軟體,內含桌上型Linux與開放原始碼技術。安裝的軟體則包括網路收音機、RSS新聞閱讀器、影像觀看軟體與媒體播放器。

Nokia表示,公司將提供工具讓使用Maemo平台的開發人員能在未來的新版本與OS上工作。

該裝置預計在第三季於美國與部分歐洲市場上市,售價350美元。

手機製造商不斷推出各式可連網/讀取e-mail的智慧手機,而另一方面,運算裝置製造商則不斷縮小PC尺寸,並加上新功能。

「這是建立上網專用開放原始碼產品的第一步,」Nokia整合產品副總裁Janne Jormalainen表示,「未來我們還會定期釋出軟體更新,下一次軟體更新會在明年上半年,支援更多presence的功能,比如VoIP或即時傳訊。」(陳奭璁)

12
Study-Area 公開討論版 / 關於發問的標題
« 於: 2005-06-02 02:57 »
有人想過這個問題嗎?

是否提倡一下發問時寫標題應該明確一點...

其實我很不喜歡看到 "救命壓~" "急急..." "有人會嗎?"

"高手請看這邊"...之類的標題!

明明標題列可以寫很多字幹麻不用?

還是大家其實覺得還好~只是我自己太懶了! :roll:

13
雜七雜八 / 下了班..你還會想碰電腦嗎?
« 於: 2005-05-26 19:18 »
每天上班幾乎都面對電腦的人,

下了班之後...你們還會想碰電腦嗎?

14
本來想多標一台舊電腦來玩Linux,不過正巧看到這個...
我只能說什麼行業都有... :o

代客安裝多重併行作業系統
http://tw.f4.page.bid.yahoo.com/tw/auction/d8937428?aucview=search

15
雜七雜八 / [閒聊]有人可以翻譯這句話嘛?
« 於: 2005-05-19 14:41 »
最近每次看到netman大大的簽名檔都很疑惑?

代碼: [選擇]
甲: Linux? 我夠曉啦~~~
乙: 你又曉?!
甲: 哼! 唔通我寫過 kernel 又話俾你知咩?!


是廣東話嘛?我猜翻譯是:
甲: Linux? 我很懂啦~~~
乙: 你懂什麼?
甲: (最後一句到底是什麼?) :roll:

16
Dear all:

這是我很久以前玩Floppy-Linux時曾經參考的文章,
作者是Bruce Perens,之前是Debian 的主席,
以下是文章內容的描述:

Create a Busybox single-floppy Linux system that includes a kernel,
command-line environment and your application.

文章發表於Linux Journal,共分成三部份:

Building Tiny Linux Systems with Busybox--Part I

Building Tiny Linux Systems with Busybox, Part 2: Building the Kernel

Building Tiny Linux Systems with BusyBox, Part 3

======================================

另外,在Study-Area裡面,你還可以找到兩篇相關的文章:

redfox寫的: 如何製作簡易Floppy Liunx

以及黃敬群(Jserv)的: 親手打造 Floppy Linux 環境

17
各位先進好:

嵌入式系統已經廣泛地應用於我們的生活中,包括3C電子產品、交通系統、工業控制等等。

對一般人來說,嵌入式系統算是比較不容易入門的議題(通常也比較冷門..哈)

希望藉由成立這個討論版,讓各位可以很快地找到自己要的資訊,也可以和板上的高手交流!

不限Embedded Linux唷... :P

18
投票區:

http://phorum.study-area.org/viewtopic.php?t=31668

我相信成立新版可以讓大家更方便找到需要的資訊,

也可以提供一個討論交流的環境。 :D

19
各位好:

我發現板上曾經有人討論過Embedded Linux相關的議題,

我希望能將這些議題單獨出來成立一個討論版,

小弟並非這個領域的專家,只是剛剛入門的菜鳥新手,

如果各位不嫌棄...

小弟願意承擔版主的工作,藉此讓有能力分享經驗的人專心從事寫作及回答

20
發現有很多高手潛伏在站上,

希望能成立新版,讓大家有各交流和學習的地方!

21
NOVELL 對SUSE LINUX Enterprise Server 9

提供30 天免費的線上更新服務試用!

30天之後必須再從新註冊一次取得線上更新的帳號吧!

我比較想知道的是...如果我不使用線上更新...

超過30天之後,還是可以使用嗎? :roll:

他說的試用...是'試用線上更新' 還是 '試用Suse Enterprise Server' ?

最近想玩玩看'壽司'...

22
目前我看過的文章是:
/home 和 swap 可以共用
因為想省一點空間,
想知道還有哪些磁區可以獨立分割出來共用!

頁: [1]