Viewml编译

本阶段是进行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,之后是进行下载,看其能否跑起来。


http://blog.csdn.net/beny610/article/details/5305732

你可能感兴趣的:(Viewml编译)