Porting FLTK on a embedded ARM platform

November 9, 2007 2:42 pm

前言:這禮拜以來日夜狂操,今早總算把廠商總公司派來的人送走,這週末應該可以好好休息一下了。距離前一篇簡述Gtk/DirectFB的日子居然已經過了半年,但現在看起來要在年底前結案似乎希望渺茫啊,昨天廠商想把我丟去米國當台勞,不知道該不該答應,是可以多賺一點貼補家用啦,但也要看找不找的到理由讓老闆放人就是了。話說我把FLTK porting到使用中的ARM平台也有一段時間了,最近也一直寫GUI部份,使用起來還算平順,想想也可以把一些移植的細節記錄一下,免得以後要拿出來用又忘了。

硬體平台:Cirrus Logic Arm processor
Linux kernel:Cirrus Logic提供,官網可下載

最底層的window system我採用microwindows/nano-X,最根本的原因就是免費(-_-),以前的老闆也曾經用來開發過一些程式,但感覺效能不太好,不知道是他程式沒寫好還是說microwindows先天就不良,不過microwindow的架構很簡單,如果需要自己動手修改的也不是很困難,比方說前不久寫過關於怎麼新增touchscreen driver,除了driver之外後來為了配合硬體行為還另外修改了event處理的相關程式。

microwindows可在官網的ftp下載(應該是做Pixil的Century soft提供的),直接抓最新版的0.91即可。解開後進到src子目錄修改’config’檔,或者也可以從Configs目錄複製一份出來改,我記得我是用config.fb。更動的選項不多,僅列出部份項目:

  • ARCH = LINUX-ARM
  • LINK_APP_INTO_SERVER = N (預設關閉,但我可能會打開這個選項試試看能不能提升速度)
  • 若要支援JPEG與PNG圖形格式請先準備好相關library(包含zlib)
  • 滑鼠與鍵盤設定,至少會選一個吧

改好就編譯,應該不會失敗才對。編出來的東西會需要用到nano-X與libnano-X.so,若沒有開啟LINK_APP_INTO_SERVER,nano-X必須先跑在背景執行。可以先拿demo目錄裡面的程式跑跑看,不過我猜你不會想要用nano-X API來開發程式的,太陽春了,所以我們還需要另外一套widget class系統,我選的是FLTK。

FLTK可以在X11/MSWindows/MACOS上執行,但是在embedded環境裡X11還有可能會移植,後兩者大概就不用想了。現在既然採用microwindows,勢必要有個中介的界面讓使用X11 API的FLTK可以在上面執行。到目前為止有兩個選擇,一個是直接與microwindows相容的FLTK版本FLNX,或是用microwindows原作者Greg開發的NXLib。

FLNX可以在microwindows的ftp裡面找到,最新版本(2003 -_-)是0.18。configure選項沒多少:

./configure --host=arm-linux --prefix=/usr/local/arm/ –with-microwin=/blahblah/microwindows-0.91/src

進去src目錄打’make’把libfltk.a做出來,然後回上一層再make一次可以建出fluid(直接在根目錄編譯它會先跑去編fluid,這時候又還沒有library給它連結)。安裝後你就可以開始寫FLTK的程式了,不過裝起來試著寫了一些程式後我就決定不用這個版本,因為它的版本(1.0.7)跟現行的1.1.x 差異太大了,而且我需要用一些圖形相關的class也都沒有﹔所以你若只是需要寫簡單的視窗元件程式,沒有貼jpeg/png圖需求的話,那FLNX也算是夠用了,否則你就繼續往下看吧。

(好累,讓我拖個搞……)

16 個回應 to “Porting FLTK on a embedded ARM platform”

阿民 的留言 於 November 9, 2007

YK果然是人才啊!
必殺仕事人(^-^)b

ykhuang 的留言 於 November 10, 2007

民董當了老闆才是人才啊….

阿民 的留言 於 November 10, 2007

只要有心 人人都可以是負責人~

fyl 的留言 於 November 12, 2007

加油,好想往下看啊,呵呵。
只修改config肯怕不行吧,我用的是FC7来编译的,一直就没有。可以交流下吗?
msn:yinglin21sn@yahoo.com.cn

YK Weblog » [續] Porting FLTK on a embedded ARM platform sent a pingback 於 November 14, 2007

[…] 接前篇 […]

smikid 的留言 於 July 22, 2008

hi ykhuang:
我編譯了microwindows for arm, download到目標板上執行demo, 出現以下訊息
/demo: relocation error: /usr/lib/libnano-X.so: undefined symbol: __divsi3
不知那裡出錯了
謝謝

ykhuang 的留言 於 July 23, 2008

smikid,

這我沒遇過,不過看起來與microwindows無關,我有找一段相關資料:

“大概原因就是由於gcc-cc1導致的。一般來說,編譯過程中,生成.o文件後,象___divsi3這些gnulib或gcclib應該直接link到.o文件中。但是,如果prefix前綴設置不對的話,有可能找不到gcclib。所以link這些函數的過程只能到gcc-ld這一步了”

smikid 的留言 於 July 23, 2008

hi ykhuang:
感謝, 我再試看看那裡出了問題

smikid 的留言 於 July 23, 2008

hi ykhuang:
我在build code時出現很多以下的訊息, 會跟這個有關嗎?
make[2]: Circular /home1/tar/microwindows-0.91/src/lib/

ykhuang 的留言 於 July 23, 2008

smikid,

那是沒有關係的,我覺得只是microwindows的source layout跟Makefile沒做好而已

smikid 的留言 於 July 24, 2008

Hi ykhuang:
我另外去一個網站抓了一包 Toolchain來build code, 不過出現以下的訊息
/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu/bin/../lib/gcc/arm-9tdmi-linux-gnu/3.4.1/../../../../arm-9tdmi-linux-gnu/bin/ld: /tar/microwindows-0.91/src/bin/nanowm: hidden symbol `fstat’ in /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu/bin/../lib/gcc/arm-9tdmi-linux-gnu/3.4.1/../../../../arm-9tdmi-linux-gnu/lib/libc_nonshared.a(fstat.oST) is referenced by DSO
請問這是那裡出問題呢?
謝謝

smikid 的留言 於 July 24, 2008

我發現是我改了OPTIMIZE造成的ERROR,改回來就好了, 不過執行結果跟昨天一樣undefined symbol: __divsi3
, 生命又燒掉了一天…..

ykhuang 的留言 於 July 25, 2008

smikid,
這問題我沒碰過,所以就我會採取的步驟給你建議
先去看__divsi3所在的library。我手邊有的arm toolchain看起來是在libgcc_s.so.1,所以執行環境中必須有這個library,你可以先檢查你的開發版上安裝的library檔案看看有沒有包含這個symbol,如果你的開發版上的library的確有這個symbol存在,卻還不能動態連結的話再來找尋是否為其他原因造成。

smikid 的留言 於 July 25, 2008

hi ykhuang:
libgcc_s.so.1在開發板上是存在於/lib下, 而且也包含__divsi3這個symbol
謝謝

smikid 的留言 於 July 25, 2008

我將libgcc.a跟原來的libnano-X.a link在一起, 就可以run了, 不過我不知道這樣做算正確的嗎?
$(LD) -shared -o $@ –whole-archive /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a $^
繼續來搞FLTK……

ykhuang 的留言 於 July 26, 2008

smikid,
恭喜你可以執行nano-X了,我想toolchain的安裝上可能有什麼問題,因為這個問題理論上跟nano-X應該是無關的…

要留言乎?