Cited from http://hi.baidu.com/zengzhaonong/blog/item/4b901ee9b5ef343cb90e2d16.html

0.交叉编译环境的搭建  

  1.环境变量设置  

  2.busybox移植及根文件系统的构建  

  3.Xserver移植  

  4.matchbox移植  

  5.gtk移植  

  6.测试  

  0.交叉编译环境的搭建  

  -------------------------------------  

  所需要的交叉编译工具链:S3C6410X Tool Chain 4.2.2 - EABI V0.0 - cross-4.2.2-eabi.tar  

  0.1.解压上述工具链获得文件夹:4.2.2-eabi/  

  0.2.在/usr/local/下面创建目录arm/ (注意,最好是放到这个目录,不然在以后的编译过程中可能出现一些错误)  

  0.3.将目录4.2.2-eabi/移动到/usr/local/arm/下面  

  0.4.设置环境变量:  

  编辑/etc/profile文件,在文件末尾添加:  

  PATH="$PATH:/usr/local/arm/4.2.2-eabi/usr/bin"  

  export PATH  

  使环境变量生效:  

  在终端输入命令: source /etc/profile  

  测试环境变量是否设置成功:  

  在终端输入:echo $PATH,如果输出的路径中包含了/usr/local/arm/4.2.2-eabi/usr/bin则说明环境变量设置成功  

  0.5.测试交叉编译工具链  

  在终端输入:arm-linux-gcc -v  

  显示如下:  

  Using built-in specs.  

  Target: arm-unknown-linux-gnueabi  

   Configured with: /home/scsuh/workplace/coffee/buildroot-20071011/to olchain_build_arm/gcc-4.2.2/configure --prefix=/usr --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=arm-unknown-linux-gnueabi --enable-languages=c,c++ --with-sysroot=/usr/local/arm/4.2.2-eabi/ --with-build-time-tools=/usr/local/arm/4.2.2-eabi/ /usr/arm-unknown-linux-gnueabi/bin --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --enable-shared --with-gmp=/usr/local/arm/4.2.2-eabi//gmp --with-mpfr=/usr/local/arm/4.2.2-eabi//mpfr --disable-nls --enable-threads --disable-multilib --disable-largefile --with-arch=armv4t --with-float=soft --enable-cxx-flags=-msoft-float  

  Thread model: posix  

  gcc version 4.2.2  

  说明交叉编译工具链已经安装成功。  

  0.6需要修正的库的位置(将libc从2.6替换成2.7版的)  

   从http://repository.handhelds.org/hasty-armv6el-vfp/ pool/main/g/glibc/ 下载 libc6-dbg_2.7-10ubuntu3-mojo1_arm.deb并解压拷贝对应的文件覆盖到工具链的对应位置  

   sudo cp -rfv /home/hanjinlai/Download/mojoarmchain/libc6-dbg_2. 7-10ubuntu3-mojo1_arm/usr/lib/debug/usr/lib/gconv/* /usr/local/arm/4.2.2-eabi/usr/lib/gconv  

  /  

  sudo cp -rfv /home/hanjinlai/Download/mojoarmchain/libc6-dbg_2. 7-10ubuntu3-mojo1_arm/usr/lib/debug/ /usr/local/arm/4.2.2-eabi/lib/  

  1.环境变量设置  

  -------------------------------------  

  export PREFIX=/home/hanjinlai/Work/X/target/usr  

  export CC=arm-linux-gcc  

  export PKG_CONFIG_PATH=/home/hanjinlai/Work/X/target/usr/ lib/pkgconfig  

  export LD_LIBRARY_PATH=/home/hanjinlai/Work/X/target/usr/ lib  

  2.busybox移植  

  -------------------------------------  

  2.1.创建根文件系统目录rootfs及其子目录bin,sbin,boot,root,sys,srv,proc,usr等  

  2.2.编译busybox1.7.0:(所需要的源码包:busybox-1.7.0.tar.bz2)  

  2.2.1解压源码包,进入源码目录;  

  2.2.2配置busybox:在源码目录执行make menuconfig, 如果使用默认配置则直接退出、保存,如果需要配置自己的则更改相应的选项再保存退出。  

  选上以下选项可以支持Tab补全功能  

  Busybox Settings--->  

  Busybox Library Tuning--->  

  [ ] Tab competion  

  已经支持了mount nfs功能  

  2.2.3修改源码目录的Makefile:  

  将175行: ARCH ?= $(SUBARCH) 修改为: ARCH ?= arm  

  将176行: CROSS_COMPILE ?= 修改为: CROSS_COMPILE ?= arm-linux-  

  2.2.4正式编译busybox:在源码目录执行make编译  

  2.2.5安装busybox: 执行命令 make CONFIG_PREFIX=/***/rootfs(根文件系统目录) install  

  2.3.拷贝glibc库相关文件到根文件系统  

  glibc相关库文件在交叉编译工具链中已经有了,可以直接拷贝过来用  

   $ sudo cp /usr/local/arm/4.2.2-eabi/lib/*.so* /***/rootfs/lib/ -d $ sudo cp /usr/local/arm/4.2.2-eabi/usr/arm-unknown-linux-gn ueabi/lib/*.so* /***/rootfs/lib/ -d 2.4.创建配置文件:  

  2.4.1创建/etc/inittab, 内容如下:  

  # /etc/inittab  

  ::sysinit:/etc/init.d/rcS  

  ::askfirst:-/bin/sh  

  ::ctrlaltdel:/sbin/reboot  

  ::shutdown:/bin/umount -a -r  

  2.4.2创建/etc/init.d/rcS,内容如下:(创建完成后改变其属性使它可以执行sudo chmod +x /etc/init.d/rcS)  

  #!/bin/sh(这段脚本主要用来自动生成设备文件)  

  #ifconfig eth0 192.168.1.17  

  mount -a
  mkdir /dev/pts  

  mount -t devpts devpts /dev/pts  

  echo /sbin/mdev > /proc/sys/kernel/hotplug  

  mdev -s  

  2.4.3创建/etc/fstab文件,内容如下:  

  # device mount-point type options dump fsck order  

  proc /proc proc defaults 0 0  

  tmpfs /tmp tmpfs defaults 0 0  

  sysfs /sys sysfs defaults 0 0  

  tmpfs /dev tmpfs defaults 0 0  

  2.5.创建设备文件  

  在根文件系统的/dev目录下执行  

  $sudo mknod console c 5 1  

  $sudo mknod null c 1 3  

  这样我们的最基本的根文件系统就做好了。  

  2.6.测试已经制作好的根文件系统  

  在 PC上安装mkcramfs包,以便可以制作cramfs格式的文件  

  制作出根文件系统: $mkcramfs /***/rootfs/ rootfs.cramfs  

  烧录uboot,kernel,rootfs到开发板并重启开发板(如何烧录这些内容请参考第三节:内核及文件系统镜像的烧写)  

  系统正常启动,并进入shell,测试成功。  

  2.7.测试基本的C程序在根文件系统的运行  

  在PC上写一个最简单的hello.c程序:  

  #include <stdio.h>  

  int main()  

  {  

  printf("hello!\n");  

  return 0;  

  }  

  编译程序:$arm-linux-gcc -o hello hello.c  

  将编译出来的hello复制到根文件系统的/bin或/sbin或/usr/bin或/usr/sbin等任一目录  

  重新制作根文件系统镜像rootfs.cramfs  

  重新烧写根文件系统镜像到开发板  

  重启动开发板,进入shell,执行hello程序,显示hello!  

  测试成功。  

  3.Xserver移植  

  ---------------------------------------  

  3.1移植ncurses-5.6  

  $tar xzf ncurses.tar.gz  

  $cd ncurses-5.6  

  $./configure --host=arm-linux --with-shared --prefix=$PREFIX  

  $make  

  $make install  

  3.2移植libtool  

  $tar xzf libtool_1.5.6.orig.tar.gz  

  $cd libtool_1.5.6  

  $./configure --host=arm-linux --prefix=$PREFIX  

  $make  

  $make install  

  3.3移植zlib  

   $tar xzf zlib-1.2.3.tar.gz $cd zlib-1.2.3 $./configure --shared --prefix=$PREFIX $make $make install 3.4移植libpng $tar xjf libpng-1.2.23.tar.bz2 $cd libpng-1.2.23 $ ./configure --host=arm-linux --prefix=$PREFIX $make $make install 3.5移植expat $tar xzf expat-2.0.1.tar.gz $cd expat-2.0.1 $./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX $make $make install 3.6移植freetype $tar xzf freetype-2.3.9.tar.gz $cd freetype-2.3.9 $ ./configure --host=arm-linux --build=i386-linux --target=arm-linux --prefix=$PREFIX $make $make install 3.7移植libxml2.0 $tar xzf libxml2-2.6.30.tar.gz $cd libxml2-2.6.30 $ ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX $make $make install 3.8移植fontconfig-2.6.0 $tar xzf fontconfig-2.6.0.tar.gz $cd fontconfig-2.6.0 $ ./configure --host=arm-linux --build=i386-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --disable-static --with-confdir=$PREFIX/etc/fonts --enable-libxml2 --with-arch=arm $make $make install 3.9移植libdrm $tar xjf libdrm-2.3.0.tar.bz2 $cd libdrm-2.3.0 $ ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX $make $make install 3.10移植openssl $tar xjf openssl-0.9.8g.tar.gz $cd openssl-0.9.8g $./config --prefix=$PREFIX shared zlib-dynamic enable-camellia $make depend $make install 3.11移植Xserver(《参考于嵌入式linux应用开发完全手册》一书)  

  X源码包:Xorg_git_20071119.tar.bz2,解压后进入源码目录  

  使用util/modules/build.sh来对源码进行编译  

  编译前的修改:  

  修改X server的配置参数,生成Xfbdev:  

  在 if test "$1" = "xserver" && test -n "$MESAPATH"; then  

  MOD_SPECIFIC="--with-mesa-source=${MESAPATH}"  

  fi  

  后面添加  

  if test "$1" = "xserver"; then  

  MOD_SPECIFIC="${MOD_SPECIFIC} --enable-kdrive --enable-xfbdev  

  --disable-ipv6 \  

  --disable-xorg \  

  --disable-xnest \  

  --disable-xvfb \  

  --disable-xevie \  

  --disable-xwin \  

  --disable-xsdl \  

  --disable-xephyr \  

  --disable-xfake \  

  --disable-kdrive-vesa \  

  --disable-dri"  

  fi  

  注释掉一些不需要的软件:  

  如:#build_doc,#build_mesa,#build_driver,#build_data,#build_util,  
    #build app xdriinfo, #build app xprop, #build app xsm等  

  修改出错的地方:  

  xserver/hw/kdrive/src/kaa.c:  

  pPixman=fbCreatePixmapBpp(pScreen,w,h,depth,bpp);改为:  

  pPixman=fbCreatePixmapBpp(pScreen,w,h,depth,bpp,usage_hint);  

  xserver/hw/xfree86/modes/xf86Crtc.c:  

  在#include "xf86.h前一行添加" #include "xf86Priv.h"  

  xserver/hw/xfree86/os-support/xf86_OSlib.h:  

  删除#include <sys/kd.h>  

  添加#include <linux/kd.h>  

  添加屏幕分辨率的支持:xserver/hw/kdrive/src/kmode.c:  

  在const KdMonitorTiming kdMonitorTimings[]数组中添加需要的分辨率  

  /* 800x480 modes */  

  { 800, 480, 85, 56250, /* VESA */  

  32, 152, 248, KdSyncPositive, /* 53.674 */  

  1, 27, 31, KdSyncPositive, /* 85.061 */  

  },  

  { 800, 480, 75, 49500, /* VESA */  

  16, 160, 256, KdSyncPositive, /* 46.875 */  

  1, 21, 25, KdSyncPositive, /* 75.000 */  

  },  

  /* DEFAULT */  

  #define MONITOR_TIMING_DEFAULT 9  

  { 800, 480, 72, 50000, /* VESA */  

  56, 64, 240, KdSyncPositive, /* 48.077 */  

  37, 23, 66, KdSyncPositive, /* 72.188 */  

  },  

  { 800, 480, 60, 40000, /* VESA */  

  40, 88, 256, KdSyncPositive, /* 37.879 */  

  1, 23, 28, KdSyncPositive, /* 60.317 */  

  },  

  { 800, 480, 56, 36000, /* VESA */  

  24, 128, 224, KdSyncPositive, /* 35.156 */  

  1, 22, 25, KdSyncPositive, /* 56.250 */ } 编译程序: $ ./util/modular/build.sh -b $PREFIX  

  在编译libX11时要用到makekeys这个执行文件,但是这时是编译的arm文件,执行时报错,手动编译一个PC上能用的版本覆盖原来的文件gcc -o makekeys makekeys.c  

  4.mathcbox移植  

  --------------------------------------------------  

  4.1移植jpeg  

  ./configure --build=i386-linux --host=arm-linux --target=arm-linux --enable-shared --enable-static --prefix=$PREFIX  

  4.2移植matchbox-window-manager-1.2和libmatchbox-1.9  

  5.gtk移植  

  -------------------------------------------------- -  

  5.1移植glib  

  [root@linux glib-2.8.0]# echo ac_cv_type_long_long=yes>$ARCH-linux.cache  

  [root@linux glib-2.8.0]# echo glib_cv_stack_grows=no>>$ARCH-linux.cache  

  [root@linux glib-2.8.0]# echo glib_cv_uscore=no>>$ARCH-linux.cache  

  [root@linux glib-2.8.0]# echo ac_cv_func_posix_getpwuid_r=yes>>$ARCH-linux.cache  

   [root@linux glib-2.8.0]# LIBS=`pkg-config --libs gthread-2.0` ./configure --host=arm-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX --cache-file=arm-linux.cache  

  5.2移植cairo  

  $tar xjf cairo-1.8.0.tar.bz2  

  $cd cairo-1.8.0  

   $ ./configure --host=arm-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX --enable-pdf=yes --enable-xlib=yes --enable-xlib-xrender=yes --enable-ps=yes --enable-freetype --enable-png  

  $make  

  $make install  

  5.3移植pango  

  $tar xjf pango-1.16.4.tar.bz2  

  $cd pango-1.16.4  

   $./configure --host=arm-linux --build=i386-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" CAIRO_CFLAGS="-I$PREFIX/include" CAIRO_LIBS="-L$PREFIX/lib" --prefix=$PREFIX  

  $make  

  $make install  

  5.4移植atk  

  $tar xjf atk-1.9.1.tar.bz2  

  $cd atk-1.9.1  

  $./configure --host=arm-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX  

  $make  

  $make install  

  5.5移植TIFF  

  $tar xjf tiff-3.7.4.tar.bz2  

  $cd tiff-3.7.4  

  $./configure --host=arm-linux CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX  

  $make  

  $make install  

  5.6移植gtk  

  $tar xjf gtk-2.12.9.tar.bz2  

  $cd gtk-2.12.9  

  $ac_cv_func_XOpenDisplay=yes  

  $ac_cv_func_XextFindDisplay=yes  

  $ac_cv_func_XRenderQueryExtension=yes  

   $./configure --prefix=$PREFIX --host=arm-linux --build=i386-linux --enable-shared=yes --enable-static=yes --without-libtiff --disable-xkb --disable-glibtest --with-gdktarget=x11 --with-xinput=yes --enable-display-migration --without-libjpeg  

  修改config.h:  
  #define HAVE_XCONVERTCASE 1  

  /* #undef HAVE_XCONVERTCASE */  

  #define HAVE_SHAPE_EXT 1  

  /* #undef HAVE_SHAPE_EXT */  

  $make  

  $make install  

  6.测试  

  -------------------------------------------------- ---  

  将编译安装后的结果拷贝到已经做好的基本的文件系统里面  

  在/etc/init.d/rcS中增加:  

  #start Xserver  

   Xfbdev -mouse mouse -keybd keyboard >/dev/null 2>&1 & #start matchbox-window-manager export HOME=/home export DISPLAY=:0.0 sleep 1 matchbox-window-manager & 启动系统可看到屏幕上X窗口和matchbox的指针  

  在超级终端里运行gtk-demo  

  显示出gtk-demo程序界面,移植成功。  

  注:测试前  

  确认 /usr/lib/xserver/SecurityPolicy 文件存在  

  确认 /usr/etc/gtk-2.0/gdk-pixbuf.loaders 文件存在  

  {/usr/bin/gdk-pixbuf-query-loaders > gdk-pixbuf.loaders 来生成}  

  确认 /usr/etc/pango/pango.modules 文件存在  

  {/usr/bin/pango-querymodules > pango.modules 来生成。  

  此文件会把pango+modules的相关资料调入/usr/lib/pango/1.16.4/modules中}

Cited from: http://www.ispcs.cn/view-75003-4.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值