在Ubuntu上搭建E-Ink AM-100開發環境

E-Ink的AM-100 Active Matrix Prototyping Kit主要由4塊板組成:
6英寸Active matrix display
Apollo顯示控制模塊
Gumstix單板計算機(基於Intel XScale PXA 255)
串口適配器

一、編譯Gumstix
1,安裝必須的軟件包。
>sudo apt-get install build-essential libncurses-dev bison flex texinfo zlib1g-dev gettext
裝好後尤其要記得檢測一下makeinfo工具是否可用,我就是在這裏卡了好幾天。

2,安裝Subversion,已經裝過的跳過。
>sudo apt-get install subversion wget subversion-tools

3,解壓縮AM-100配套光盤上的壓縮包thinspace-1-00.tar.gz到一個目錄下。
我是放在/home/dmbi/thinspace下。也可以通過CVS連到EInk網站去獲取最新的thinspace(密碼是anonymous):
>cvs -d:pserver:[email protected]:/home/cvsroot/ login
>cvs -z3 -d:pserver:[email protected]:/home/cvsroot/ co thinspace

4,獲取Gumstix,把它放到thinspace目錄的子目錄下,這裏我是放在thinspace/gumstix目錄下的(am100soft文檔要求下載643版本的buildroot,不過不一定非要這個版本的)。
>cd /home/dmbi/thinspace
>mkdir gumstix
>svn co -r 643 http://svn.gumstix.com/gumstix-buildroot/trunk gumstix(備註:用export代替co也可以)
PS1:光盤上附帶的am100soft文檔裏給出的svn服務器地址是http://svn.rungie.com/svn/gumstix-buildroot/trunk,試了一下連不上去。
PS2:雖然不一定要用643版本的,1432版本的buildroot我試過也可以燒入開發板正常運行,但是AM-100開發板上的Flash容量只有4M,較新的buildroot最終生成的文件系統大約有3.5M,解壓縮之後Flash只剩下60K的空間了,不夠mount MMC卡,那些測試程序如果放在MMC卡上也就無法執行了,只能預先拷入thinspace/gumstix/build_arm_nofpu/root/bin下,在make打包進根文件系統。

5,buildroot在make的時候默認是不生成C++交叉編譯器的,因爲在test程序是用C++寫的,所以我們先設定make的時候生成g++。
如果你下載的buildroot版本小於等於775,進入/home/dmbi/thinspace/gumstix目錄,打開makefile,找到“INSTALL_LIBSTDCPP:=false”,改爲“INSTALL_LIBSTDCPP:=true”即可;
如果buildroot版本高於775,那麼makefile裏已經找不到INSTALL_LIBSTDCPP這個變量了。改用如下方法打開C++選項:
>cd thinspace/gumstix
>make menuconfig
進入Toolchain Option菜單,往下翻,找到“Build/install c++ compiler and libstdc++?”,設爲Enable,保存退出。
然後刪除之前的gcc設定:
>rm toolchain_build_arm_nofpu/gcc-*-final/.configured
接着命令行輸入:
>grep LIBSTDCPP .config
如果顯示“BR2_INSTALL_LIBSTDCPP=y”,說明C++選項已經正確打開了。
注意:以上設定做完後,make可能仍然會出錯,保險起見,make之前先刪除目標目錄:
>rm -rf toolchain_build_arm_nofpu

6,編譯toolchain和內核。
因爲demo程序需要內核中的一些功能,先添加進去:
>cd gumstix/build_arm_nofpu/busybox-1.00
>make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
選中以下幾個選項:
Archival Utilities: bunzip2
Coreutilities: usleep, wc
Miscellaneous Utilities: string, time
Linux System Utilities: hexdump
最後開始編譯整個根文件系統:
>make DEPMODE=/bin/true
這個時間比較久,因爲需要下載一堆東西,對於643版本,這些東西默認下載在gumstix-buildroot/sources/dl目錄下,對於較新的buildroot,下載在gumstix-buildroot/dl下,這些東西可以保存起來下次編譯就不用下載了,要注意buildroot的版本不同,所下載的package的版本也不同,不可混用。編譯完成後,buildroot目錄下會出現root_fs_arm_nofpu、uboot.bin、uboot.srec三個文件。
PS1:如果你所用的是Ubuntu系統,make到執行sh patchin.sh時會出現問題,報告“(” unexpected,這是因爲Ubuntu用dash代替了bash,dash是一個簡化版的shell,解決的辦法就是改用bash:
>cd /bin
>sudo rm sh
>sudo ln -s bash sh
然後回到buildroot目錄再次執行make。
PS2:因爲643版本較老,所以有些package的下載鏈接已經失效了,如果出現無法下載的情況,有兩種解決辦法,一時去google上搜,手動下載壓縮包,下載好後放到%gumstix-buildroot%/sources/dl下就可以了,但是有一個壓縮包比較特殊,就是hostapd-0.3.9.tar.gz。我發現這個壓縮包每次make時都要連上internet去下載,即使預先下載放到dl目錄下也沒用。一勞永逸的辦法是去搜一個確保可下載的鏈接,然後修改%gumstix-buildroot%/hostap.mk文件,把HOSTAP_URL替換成可用的鏈接(注意後面不要把壓縮包的文件名也加上),譬如我設成:HOSTAP_URL=http://ftp.escom.bg/Linux/wireless。
PS3:對於643版本,編譯出來的根文件系統文件名是root_fs_arm_nofpu,對於較新的版本,編譯出來的根文件系統文件名是rootfs.arm_nofpu.jffs2

7,編譯測試程序
首先把編譯出來的交叉編譯器arm-linux-gcc、arm-linux-g++等加入環境變量PATH:
>cd /home/dmbi/thinspace
>source add_gumstix_tools.sh
然後編譯測試程序:
>cd display_tools
>make clean
>make
>cd ..
>cd gumstix_tests
>make clean
>make
編譯完成後會在這兩個目錄下生成幾個可執行文件。

8,燒入開發板。
首先要配置minicom,進入miniconm按Ctrl+A再按Z進入設置菜單。先按P設置串口參數爲115200 8N1。保存退出。再次返回主菜單,按O,選擇Serial port setup,進入子菜單按A選擇串口設備,這裏我設成/dev/ttyS0,表示串口1,按F選擇Hardware Flow Control爲No(否則鍵盤會失效),保存退出後重新啓動minicom。
取出開發板自帶的MMC卡,將以下幾個文件拷入MMC卡:
把編譯好的這幾個文件拷入MMC卡:
root_fs_arm_nofpu(對於較新的buildroot應該是rootfs.arm_nofpu.jffs2)
../gumstix_test/gcc_test
../gumstix_test/cpp_test
../gumstix_test/run_test.sh
../gumstix_test/check_utils.sh
把MMC卡插入開發板,打開終端運行minicom,插上開發板電源,按任意鍵進入uboot命令行模式,輸入以下命令:
GUM> mmcinit
GUM> fatload mmc 1 a2000000 root_fs_arm_nofpu
GUM> era 1:2-31
GUM> cp.b a2000000 40000 ${filesize}
GUM> boot
用root賬戶登錄,密碼是gumstix,mount MMC卡:
# mount /mnt/mmc
# cd /mnt/mmc
# ./run_test.sh
# ./check_util.sh
兩個測試都應該正確通過,否則請檢查前面的相關步驟。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章