2013年2月26日 星期二

ZeroMQ for RaspberryPi

自從在開發機上準備好 toolchain 後,就一直沒有實際找 project 嘗試編譯給 RPi 使用。而最近 Lab 的 Project 也需要使用到 ZeroMQ,因此本次就先以 ZeroMQ 當作練習對象。

在開始之前,請先確定有下列檔案:
1. zeromq-2.2.0.tar.gz(我以 Stable release 2.2 版本為範例)
    下載位置:zeromq
2. util-linux-2.22.2.tar.gz(ZeroMQ 編譯時需要 uuid-dev 相關函式庫)
    下載位置:util-linux
3. toolchain for RPi
(以 Raspberry Pi:Cross-compiler (update) 中所下載的 32 bits 為範例)
    由於 Raspbian 有支援 hardfp,
    因此使用的 toolchain 為官方提供的 toolchain 中的 arm-bcm2708hardfp-linux-gnueabi

首先,先將 toolchain 與環境參數設定好:

我將 toolchain 安裝在
/home/bkdragon/rpi/rpi_cross_compiler_x86/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi

1. 登入 root 身分
$ sudo -i
2. 設定 PATH
$ export PATH=$PATH:/home/bkdragon/rpi/rpi_cross_compiler_x86/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin
以上便設定好 toolchain。


接著編譯 uuid-dev 相關的函示庫,

編譯 ZeroMQ 時需要用到。


1. 切換目錄至 util-linux-2.22.2.tar.gz 所在位置
$ cd /tools
2. 建立暫時安裝目錄
$ mkdir util-linux-tmp
3. 解壓縮 util-linux-2.22.2.tar.gz
$ tar -xzvf util-linux-2.22.2.tar.gz
4. 進入 util-linux-2.22.2
$ cd util-linux-2.22.2/
5. 執行 configure 進行配置
$ ./configure -without-ncurses -host=arm-bcm2708hardfp-linux-gnueabi -disable-login -disable-su -prefix=/tools/util-linux-tmp
6. 開始編譯
$ make
7. 執行安裝
$ make install
8. 切換到 util-linux-tmp
$ cd /tools/util-linux-tmp
9. 將 lib/ 目錄底下的 libuuid.a libuuid.la libuuid.so libuuid.so.1 libuuid.so.1.3.0 複製到 toolchain 的 lib 中
$ cp lib/libuuid* /home/bkdragon/rpi/rpi_cross_compiler_x86/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/lib
10. 將 include/ 目錄底下的 uuid 目錄複製到 toolchain 的 include 中
$ cp -r include/uuid /home/bkdragon/rpi/rpi_cross_compiler_x86/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/include

以上步驟設置完 uuid-dev 當相關函式庫;


接著開始編譯 ZeroMQ 的函示庫!


1. 切換目錄至 zeromq-2.2.0.tar.gz 所在位置
$ cd /tools
2. 建立暫時安裝目錄
$ mkdir zeromq-2.2.0-rpi
3. 解壓縮 zeromq-2.2.0.tar.gz
$ tar -xzvf zeromq-2.2.0.tar.gz
4. 進入 zeromq-2.2.0
$ cd zeromq-2.2.0/
5. 執行 configure 進行配置
$ ./configure -host=arm-bcm2708hardfp-linux-gnueabi -prefix=/tools/zeromq-2.2.0-rpi
6. 開始編譯
$ make
7. 執行安裝
$ make install
8. 所有 ZeroMQ 的相關檔案會被放置在 /tools/zeromq-2.2.0-rpi 底下,將整個目錄把包
$ cd ..
$ tar -czvf zeromq-2.2.0-rpi.tar.gz zeromq-2.2.0-rpi/
9. 將 zeromq-2.2.0-rpi.tar.gz 複製到 RPi 後,解壓縮到 /usr/local 中,並執行 ldconfig
(on RPi) $ cp -r * /usr/local
(on RPi) $ sudo ldconfig

以上即完成在開發機上的 ZeroMQ for RPi 編譯動作。
之後再 RPi 上編譯 ZeroMQ 的程式測試是否正常運作!

