ViewML交叉编译关键词: ViewML ARM
ViewML : Open source web browser for embedded linux system就是寫Microwindow的作者,的另一個計畫(?)。他發現雖然opensource 的internet browser雖然已經有20幾種,但是大多很大,或是需要其他package。要不然就是功能太陽春,無法parse複雜的HTML tag。 所以他決定要作一套新的,可以用在embedded system,而且功能又OK的internet browser。 他決定要:
ViewML 分為以下module : ViewML Browser Application Layer 用FLTK寫的application user interface。包裝起整個ViewML程式。處理user interface和network/local file access 介面。 W3C WWWLib 負責asychronous network i/o 和HTTP get function。這是WWW 協會的標準WWWLib。有點大,將來可能會自己重寫。 KHTML View/Widget 就是KDE 1.0 HTML Widget code。KHTML Widget 負責parse HTML,繪圖,但是scroll 則交由View去作。 Qt Compatiblity Layer 用FTLK 將所有KHTML用到的Qt function call寫出來,讓KHTML能夠不修改code,正常的執行。不直接拿Qt來用的原因是size問題。 IMLIB image library gnome的image library。包含自動偵測image file format,decodeC 和show image。 FLTK Application Framework 有兩種版本: 給Win32, X 用的標準版FLTK,和給microwindow的nano-X用的重新寫過的FLTK。 因為利用了open source,完成的ViewML browser的code size只有800k,run time memory requirement也只有2M。整體,加上mircrowindow,只需要2.5M。 整個project是open source的。 project page在 www.viewml.com (但是已經變成pilix了) freshmeat的ViewML也只有到0.21版。 真正的ViewML位置在PILIX ftp download site上 (ftp://ftp./pub/pixil)< >看來原作者很不爽繼續支援這個計畫,ViewML目前附屬在PIXIL 計畫(產品)下。在PIXIL 的developer mailing list上可以看到作者已經無意free support這個計畫。-- 甚至port 到new compiler version也不願意。對於一大堆大陸人的(Is anyone help me cross compile viewML for arm) 問題也不願回應。 build ViewML : 需要的library有 一般:
解開viewml,在目錄中run .confiure,並且加入參數 ./configure --with-microwin=[Microwindows dir] --with-fltk=[FLTK dir] --host=[prefix]Microwindows dir 是microwindws 所在目錄 FLTK 也是一樣 prefix是toolchain的prefix,像arm-elf libwww 不知道要怎樣在uclinux 下build。 紀錄一下cross build的一些option. ARMTOOLSPREFIX = arm-linux- libwww的installation 下有說明 Specifying the System Typeconfig.sub 是...,看了後,好像要設arm-linux : ./configure --target=arm-linuxbuild 出來後,看看Makefile,好像沒又設對gcc。所以用:<>CC=arm-elf-gcc ./configure --target=arm-linux卻看到 cannot find host,所以host也要指定。因為不知道要指定那一種所以用./configure看看...host system type... i686-pc-linux-gnu。 這次用 CC=arm-elf-gcc ./configure --target=arm-linux --host=i686-pc-linux-gnu試試..但是output中checking for gcc 還是gcc,不是arm-elf-gcc,所以check cross-compiler 還是no. $ echo ${CC-cc}這個是正確的。 是config.cache的關係嗎? 把w3c-libwww整個delete掉,untar,再configure一次,OK !!正確detect出cross compile了。 接著作 $ makeError : Making all in xmltok是share library的問題? 改configure, disable share : ./configure --host=i686-pc-linux-gnu --prefix=~/libwww --disable-shared 2>&1 | tee outputOK!! 所以應該是shared library的問題。 因為ViewML沒有說一定要用shared library,所以先用static linking試試。 ... make是過了,但是還沒install. 這樣的configure option 不能install 吧,因為沒設prefix,所以會裝在default folder裏(/usr/lib)。 ...其實前一次會過是因為沒有設CXX=arm-elf-g++ 變數,所以checking variable size時都會OK。 使用: CC=arm-elf-gcc CXX=arm-elf-g++ ./configure --host=i686-pc-linux-gnu --target=arm-linux --prefix=/home/charles/magsi/libwww --disable-shared 2>&1 | tee output就會發生... configure: error: can not run test program while cross compilingGoogle的結果,這一篇似乎有一個解決的方法... 這是因為autoconfig沒有辦法知道target platform的char size,所以發出error(autoconfig利用run test program來偵測machine的var size)。 解覺的方法就是手動囉,因為只有build的人才會知道taget system的char size。 改configure...找到 echo "configure: error: can not run test program while cross compiling" 這一行,參考一下這一段是要 設定那一個變數,自己寫進去,改為: ac_cv_sizeof_char=1找一下所有這個message出現的地方,修改對應參數到正確的值... 因為資質弩鈍,所以有些type不知道,像arm的long type size是....?分別印出 char 1 char* 4 int 4 long 4 還要check time_t 是不是long : 就是time_t 的size和long 一不一樣 double 和long double是不是一樣: 寫給target board test的code是: 輸出的結果是: char:1實際上還是不知道long_double這一個選項是要設成yes還是no... FTLK 一樣,解開。 README中說明INSTALL process:有說明configure時如果不是用g++,要指定CXX variable。gcc要指定CC variable。 $ CXX=arm-elf-g++OK。正確check出cross compile。 $ makeError !!! === making fluid ===這個.... 應該要看一下flnx的INSTALL.. 和libwww的方式不一樣,fltk 下的Makefile包含了config,所以直接在Makefile裏修改,加入configure的option。 但是還是一樣的錯。 真奇怪,不就是要build libfltk嗎?為什麼不知道要如何build libfltk ? 這是因為libfltk.a 是由src 目錄build出來,src目錄有錯。所以libfltk沒有build出來。 所以要先查src目錄make的錯誤... ....是找不到iostream.h... 設定-I option 到makeinclude 中 -I/home/charles/magsi/armutils_2.5.91.0/build_arm/STLport-4.5.3/stlportOK。但是出現putenv( ) undeclare!!!。 這是因為stdlib.h include不正確,一樣,在剛剛的-I option 之前,要指定uclibc 的include 路徑,讓arm-elf-g++先去include uclibc的stdlib.h,所以makeinclude的-I option 要加上另一項(在STLport option 之前... -I/home/charles/sigma/armutils_2.5.91.0/build_arm/uClibc -0.9.26/include再build.. 還是有錯,說是filename_list.cxx中有一個cast不正確。到 source file中去看。是platform dependent code。在uclinux下應該要用linux 的code吧,需要define "linux",所以再到makeinclude中加入.. -DlinuxOK!! src folder build OK. 然後是fluid folder的問題了.... internal error--unrecognizable insn:Google 一下... Hit the WALL !!! 原來是cross-compile 太複雜的C++ code時,會出現的error,mailinglist上有所謂的"unrecognuzabgle-insn.path",但是都是失效的link ! 有兩個解決方法: 1.upgrade gcc 2.修改code 修改code好了@_@... 所以把出現error的function找出來,mark 掉一些section,找找看是那一個instruction發生問題.. 發現...竟然是local variable array 的size太大!!! 把 MAXSIZE 改小就可以,--- 改到256後,pixmap_image::pixmap_image 沒錯。 --- 也試過用new 也可以過,但是要注意 return 時要free。 改為gif.cxx出錯!! gif.cxx 裡面只有一個function : gif2xpm,因為error message的內容和上一個有一點類似,所以猜是不是local array size too large,果然找到-- 有兩個4096 的array,改成100後OK。 fluid 都build過了,link時出現"cannot find -ljpeg". 猜測是沒有jpeg library,在viewml的ftp裏好像有看到...jpegsrc.v6b.tar.gz,google一下發現這是有名的jpeg-6b 版本library。 有關cross-compile的也只有... ./configure ,修改compile to sh8-linux-gcc (是sh8的說明)。 解開source 後,裡面有install.doc, ...好像uClibc也有port libjpeg... not sure-- 結果沒有 將libjpeg cross build好 - ref http://checko./2006/02/cross-compile-libjpeg.html 繼續build flnx... compile 都過了,剩下link error : 找不到rint( ) - 屬於libm。 雖然uClibc中有libm(否則link會complain: 找不到libm),但是卻找不到rint( ), 自己寫一個測試程式用cross-compile build試試,結果真的找不到。 到lib,用 $ arm-elf-ar t libm列出libm中所有module,沒有s_rint.o <-這是rint()所在module。 所以查一下uClibc的Makefile為何沒有把s_rint( )納入... 在uClibc-0.9.26/libm/Makefile中看到 因為定義 DO_C99_MATH沒定義,所以沒將s_rint.c加入source list。 所以手動將s_rint.c加入source list中,重新build uClibc (因為make 下有uClibc.mk,所以打 make uclibc 就可以只build uclibc) 完成後再用" arm-elf-ar t libm" 看,s_rint.o 已經在libm中。 回到flnx, make --- fluid 已經OK, 出現test folder 的error : 一樣是 " keyboard_ui.cxx:559: internal error--unrecognizable insn: " 看了一下,大概是button太多了,所以刪掉所有的button. build OK!! 應該可以測試一下... 在target上.... 不會跑 : bad magic/rec, 這個是沒有作elf2flt的原因, 修改 Makefile,在 linker, loader rule加上 : -Wl,-elf2flt="-s32768".rebuild,注意exe file要chmod a+x 才能執行。 # posted by CheckoBlog : 2:26 下午 0 comments links to this post |
|