作者 主題: [學習筆記] 把你的 Embedded Linux 專案搬到 CoLinux 上吧!  (閱讀 8836 次)

0 會員 與 1 訪客 正在閱讀本文。

andrew

  • 實習板主
  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
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)
find /my_brain type sleepy -exec rm -rf {} \;