Kphone 是其于QT界面的开源SIP 软件电话,支持语音,视频和文字消息交流.经测试,可以在Redhat 9.0 直接编译通过.在Arm-Linux 上需要比较多移植工作以下是Kphone 是在ok6410 ,Arm-Linux 2.6.11 内核移植过程
Kphone 移植对内核要求:
Qte 3.3.4 的编译
1.解压源码
tar xfvj qt-embedded-free-3.3.4.tar.bz2
mv qt-embedded-free-3.3.4/ qt
2.创建Makefile
(echo yes ; echo yes )|./configure -prefix $PWD/.. /_install -embedded arm -depths 4,8,16,32 -no-cups
# -embedded arm 表示用arm编译器,depths 表示显示位数
3.编译
make sub-src
4.make install
openssl 的编译
kphone 的编译需要ssl库.
1.解压源码
tar xvzf openssl-0.9.7e.tar.gz
mv openssl-0.9.7e openssl
2.创建Makefile
./Configure linux-elf-arm --prefix=$PWD/.. -no-fips
# -no-fips 表示不需要fips 支持,arm-linux 编译通不过
echo "y">patch -p1 Makefile< arm-linux.patch
#修改Makefile ,将其所有gun 工具改为arm-linux-的版本包括 gcc,ar
编译共享openssl 版本,去掉fips库即
SHLIBDIRS= fips crypto ssl 改成SHLIBDIRS= crypto ssl
3.编译
make #编译openssl静态库
make build-shared #open编译openssl动态库
kphone 的编译
1.解压源码
tar xvzf kphone-4.2.tar.gz
2.修改configure 脚本
patch -p1 configure < kphone.conf.patch
Configure 1608 将{ echo "configure: error: libssl not found" 1>&2; exit; }改写成{ echo "configure: error: libssl not found" 1>&2;}
跳过对libssl 的检查
3.生成Makefile
./configure --host=arm-linux --disable-alsa --enable-thread=no # --host采用arm-linux 编译,关闭alsa 声音驱动支持,关闭Qthread 的支持(QTE不支持)
4.修改Makefile
a)主模块Makefile 修改
patch -p1 Makefile < kphone.patch #主要是增加编译器支持,强制指定的arm gcc 3.3.2 为编译
修改如下,采用这个写法,主要是kphone 有多个Makefile 需要修改,为了减少工作量,统一在主Makefile 定义路径
CROSS_PREFIX=/usr/local/arm/3.3.2/bin/arm-linux-export CROSS_PREFIX
b)子模块的Makefile 修改
Kphone 有三个子模块, gsm,(GSM语音编码,解码库) , ilbc (ILBC 语音解码库),dissipate2 (SIP 协议栈),对其Makefile 修改如下
CXX=$(CROSS_PREFIX)g++ #把C++编译器改为arm-linux 版本
CC=$(CROSS_PREFIX)gcc #把C编译器改为arm-linux 版本
$(CROSS_PREFIX)ar rcs $@ $(OBJS) #把ar改为arm-linux 版本
CXXFLAGS=$(CFLAGS) -fno-exceptions -fno-rtti #关闭了C++异常机制和运行时类型信息
CFLAGS=-I$(QTEDIR)/include -I$(OPENSSL)/include -DQWS -Wall -O3 -I. -I.. -DHAVE_CONFIG_H
#头文件目录改为指向QTE目录,openssl 目录,-DQWS宏是一个重要宏,表示采用嵌入式库进行编译.而非X11 的机制
MOC=$(QTEDIR)/bin/moc #把moc 用3.3.4的编译工具,而不能用桌面机的MOC
LIBS=-L$(QTEDIR)/lib -L$(OPENSSL) -lqte -lm -lssl -lcrypto –lresolv #库目录指QTE和openssl 目录
c)Kphone 应用程序Makefile的修改
Kphone 的修改类似于子模块的修改.
5.修改源码
a)嵌入式版本并未定义 PO_DIR,SHARE_DIR,为简化编译,在kphone.h 定义这两个宏定义
b)Trayicon.cpp 采用桌面的X11一些机制,所以将里面所有函数全部清空
6.编译
编译前要求预先设置几个环境变量,以便Make能设定一些值,主要是如下几个
export set QTDIR=$PWD/qt
export set QTEDIR=$QTDIR
export set OPENSSL=$PWD/openssl
make
7执行
.aaa