2013年1月22日 星期二

Raspberry Pi:安裝OS、簡易設定 (update)

做此步驟前,請先準備以下工具:
  1. 4 GB以上的SD卡(點選這裡,查看是否相容RPi)
  2. SD card reader

下載並安裝 RPi OS image 進 SD Card

這邊我以 Raspberry Pi 官方推薦初學者使用的 Raspbian “wheezy” 作為範例,並以 Windows 作為安裝 OS 的平台,Linux 和 MAC OS 請參考 官方Wiki

1. 首先至官方網站的 Download 下載 Raspbian “wheezy” 的 ZIP 檔,解壓縮得 ISO。
2. 將 SD 卡先格式化。
3. 下載 Win32DiskImager 並解壓縮。
4. 執行 Win32DiskImager。

5. Image File 選擇欲安裝進 SD 卡的 ISO(Ex:D:/2012-10-28-wheezy-raspbian.iso)。
6. Device 選擇 SD 卡的位置。
7. 按下 Write,喝杯咖啡,回來就安裝好了!

以上步驟沒有難度,之後只需要插上 Raspberry Pi,插上周邊啟動它。

簡易設定

而將 SD 卡插上 Raspberry Pi 後,第一次啟動會跳出 config 畫面,可依照自己的需求調整。
如果你錯過的這個 config 畫面,可在 command line 執行:
$ sudo raspi-config
  • info:顯示該 tool 資訊。
  • expand_rootfs:當你的 SD 卡容量有 4GB 以上時,安裝完成 OS 後你會發現到實際上能使用的空間只有 2GB,選擇此項目可讓可使用的空間擴大到整張 SD 卡的容量。
  • overscan:調整螢幕輸出解析度。
  • configure_keyboard:設定鍵盤配置。
  • change_pass:修改密碼。
  • change_locale:修改地區。
  • change_timezone:修改時區。
  • memory_split:修改記憶體分割。
  • overclock:超頻選項。
  • ssh:如果需要以 ssh 的方式使用 RPi,請選此選項啟動 sshd。
  • boot_behaviour:修改 boot 後的動作,可直接自動執行 X window。
  • update:更新 raspi-config 工具。

預設帳號密碼

Raspberry "wheezy" 這個 OS 的預設帳號:pi,密碼:raspberry。
不是每一套都是此設定,請參考 OS 發布版本的說明。

啟動 X Window

在 command line 執行:
$ startx

針對DVI螢幕調整(option)

hdmi_group=2
hdmi_mode=82
hdmi_force_hotplug=1

2012年12月24日 星期一

Raspberry Pi:Cross-compiler (update)

有鑒於 Raspberry Pi 的 CPU 和 RAM 的效能限制,在編譯大型檔案時需要耗費相當長的時間。(像我自己就傻傻地直接在 Raspberry Pi 上編譯 ZMQ...)因此通常在開發嵌入式系統的程式時,通常都會在其他電腦上透過 Cross-compiler 的方式編譯給板子執行的程式。

官方的 Wiki 的 Cross-compiler 說明中,已經有提供了官方預先 build 好的 cross-compiler 程式提供開發者使用,省去大量時間去下載、設定、編譯 crosstool-NG、Linaro GCC,之後才得到能用的 cross-compiler。

在此就簡單說明(真的超簡單)如何在 Linux 底下,建立 Cross-compiler 環境,幫我們可愛的 Raspberry Pi 編譯給它執行的程式!


※注意※
經測試後,Pre-build 的 cross-compiler 僅適用於 32-bit Linux,64-bit 需自行手動編譯。


1. 用 Linux 系統下指令抓取 tools
$ git clone git://github.com/raspberrypi/tools.git

2. 下載完後,依需求設定 PATH 環境路徑,方便往後呼叫程式。
$ export PATH=$PATH:/home/yourname/<cross-compiler path>/bin


使用範例


做完上面步驟後,進入 tools/arm-bcm2708/ 目錄會發現有三個子目路,分別為不同參數所產生出來的 cross-compiler,請依照需求,以及 RPi 所使用的 OS 做選擇。

