当前位置: 首页 > 工具软件 > Mount-gtk > 使用案例 >

linux im-scim-bridge.so 使用,移植busybox+X+matchbox+gtk笔记

荣俊
2023-12-01

目录

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

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/toolchain_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版的)

下载    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-gnueabi/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

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

添加#include 添加屏幕分辨率的支持: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中}

###################################################################

arm + X11 + gtk + scim

+ matchbox 启动

确认字体为PC上的字体,否则可能造成GTK在显示时字体大小不一的情况。

系统第一次引导需要作如下设置

fc-cache

-f -v 把字体的cache载入内存。 fc-list 确定字体是否有成功载入。 cache的存放位置为

/var/cache/fontconfig

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

认 /etc/gtk-2.0/gdk-pixbuf.loaders 文件存在 {/bin/gdk-pixbuf-query-loaders

> gdk-pixbuf.loaders 来生成}

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

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

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

确认gtk-query-

immodules-2.0 > /etc/gtk-2.0/gtk.immodules,

gtk.immodules文件中可能有多个输入模块,如果确认只用 scim-bridge 的话,那就删除其他的设备吧。设置环

境变量

export XDG_CONFIG_DIRS=/share:/usr/share:/xroot/share

export

XDG_DATA_DIRS=/share:/usr/share:/xroot/share

export LC_ALL=C

export

DISPLAY=:0.0

export LD_LIBRARY_PATH=/lib

export

TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export

TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_PLUGINDIR=/lib/ts

export

TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export

XIM=SCIM

export XIM_PROGRAM=SCIM

export LANG="zh_CN"

export

XMODIFIERS="@im=SCIM"

export GTK_IM_MODULE="scim-bridge"启

动进程:

Xfbdev &

scim -d &

matchbox-desktop

&

matchbox-window-manager &

scim-bridge &

用程序 ...配置信息:

Xfbdev -screen 宽x高@旋转角度 -mouse dev 等等

xfbdev -h

scim 可以设置启用何种输入法,前后台服务协议 scim -h

matchbox-desktop

可以设定背景色等。bg

matchbox-window-manager 可以设定采用何种主题。 /share/themes

阅读(522) | 评论(0) | 转发(0) |

 类似资料: