本阶段是进行Viewml开源浏览器的编译工作,从不了解到知道一些,中间经历了一段段时间,不知不觉时间就已经过去了,这里将工作情况陈述如下:
Microwindows:包括底层的鼠标、键盘的驱动以及一些最基本的绘图函数,
Fltk(flnx):一个简单灵活的GUI工具箱也就是基于底层绘图函数建立的图形库,供上层调用。(针对Microwindows引擎的FLTK的Linux版本被称为flnx)。
Viewml:调用fltk库而运行的一个浏览器,用它绘制界面等。(其中还要进行协议解析,单独调用libwww)。
在摸索的前进中,在fb模式下编译通过了microwindows0.90,flnx0.17,w3c_libwww5.2.8。
编译viewml0.23有文件par.h找不到,搜索了好长时间也没找到,后来匹配HTMupar.h等发现的类par.h(当时怀疑是不是名字上有改动),发现调用par.h的文件处的函数与类似的头文件差异较大,应该不是同一个东东,遂放弃。
遂编译viewml0.22,没有找不到的函数,但错误报了一堆,有很多是语法,但也有和系统相关的,百思不得其解,上网搜,有很多报相同错误的,但没有发现有人回帖如何解决。没有办法,突然发现了一个回帖,如下:
There is currently a problem compiling ViewML with 3.2 and beyond g++
compilers. Most of the code was written long before the standards that
3.2 enforces were completed. I am working on a patch now that will
solve this issue. I'm working on it in my spare time, so I'm a little
slow getting everything done, but it will be complete shortly.
Thanks,
Jason Kingan
Century Software
On Tuesday, September 30, 2003, at 08:48 PM, LIM, Chul ho wrote:
因为viewml已没有后来升级版本,也就是他没有改进,很难匹配高版本的gcc,
Glibc,以及stl模版。所以只能另寻途径。
查询得知,可用高本版的内核,外加低版本的根文件系统进行linux系统组建,viewml也用低版本的进行编译,并加入到根文件系统。
1.首先是进行开发环境建立,要准备以下文件:
* 编译通过的环境 RedHat 9.0
* binutils-2.14.tar.gz
* gcc-core-2.95.3.tar.gz
* gcc-g++2.95.3.tar.gz
*glibc-2.2.3.tar.gz + glibc-linuxthreads-2.2.3.tar.gz + glibc-manual-stdin.texi-1.127.patch(补丁)
* glibc-linuxthreads-2.2.4.tar.gz
在 bash 下工作,先设定一些环境变量:
$ export VBINUTILS=2.14
$ export VGCC=2.95.3
$ export VGLIBC=2.2.4
$ export VLINUX=2.4.21
$ export VLINUX_PATCH=rmk1
$ export PREFIX=/armtools
$ export TARGET=arm-linux
把它们加到 .bashrc 中。重新login 生效。
也可以在 bash 的命令行上输入它们.
到里完成了环境变量的设置
我们的工作路径是:
/ ----- ~ -- tars -------- SourceDir
|--- armtools
建立工作路径
$ cd ~
$ mkdir -p tars/SourceDir
$ mkdir $PREFIX
到这里完成建立工作路径
tars
在这里放我们的下载来的 .tar.gz 文件
SourceDir
这个临时目录放我们解压缩后的源文件
armtools
把arm-linux 交叉编译环境的安装在这里,到这里已完成了所有的安装前准备工作 返回
2.安装linux 的头文件
这里要用内核的头文件,把打了arm补丁的内核头文件拷到指定位置,
拷贝头文件
$ mkdir -p $PREFIX/$TARGET/include
$ cp -daR include $PREFIX/$TARGET/include
为 gcc 建立一个 linux kernel 头文件的连接
gcc 把它拷贝到 $PREFIX/$TARGET/sys-include。
我们可以建立个 sys-include 连接,在编译gcc时configure时就不用 --with-headers 参数了。
$ cd $PREFIX/$TARGET
$ ln -s include sys-include
3. 编译安装binutils
这里用不到前面准备的 linux 头文件
解压缩
$ cd ~/tars/SourceDir
$ tar -zxf ../binutils-$VBINUTILS.tar.gz
编译
$ cd ~/tars/SourceDir/binutils-$VBINUTIL
$ ./configure /
--target=$TARGET
--prefix=$PREFIX
$ make all install
4. 编译安装gcc 的c 编译器 (这里只需编译出c(arm-linux-gcc)的编译器,为编译arm的glibc铺路.我们在完成glibc的编译后,再编译完整的gcc.
解压缩
$ cd ~/tars/SourceDir
$ tar -zxf ../gcc-core-$VGCC.tar.gz
注意:为什么不用 all-in-ne 的 gcc-$VGCC.tar.gz 呢?
all-in-ne 的 gcc 包里面有 chill, frtran, java 等语言的编译器,虽然在下面 configure 时指定 -enable-languages=c,但编译时还是把所有的都编译一次,这不是我们需要的,而且它也总会有错误。因此我们只编译 C 语言的编译器。后面第二次编译的时候也是这个问题,我们只编译 C 和 C++ 的编译器。
修改 gcc 的 t-linux 文件
在 t-linux 文件中的 TARGET_LIBGCC2_CFLAGS 上加上 -D__gthr_posix_h 和-Dinhibit_libc, //////还有一种与-Dinhibit同等效果的方法,那就是在你配置configure时多加一个参数-with-newlib,这个选项不会迫使我们必须使用newlib。编译了bootstrap-gcc后,仍然可以选择任何c库。
$ cd gcc-$VGCC/gcc/config/arm
$ mv t-linux t-linux-orig
$ sed 's/TARGET_LIBGCC2_CFLAGS =/TARGET_LIBGCC2_CFLAGS = -D__gthr_posix_h -Dinhibit_libc/' < t-linux-orig > t-linux-core
$ cp ./t-linux-core ./t-linux
编译
$ cd ~/tars/SourceDir/gcc-$VGCC
$ ./configure /
--target=$TARGET /
--prefix=$PREFIX /
--enable-languages=c /
$ make all install
到这里完成了gcc的c编器的安装在$PREFIX/bin下会出现个arm-linux-gcc 返回
5. 编译安装 glibc
解压缩
$ cd ~/tars/SourceDir
$ tar -zxf ../glibc-$VGLIBC.tar.gz
$ cd glibc-$VGLIBC
$ tar -zxf ../../glibc-linuxthreads-$VGLIBC.tar.gz
编译
下面这行设置arm的C编译器和工具,arm-linux-gcc.arm-linux-ar,arm-linux-ranlib
$export CC=$TARGET-gcc
$export AR=$TARGET-ar
$export RANLIB=$TARGET-ranlib
$ cd ~/tars/SourceDir/glibc-$VGLIBC
./configure
$TARGET /
--prefix=$PREFIX/$TARGET /
--enable-add-ons
$ make all install
glibc-2.2.3的安装
自动化程度不同,要指定的参数为
./configure -target=$TARGET -prefix=$PREFIX/$TARGET -build=i686-linux -enable-add-ons -host=arm-linux
glibc-2.2.3在make install 时 manual/stdin.texi报错,
打上glibc-manual-stdin.texi-1.127.patch补丁才可以正确安装.
6.编译安装完整的gcc 生成c, c++ 编译器
注:也可以重新解压 gcc-$VGCC,和gcc-g++-$VGCC.
恢复t-linux 文件
$ cd ~/tars/SourceDir/gcc-$VGCC/gcc/config/arm/
$ cp t-linux-orig t-linux
解压缩 c++ 编译器
$ cd ~/tars/SourceDir/
$ tar -zxf ../gcc-g++-$VGCC.tar.gz
$ cd ~/tars/SourceDir/gcc-$VGCC
$ ./configure /
--target=$TARGET /
--prefix=$PREFIX /
--enable-languages=c,c++ /
--with-included-gettext
$ make all
$ make install
到这里完成了gcc的安装,在$PREFIX/bin目录下会多
arm-linux-g++的文件出来 返回
7.以上为开发环境建立,下边就是编译安装,viewml,先
A.首先是安装zlib -1.1.4.tar.gz, 打patch zlib -1.1.4-arflags.patch
./configure –prefix=/armtools/arm-linux,然后make,make install
B. 安装libpng-1.0.12,修改makefile.gcc里边的gcc,ar,ranlib,为交叉型
Make后拷贝libpng.a和libpng.h分别到armtool/arm-linux下的库和头文件文件夹。
C.安装libjpeg。
修改makefile里的ar 和ar2为交叉型,手动建/armtoole/arm-linux/man/manl
./config –prefix=/armtools/arm-linux CC=arm-liniux-gcc --with-shared –with-static
Make, makeinstall
D.交叉编译microwindows,
./xconfigure 配为交叉编译模式,
然后make,可能会报’PAGE_SIZE’ undeclared,在clientfb.c较前边中加
Define PAGE_SHIFT 12
Define PAGE_SIZE (lul<< PAGE_SHIFT)
然后make
E.编译flnx-0.17
修改config.cache 把gcc这类的换为交叉型,
./configure
–prefix=/armtools/arm-linux --with-microwin=/home/microwindows-0.90/src
Make;
F.编译w3c-libwww-5.2.8
修改config.cache几乎同于flnx-0.17
./configure –host=arm-linux --prefix=/opt/libwww
Make,makeinstall;
G.编译viewml-0.22
./configure --host=arm-linux --without-x –with-fltk=/home/flnx-0.17
--with-microwin=/home/microwinows-0.90 --with-libwwwconf=/opt/libwww/bin
然后修改makecinclude,把用到的头文件以及库的路径加进来,
Make;
8.制作根文件系统,
试了很多,只有busybox-1.00编译通过。
建立rootfs文件夹,busybox编译后安装到此文件夹,拷贝freescale编译后生成的跟文件系统利的inittab到我们的etc下边,然后再/etc/rc.d下边建立rcS文件,可添加一些环境变量设置,以及一些配置,比如:
export HOSTNAME="freescale"
# net interface 0
export SYSCFG_IFACE0=y
export INTERFACE0="eth0"
export IPADDR0="192.168.0.132"
export NETMASK0="255.255.255.0”
export BROADCAST0="192.168.0.255"
export GATEWAY0="192.168.0.1"
还要把glibc生成的动态库拷到他的lib中,把microwindows和libwww的库也靠过来,并把nano-X和viewml生成的可执行文件也靠过来,比如/usr/bin中。
经过以上时间的努力,只是编译通过了viewml,之后是进行下载,看其能否跑起来。