首先我先寫一個簡單的 Hello World,儲存在 /tmp/hello.c,之後編譯程式
$ arm-linux-gnueabihf-gcc /tmp/hello.c -o hello

完成後和一般 gcc 一樣,會產生 hello 的可執行檔,不過這是要給 Raspberry Pi 執行的程式。Raspberry Pi 所使用的 CPU 是 ARMv6,除非你的 cross-compiler 環境和 Raspberry Pi 雷同,不然這隻程式是沒辦法執行的。

之後請複製到 Raspberry Pi 中,個人是以 scp 進行遠端複製,執行!


看到 Hello World,表示程式碼成功透過 cross-compiler 將程式編譯成給 Raspberry Pi 執行的程式。


手動建置 Cross-compiler


如果覺得這個方式真的太過於簡單、想嘗試練習自行建置 Cross-compiler,或是和我一樣,是以 64-bit Linux 做為開發環境的話,請參考以下網頁建置 cross-compiler 編譯環境。

1. 官方 Wiki (RPi Linaro GCC Compilation

2. How to build a cross compiler for your Raspberry Pi

2012年12月20日 星期四

Ubuntu:apt-file 套件搜尋小技巧

今天在編譯 Raspberry Pi 的過程中,缺少了不少編譯所需要的套件。對 Linux 不熟的我,通常看到這些缺少的元件,都不知道從何下手,而在搜尋過程中發現到一個利用 apt-file 來尋找特定元件包含在哪個套件中,實際應用節省了我不少的時間。

我在 Ubuntu 12.04 寫以下範例。

1. Ubuntu 預設是沒有安裝 apt-file,先把它安裝起來
$ apt-get install apt-file

2. 安裝完成後,更新套件訊息
$ apt-file update

3. 搜尋你想要的檔案,如:curses.h
$ apt-file search curses.h

4. apt-file 會列出套件名稱,以其底下符合條件的檔案名稱,從中找到所需要的。


5. 紅框框起來的部分就是我要的
$ apt-get install libncurses5-dev

問題解決!

2012年12月19日 星期三

Raspberry Pi:Setting up Static IP

如果有和我一樣的需求,要讓 Raspberry Pi 使用靜態 IP,而非透過 DHCP 方式取得 IP,可以仿照 Linux 的方式設定。

$ sudo vi /etc/network/interfaces

在文件中找到下列該行,並插入 # 註解掉。
#iface eth0 inet dhcp

在下方插入以下內容
iface eth0 inet static
address <你要給 RPi 使用的 IP>
netmask <子網路遮罩>
gateway <Gateway IP>
Reboot Raspberry Pi 後完成設定!


修改DNS server

$ sudo vi /etc/resolv.conf

2012年12月17日 星期一

Ganglia on Ubuntu server 12.04 LTS (update)

  Ganglia Monitoring System 是一套用來監視 grids 或 clusters 的可擴充性分散式系統監視工具軟體,結合了web-frontend網頁介面,使主機管理員可以在遠端,以閱覽網頁、觀察圖形的方式,監視每個 grids 或 clusters 的系統資訊,包括CPU、MEM、網路流量、process數......等等。
  這是一套 BSD-licensed 的 open source software,由 Berkeley 大學所開發的。許多 Linux 發行版的套件庫皆有提供 ganglia 的套件,Ubuntu 也不例外。

2012年12月6日 星期四

Raspberry Pi Model B

我絕對不會說這是早上離開宿舍時,腳被某個小箱子絆倒;
或是騎車到學校路上,被叼著箱子的狗跟著跑。(以上開箱文老梗)
因為這是...... 從覆盆子枝幹上摘下來的。(被打)

今天早上終於拿到了實驗室新玩具:Raspberry Pi Model B!
不過現在還沒有時間和周邊可以測試,處裡完一些工作後再來測試!
Raspberry Pi真的很小片,跟我的HTC Aria差不多大小而已!

先簡單放上兩張簡單的開箱圖,手機照相解析度差,傷眼抱歉。