시스템 개요
Host
CPU : x86
O/S : Fedora 7
Target
CPU : A&W6410(S3C6410)
O/S : Linux 2.6.21.5
Kernel Image, Filesystem Image : http://juncon.tistory.com/39
사용된 패키지/라이브러리
DirectFB-1.2.8
DirectFB-example-1.2.0
Gtk+-2.12.11
glib-2.16.5
atk-1.23.5
libjpeg-6b
libpng 1.2.31
freetype-2.3.7
expat-2.0.1
fontconfig-2.6.0
tiff-3.8.2
pkg-config 0.20
pixman-0.10.0
cairo-1.6.4
pango-1.20.5
libxml2-2.6.30
curl-7.18.2
icu4c-3.8.1
sqlite-3.6.2
openssl-0.9.8h
libgpg-error-1.6
libgcrypt-1.4.2
libxslt-1.1.24
tiff-3.8.2
WebKit-r36309
빌드를 위한 시스템 구축
Host
빌드는 Fedora 7, Fedora 10 전체설치 버전에서 테스트 하였다. 다른 시스템에서도 빌드가 가능하지만, Fedora 7을 권장한다. (Redhat 9부터 Fedora 4~Fedora 10까지 해보았지만 Fedora 7이 가장 안정적으로 크로스컴파일이 되었다.)
gpref 설치
빌드시에 gperf패키지가 필요하다. 간단히 yum을 이용하여 설치한다.
# yum –y install gperf
관련 파일 준비
빌드를 위하여 툴체인, WebKit소스, 패치등을 다운받는다. (파일이 필요하신 분은 댓글 남겨주세요~)
1. WebKit_toolchains_20090506_anw6410.tar.gz à 툴체인
2. WebKit-r36309_20090506_anw6410.tar.gz à WebKit 소스
3. cairo-1.6.4-patch.tar.gz à cairo-1.6.4 Patch
경로 설정
본 문서에서는 아래의 경로에서 작업한다.
기본 디렉토리 : /home/juncon/webkit
WebKit 소스 : /home/juncon/webkit/WebKit-r36309
라이브러리 : /home/juncon/webkit/libs
툴체인 : /opt/crosstool
빌드 prefix : /usr/local/webkit
소스 준비
# cd ~juncon
# mkdir webkit
# tar zxvf WebKit-r36309_20090506_anw6410.tar.gz –C /home/juncon/webkit
# tar zxvf WebKit_toolchains_20090506_anw6410.tar.gz –C /opt
라이브러리 빌드
라이브러리 빌드는 /home/juncon/webkit/libs에서 작업한다.
# mkdir /home/juncon/webkit/libs
# cd /home/juncon/webkit/libs
pkg-config 0.20.0 (for x86)
# wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.20.tar.gz
# tar zxvf pkg-config-0.20.tar.gz
# cd pkg-config-0.20
# ./configure --prefix=/usr/local/webkit
# make
# make install
# cd ..
환경변수 설정
이제 툴체인과 pkg-config를 사용하기 위하여 환경변수를 설정한다.
# export PATH=/usr/local/webkit/bin: /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/bin:$PATH
# export PKG_CONFIG_PATH=/usr/local/webkit/lib/pkgconfig
which 명령어를 이용하여 PATH가 정상적으로 잡혔는지 확인한다.
# which pkg-config
/usr/local/webkit/bin/pkg-config
# which arm-linux-gcc
/opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/bin/arm-linux-gcc
zlib 1.2.3
# wget http://www.zlib.net/zlib-1.2.3.tar.gz
# tar zxvf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# CC=arm-linux-gcc RANLIB=arm-linux-ranlib AR=arm-linux-ar ./configure --prefix=/usr/local/webkit --shared
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
Libpng 1.2.31
# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.31.tar.gz
# tar zxvf libpng-1.2.31.tar.gz
# cd libpng-1.2.31
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
jpeg-6b
# wget http://freeware.sgi.com/source/libjpeg/libjpeg-6b.tar.gz
# tar zxvf /libjpeg-6b.tar.gz
# cd libjpeg-6b
# ./configure --prefix=/usr/local/webkit --enable-shared --enable-static --host=arm-linux
# vi Makefile
23번 라인 : CC = arm-linux-gcc
63번 라인 : AR= arm-linux-ar rc
65번 라인 : AR2= arm-linux-ranlib
# make
# make install
# cd ..
FreeType 2.3.7
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.7.tar.gz
# tar zxvf freetype-2.3.7.tar.gz
# cd freetype-2.3.7
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libxml 2.6.32
# wget ftp://xmlsoft.org/libxml2/libxml2-2.6.30.tar.gz
# tar zxvf libxml2-2.6.30.tar.gz
# cd libxml2-2.6.30
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libgpg-error-1.6
# wget ftp://ftp.ring.gr.jp/pub/net/gnupg/libgpg-error/libgpg-error-1.6.tar.bz2
# tar jxvf libgpg-error-1.6.tar.bz2
# cd libgpg-error-1.6
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libgcrypt-1.4.1
# wget ftp://ftp.ring.gr.jp/pub/net/gnupg/libgcrypt/libgcrypt-1.4.2.tar.gz
# tar zxvf libgcrypt-1.4.2.tar.gz
# cd libgcrypt-1.4.2
# vi Makefile.in
240: tests 삭제
241: tests 삭제
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libxslt-1.1.24
# wget ftp://xmlsoft.org/libxslt/libxslt-1.1.24.tar.gz
# tar zxvf libxslt-1.1.24.tar.gz
# cd libxslt-1.1.24
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
openssl-0.9.8h
# wget http://www.openssl.org/source/openssl-0.9.8h.tar.gz
# tar zxvf openssl-0.9.8h.tar.gz
# cd openssl-0.9.8h
Configure 파일의 325번 라인에 있는linux-elf 라인전체를 복사해 아래 굵게 표시한 부분을 수정한다.
"linux-arm", "arm-linux-gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# ./Configure linux-arm --prefix=/usr/local/webkit --openssldir=/usr/local/webkit no-threads no-zlib no-asm shared
Makefile을 수정한다
AR = arm-linux-ar rc
RANLIB = arm-linux-ranlib
# make
# make install
expat 2.0.1
# wget http://nchc.dl.sourceforge.net/sourceforge/expat/expat-2.0.1.tar.gz
# tar zxvf expat-2.0.1.tar.gz
# cd expat-2.0.1
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
fontconfig 2.6.0
# wget http://fontconfig.org/release/fontconfig-2.6.0.tar.gz
# tar zxvf fontconfig-2.6.0.tar.gz
# cd fontconfig-2.6.0
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --with-arch=arm-unknown-linux-gnu --disable-docs
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
tslib 1.0
# wget http://download.berlios.de/tslib/tslib-1.0.tar.bz2
# tar jxvf tslib-1.0.tar.bz2
# cd tslib-1.0
# ./autogen.sh
# ./configure --prefix=/usr/local/webkit --target=arm-linux --host=arm-linux --enable-shared CC=arm-linux-gcc
# vi config.h
#define malloc rpl_malloc 을 삭제한다.
# make
# make install
# cd ..
DirectFB 1.2.8
# wget http://www.directfb.org/downloads/Core/DirectFB-1.2.8.tar.gz
# tar zxvf DirectFB-1.2.8.tar.gz
# cd DirectFB-1.2.8
# ./configure --prefix=/usr/local/webkit --target=arm-linux --host=arm-linux --without-x --disable-osx --disable-x11 --enable-fbdev --with-gfxdrivers=none --build=i686 --with-inputdrivers=tslib,keyboard --enable-zlib
# make
# make install
# cd ..
DirectFB Examples 1.2.0
# wget http://www.directfb.org/downloads/Extras/DirectFB-examples-1.2.0.tar.gz
# tar zxvf DirectFB-examples-1.2.0.tar.gz
# cd DirectFB-examples-1.2.0
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
이제 DirectFB빌드는 끝났다. 이대로 /usr/local/webkit을 보드에 올려서 DirectFB 예제들을 실행하면 된다.
glib 2.16.5
# wget http://ftp.gnome.org/pub/gnome/sources/glib/2.16/glib-2.16.5.tar.gz
# tar zxvf glib-2.16.5.tar.gz
# cd glib-2.16.5
# vi glib-config.cache
glib_cv_long_long_format=${glib_cv_long_long_format=ll}
glib_cv_stack_grows=${glib_cv_stack_grows=no}
glib_cv_has__inline=${glib_cv_has__inline=yes}
glib_cv_has__inline__=${glib_cv_has__inline__=yes}
glib_cv_uscore=${glib_cv_uscore=no}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
# ./configure --prefix=/usr/local/webkit --host=arm-linux --with-threads=posix --cache-file=glib-config.cache
# make
# make install
다음 빌드시 크로스 컴파일한 glib-genmarshal이 선택되지 않도록 한다.
# mv /usr/local/webkit/bin/glib-genmarshal /usr/local/webkit/bin/glib-genmarshal_arm
# cd ..
atk-1.23.5
# wget http://ftp.gnome.org/pub/gnome/sources/atk/1.23/atk-1.23.5.tar.gz
# tar zxvf atk-1.23.5.tar.gz
# cd atk-1.23.5
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
pixman-0.10.0
# wget http://www.cairographics.org/releases/pixman-0.11.10.tar.gz
# tar zxvf pixman-0.11.10.tar.gz
# cd pixman-0.11.10
# vi Makefile.in
201: test삭제
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
cairo-1.6.4
# wget http://www.cairographics.org/releases/cairo-1.6.4.tar.gz
# tar zxvf cairo-1.6.4.tar.gz
# cd cairo-1.6.4
FTP에서 cairo-1.6.4-patch.tar.gz파일을 받는다.
# tar zxvf cairo-1.6.4-patch.tar.gz
# patch -p1 < 001-cairo_dfb-run-clipped-function.patch
# patch -p1 < 002-cairo_dfb-dest-image-clip.patch
# patch -p1 < 003-cairo_dfb-zero-box-clip-fix.patch
# patch -p1 < 004-cairo-blit-optimization.patch
# patch -p1 < 005-cairo-font-crash-fix.patch
# ./configure --prefix=/usr/local/webkit --host=arm-linux --enable-directfb=yes --enable-xlib=no --enable-xlib-xrender=no --enable-xcb=no --without-x --disable-win32
# make
# make install
# cd ..
pango-1.20.5
# wget http://ftp.gnome.org/pub/GNOME/sources/pango/1.20/pango-1.20.5.tar.gz
# tar zxvf pango-1.20.5.tar.gz
# cd pango-1.20.5
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --enable-cairo --disable-xlib --disable-win32
# make
# make install
# cd ..
tiff 3.8.2
# wget ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.8.2.tar.gz
# tar zxvf tiff-3.8.2.tar.gz
# cd tiff-3.8.2
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
gtk+-2.12.11
# wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-2.12.11.tar.gz
# tar zxvf gtk+-2.12.11.tar.gz
# cd gtk+-2.12.11
# vi gtk+-config.cache
ac_cv_lib_Xinerama_XineramaQueryExtension=${ac_cv_lib_Xinerama_XineramaQueryExtension=no}
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --with-gdktarget=directfb --cache-file=gtk+-config.cache
# make
# make install
# cd ..
이제 DirectFB기반의 Gtk+-2.0이 빌드되었습니다. 이 상태로 보드에 올려서 gtk-demo를 실행하시면 됩니다.
sqlite 3.6.2
# wget http://www.sqlite.org/sqlite-3.6.2.tar.gz
# tar zxvf sqlite-3.6.2.tar.gz
# cd sqlite-3.6.2
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
curl 7.18.2
# wget http://curl.s-lines.net/download/curl-7.18.2.tar.gz
# tar zxvf curl-7.18.2.tar.gz
# cd curl-7.18.2
# vi configure
28733라인에 { (exit 1); exit 1; }; } à } 만 남기고 지운다.
# ./configure --prefix=/usr/local/webkit --host=arm-linux --with-ca-path=/usr/local/webkit/certs
# make
# make install
# cd ..
icu 3.6 for x86
icu를 컴파일 하다보면 컴파일중 생성한 tool을 이용하여 새로운 소스코드를 생성하는 과정에서 크로스 컴파일된 툴이 실행되지 못하는 오류가 있어 먼저 x86용으로 빌드한다. (디렉토리 : icu_x86)
# wget http://download.icu-project.org/files/icu4c/3.8.1/icu4c-3_8_1-src.tgz
# tar zxvf icu4c-3_8_1-src.tgz
# mv icu icu_x86
# cd icu_x86/source
# ./configure --enable-tests=no --enable-samples=no
# make
# cd ../../
icu 3.6 for arm
# tar zxvf icu4c-3_8_1-src.tgz
# cd icu/source
이전에 x86으로 빌드했던 것을 링크한다.
# ln –s ../../icu_x86/source/bin bin_x86
# vi data/icupkg.inc.in
마지막줄을 아래와 같이 변경
GENCCODE=../bin_x86/genccode
GENCMN=../bin_x86/gencmn
ICUPKG=../bin_x86/icupkg
# vi data/Makefile.in
bin_x86=../bin_x86 ß 8번째 라인에 추가
Makefile내의 BINDIR을 bin_x86으로 변경한다. (vi 명령 “:%s/BINDIR/bin_x86”)
# vi icudefs.mk.in
229번 라인을 아래와 같이 수정
INVOKE = $(LDLIBRARYPATH_ENVVAR)= /home/juncon/WebKit/libs/icu_x86/source/lib:$(LIBRARY_PATH_PREFIX)$(LIBDIR):$(top_bu ilddir)/stubdata:$(top_builddir)/tools/ctestfw:$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER)
# vi extra/uconv/Makefile.in
141번 라인을 아래와 같이 수정
$(INVOKE) $(PKGDATA_INVOKE_OPTS) ../../bin_x86/pkgdata -p $(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst
164번 라인을 아래와 같이 수정
$(INVOKE) ../../bin_x86/genrb -e UTF-8 -s $(^D) -d $(@D) $(^F)
# vi extra/uconv/pkgdata.inc.in
마지막 라인을 아래와 같이 수정
GENCCODE=../../bin_x86/genccode
GENCMN=../../bin_x86/gencmn
ICUPKG=../../bin_x86/icupkg
# ./configure --prefix=/usr/local/webkit --host=arm-linux --enable-tests=no --enable-samples=no
# gmake
# gmake install
WebKit 빌드
FTP에서 다운받은 WebKit의 소스가 있는 디렉토리로 이동한다.
# cd /home/juncon/WebKit/WebKit-r36309
# ./autogen.sh --prefix=/usr/local/webkit --host=arm-linux --enable-debug=no --with-target=directfb
# make
# make install
WebKit의 실행파일인 GtkLauncher는 인스톨되지 않으므로 별도로 복사한다.
# cp ./Programs/.libs/GtkLauncher /usr/local/webkit/bin
한글 지원을 위한 폰트 설정
기본적으로 한글 폰트가 없어 보드에 포팅하고 실행을 하면 한글은 깨진다. 그래서 윈도우에서 사용하고 있는 gulim.ttc파일등을 사용하도록 설정한다.
폰트는 윈도우 PC의 c:\windows\fonts에 있다.
# mkdir /usr/local/webkit/share/fonts
# cp ARIALUNI.TTF gulim.ttc /usr/local/webkit/share/fonts
fonts.conf 파일을 수정해 준다.
# vi /usr/local/webkit/etc/fonts/fonts.conf
26라인에
USB 만들기
본 문서에는 USB메모리를 ext3로 포멧한 후 사용하였다. 만약 mtdblock에 복사하고자 한다면 USB에 담은 결과물을 그대로 올리면 된다.
먼저 USB메모리를 ext3로 포멧한다.
USB 디바이스: /dev/sdc1
# fdisk /dev/sdc
fdisk 사용법은 man fdisk를 참조한다.
# mkfs.ext3 /dev/sdc1
# mount /dev/sdc1 /mnt/usb
/usr/local/webkit 디렉토리를 USB에 복사한다.
# cp –aR /usr/local/webkit /mnt/usb/
# cd /mnt/usb/webkit
필요없는 파일들을 삭제한다.
# find ./ -name “*.a” | xargs rm -rf
# find ./ -name “*.la” | xargs rm -rf
# find ./ -name “include” | xargs rm -rf
# find ./ -name “man” | xargs rm –rf
# cd ../../
# umount /mnt/usb
A&W6410에서 실행
이제 보드를 부팅하고 WebKit을 실행하기 위한 환경들을 설정한다. 당연히 인터넷에 접속 가능한 상태여야 한다.
ip설정
# ifconfig eth0 192.168.0.45
# route add default gw 192.168.0.1 eth0
DNS 설정
# vi /etc/resolv.conf
nameserver 210.94.0.73
WebKit 실행전 준비
# mount /dev/sda1 /mnt/usb
# cd /usr/local
# ln -s /mnt/usb/webkit
환경변수를 설정한다.
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/webkit/lib
export PATH=/usr/local/webkit/bin:/sbin:/usr/sbin:/bin:/usr/bin
export LD_PRELOAD=/usr/lib/libts.so:/usr/lib/ts/pthres.so
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
WebKit 실행
# cd /usr/local/webkit/bin
만약 빌드 후 처음 실행이라면 gdk-pixbuf-query-loaders와 pango-querymodules를 실행한다.
# mkdir /usr/local/webkit/etc/pango
# ./pango-querymodules > ../etc/pango/pango.modules
# ./gdk-pixbuf-query-loaders > ../etc/gtk-2.0/gdk-pixbuf.loaders
이제 WebKit을 실행한다.
# ./GtkLauncher http://www.google.co.kr
맨처음 실행하게 되면 font를 캐쉬하는 작업을 하기 때문에 WebKit이 뜨기 까지 시간이 걸린다.
댓글 없음:
댓글 쓰기