TC开发文档

目录

I. 为开发机安装Linux
1. 硬件环境
2. 操作系统
3. 安装CentOS
II. 编译
4. 编译准备
4.1 符号说明
4.2 安装第三方软件
4.3 创建工作目录
4.4 客户端预启动界面中文支持
5. 编译buildroot
5.1. 设置环境变量
6. 编译expat
7. 编译dbus
8. 编译qt
8.1 修改部分qt文件
8.2 为交叉编译链编译qt库
8.3 编译lupdate
8.4 编译codeeditor
8.5 编译qt运行库
9. 编译libmeegotouch
9.1 设置环境变量
9.2 修改libmeegotouch部分文件
9.3 编译mgen
9.4 编译mmoc
9.5 为交叉编译链编译libmeegotouch
9.5 编译libmeegotouch运行库
10. 编译busybox
11. 编译e2fsck
12. 编译curl
13. 编译grub
14. 编译seabios
15. 编译linux内核
16. 编译QEMU
17. 编译lz4
18. 编译rsync
19. 编译zlib
20. 编译libxml2
21. 编译openssl
22. 编译TC软件包
III. 附录
23. 第三方软件参考链接
24. 第三方软件的配置和修改内容
24.1 buildroot
24.2. qt
24.3. libmeegotouch
24.4 busybox
24.5 grub
24.6 seabios
24.7 linux
IV. 文档修改历史
25. 文档修改历史
25.1 Rev.2.170726.1
25.2 Rev.2.170818.1
25.3 Rev.2.170821.1
25.4 Rev.2.170901.1
25.5 Rev.2.170904.1
25.6 Rev.2.170914.1
25.7 Rev.2.180115.1
25.8 Rev.2.180319.1
25.9 Rev.2.180322.1
25.10 Rev.2.180521.1
25.11 Rev.2.180629.1
25.12 Rev.2.180702.1
25.13 Rev.2.180720.1
25.14 Rev.2.180720.1
25.15 Rev.2.181112.1
25.16 Rev.2.190129.1
 

I  为开发机安装Linux

1. 硬件环境

一台普通PC,内存不小于2GiB,硬盘容量不小于30GiB,英特尔赛扬及以上处理器。

2. 操作系统

TC项目的绝大多数模块都放到Linux系统编译,以目前使用的64位CentOS系统为例来说明如何搭建TC开发环境,当前使用的版本是6.7,操作系统镜像文件的下载地址在附录中已列出。

3. 安装CentOS

安装CentOS的方法很多,如光盘安装,优盘安装等,本手册以优盘安装为例进行说明。用户可自行上网搜索教程,制作CentOS启动优盘。从优盘启动服务器。从优盘启动成功后,看到如下图的安装界面。

boot-01.png

选择第一项,然后敲击“Enter”键,在完成内核加载及硬件识别等步骤之后,弹出如下的配置界面。

boot-02.png

选择安装过程中使用的语言为“English”,然后使用Tab键将光标定位到“OK”上,然后敲击“Enter”键,将弹出如下图所示的键盘布局列表。

boot-03.png

选择“us”键盘布局,光标定位到“OK”按钮后,按“Enter”键,弹出如下菜单,选择安装文件所在的介质。

boot-04.png

这里是使用优盘来安装的,所以选择“Hard drive”,然后点击“OK”键。

boot-05.png

在上图中选择优盘分区“/dev/sdb4”,然后点击“OK”键,出现如下界面。

boot-06.png

在上图界面等待几秒钟时间,弹出了如下图所示的窗口。

boot-07.png

点击右下角的“Next”按钮。

boot-08.png

根据实际情况,选择安装过程中使用存储设备,本台服务器上只有一块硬盘用来作为安装系统,所以选择“Basic Storage Devices”,然后点击右下角的“Next”。

    1) 如果服务器硬盘未曾分区或尚未安装过操作系统,则可能弹出如下界面。

boot-09.png

上图提示未从存储设备中检测到分区,是否清除存储设备中的数据。选择图中的“Yes, discard any data”,然后点击右下角的“Next”。

    2) 如果服务器硬盘已安装过操作系统,则可能弹出如下提示。

boot-10.png

上图提示本台机器已经被安装了操作系统。TC系统每次安装都务必执行“全新安装”,所以从上图中选择全新安装“Fresh Installation”,然后点击右下角的“Next”。

boot-11.png

根据情况,为此台机器取个名字,我们在此处输入“buildmachine”,然后点击右下角的“Next”。

boot-12.png

根据情况,选择“Asia/Shanghai”,然后点击右下角的“Next”。

boot-13.png

设置管理员账号(即root)的密码,然后点击右下角的“Next”。

boot-13-2.png

如选择的密码较弱,可以选择“Cancel”重新修改,完成设置密码后,弹出如下界面。

boot-14.png

选择安装类型为“Create Custom Layout”,然后点击右下角的“Next”。

boot-15.png

创建一个ext4分区挂载到“/”,并创建一个swap分区。点击“Next”。

boot-16.png

点击“Write changes to disk”。

boot-17.png

选择boot loader的安装位置为本机硬盘的MBR。点击“Next”。

boot-18.png

在上图中选择“Minimal Desktop”,点击“Next”。

boot-19.png

上图表示系统已经在安装,安装结束后,弹出如下界面。

boot-20.png

拔掉优盘,然后点击右下角的“Reboot”重启系统,务必配置从硬盘启动系统,启动后可以看到系统如下界面。

boot-21.png

屏幕下方还显示了系统启动的进度。

boot-22.png

之后是一个“Welcome”界面。

boot-23.png

点击右下角的“Forward”按钮。

boot-24.png

选择“Yes, I agree to the Lincense/Agreement”,然后点击右下角的“Forward”。

boot-25.png

根据需要,创建用户。此处我们不再创建用户,点击右下角的“Forward”。

boot-26.png

在弹出的窗口中点击“Yes”。

boot-27.png

设置时间,然后点击右下角的“Forward”。

boot-28.png

设置Kdump,默认为“Enable”状态,Memory为128MB,点击右下角的“Finish”。

boot-29.png

在弹出的窗口中点击“Yes”。

boot-30.png

在接下来的消息框中点击“OK”,系统将重新启动。

boot-31.png

系统重启后将进入登录界面,点击“Others”。

boot-32.png

在“Username”输入框中输入用户名为“root”,点击“Enter”键。

boot-33.png

在“Password”输入框中输入管理员登录密码,再点击“Enter”键。

boot-34.png

就正式登录到系统了。

II. 编译

4. 编译准备

4.1 符号说明

为方便阅读,本文后续部分中,每条Linux Shell命令之前都加入了字符“$”。另外,对于长度超过一行的Linux Shell命令,文中以反斜杠“\”作为续行符放到行尾。

然后通过命令

$ rpm -ivh --force --nodeps <filename>

逐个安装上述软件包,filename是上述rpm文件名。

4.3 创建工作目录

如果曾在当前系统上编译过旧的开发软件包,需运行以下命令将其删除,再继续剩余步骤。

$ rm -rf /root/TC
$ rm -rf /root/qte

运行以下命令创建目录。

$ mkdir -p /root/TC/root64
$ mkdir -p /root/qte

4.4 客户端预启动界面中文支持

TC客户机预启动界面缺省情况下是不支持中文显示的,执行本小节的以下步骤可开启中文支持。

在开发机上运行以下命令创建目录存放字体文件。

$ mkdir -p /root/TC/fonts

从Windows* 中文系统拷贝一个字体文件到上述字体目录。下面介绍如何拷贝Windows* 7 简体中文版的字体文件C:\Windows\Fonts\simfang.ttf到以上字体目录。首先准备一个文件系统为FAT32格式的优盘,从Windows 7系统拷贝字体文件到优盘根目录,将优盘插到TC服务器的USB接口,运行下列命令挂载优盘。

$ mount /dev/sdb1 /mnt

上述命令假设优盘分区的设备文件被识别为“/dev/sdb1”,用户可以使用命令,的“fdisk -l”查看优盘分区的设备文件节点,根据情况替换上述命令中“/dev/sdb1”,然后运行下列命令拷贝字体文件到刚刚创建的服务器字体目录。

$ cp /mnt/simfang.ttf /root/TC/fonts/

完成以上步骤后,可运行下列命令卸载优盘,卸载后即可从服务器拔掉优盘。

$ umount /dev/sdb1

用户可根据偏好选择除simfang.ttf之外的字体文件。

5. 编译buildroot

本节介绍如何编译交叉编译工具链buildroot。

如果先前已经编译过buildroot,请先运行如下命令将其完全删除。

$ rm -rf /root/TC/buildroot-2016.08.1

下载buildroot-2016.08.1.tar.bz2,然后运行下列命令解压之。

$ tar jxf buildroot-2016.08.1.tar.bz2 -C /root/TC
$ cd /root/TC/buildroot-2016.08.1

然后运行下列命令生成配置文件.config。

$ make defconfig

参考第三方软件的配置和修改内容一章对修改内容格式的介绍,手动修改相关文件,或使用这一章提供的工具export-content-from.sh导出本文档的修改内容,然后使用linux系统的patch命令自动修改文件。建议使用后一种方式,对后续软件的修改可参照此方法。

确保计算机连接到因特网,然后运行如下命令编译。

$ make

5.1. 设置环境变量

将字符串/root/TC/buildroot-2016.08.1/output/host/usr/bin追加到PATH环境变量中,以便后续编译各软件包时使用交叉编译工具链。

$ export PATH=/root/TC/buildroot-2016.08.1/output/host/usr/bin:$PATH

可以通过如下命令查看路径是否成功添加到环境变量PATH中。

$ echo $PATH

输出结果可能为:

/root/TC/buildroot-2016.08.1/output/host/usr/bin:/root/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

请继续在当前终端完成后续步骤。

如需要在新的终端环境下编译,须在所使用的终端按照上述命令设置环境变量。

6. 编译expat

下载expat-2.0.1.tar.gz然后依次运行下列命令编译。

$ tar zxf expat-2.0.1.tar.gz -C /root/TC
$ cd /root/TC/expat-2.0.1
$./configure --host=i686-linux --prefix=/usr --exec-prefix=/usr \
--sysconfdir=/etc --localstatedir=/var
$ make DESTDIR=/root/TC/buildroot-2016.08.1/output/target install
$ make DESTDIR=/root/TC/buildroot-2016.08.1/output/\
host/usr/i686-buildroot-linux-gnu/sysroot install

7. 编译dbus

下载dbus-1.4.10.tar.gz然后依次运行下列命令编译。

$ tar zxf dbus-1.4.10.tar.gz -C /root/TC
$ cd /root/TC/dbus-1.4.10
$ ./configure --host=i686-linux --prefix=/usr --exec-prefix=/usr \
--sysconfdir=/etc --localstatedir=/var --datarootdir=/usr/share \
--with-dbus-daemondir=/usr/bin --without-x
$ make DESTDIR=/root/TC/buildroot-2016.08.1/output/target install
$ make DESTDIR=/root/TC/buildroot-2016.08.1/output/\
host/usr/i686-buildroot-linux-gnu/sysroot install

8. 编译qt

8.1 修改部分qt文件

下载qt-everywhere-opensource-src-4.7.3.tar.gz然后依次运行下列命令。

$ tar zxf qt-everywhere-opensource-src-4.7.3.tar.gz -C /root/TC
$ cd /root/TC/qt-everywhere-opensource-src-4.7.3

按照附录修改部分文件内容。

完成修改后,通过如下命令将修改后的/root/TC/qt-everywhere-opensource-src-4.7.3目录拷贝至/root/qte,以待后续步骤继续使用修改后的qt源文件。

$ cp -a /root/TC/qt-everywhere-opensource-src-4.7.3 /root/qte/

8.2 为交叉编译链编译QT库

首先设置环境变量。

$ export PKG_CONFIG_PATH=/root/TC/buildroot-2016.08.1/output/\
staging/usr/lib/pkgconfig

切换工作目录。

cd /root/TC/qt-everywhere-opensource-src-4.7.3

按照如下方式运行configure脚本。

$ ./configure -opensource -confirm-license -release -shared \
-embedded x86 -xplatform qws/linux-i686-g++ -force-pkg-config \
-no-glib -largefile -no-qt3support -depths 16,24,32 \
-qt-gfx-linuxfb -no-gfx-transformed -no-gfx-qvfb -no-gfx-vnc \
-no-gfx-qnx -no-gfx-multiscreen -no-gfx-directfb -qt-mouse-pc \
-no-mouse-linuxtp -no-mouse-tslib -no-mouse-qvfb -no-mouse-qnx \
-qt-mouse-linuxinput -qt-kbd-tty -no-kbd-qvfb -no-kbd-qnx \
-qt-kbd-linuxinput -little-endian -qt-zlib -qt-libjpeg -qt-gif \
-qt-libmng -qt-libpng -no-libtiff -qt-freetype -no-openssl -svg \
-dbus \
-I/root/TC/buildroot-2016.08.1/output/staging/usr/include/dbus-1.0 \
-I/root/TC/buildroot-2016.08.1/output/staging/usr/lib/\
dbus-1.0/include \
-no-sql-sqlite -no-xmlpatterns -no-multimedia \
-no-audio-backend -no-phonon -no-phonon-backend -no-webkit \
-no-script -no-scripttools -no-javascript-jit -stl -no-xinerama \
-no-cups -no-nis -no-accessibility -no-separate-debug-info \
-prefix /usr \
-hostprefix /root/TC/buildroot-2016.08.1/output/host/usr/\
i686-buildroot-linux-gnu/sysroot \
-plugindir /usr/lib/qt-4.7.3/plugins \
-fast -no-rpath -nomake examples -nomake demos -qconfig cust

最后运行如下命令编译。

$ gmake
$ gmake install

8.3 编译lupdate

使用以下命令编译。

$ cd /root/TC/qt-everywhere-opensource-src-4.7.3/tools/linguist/lupdate
$ /root/TC/qt-everywhere-opensource-src-4.7.3/bin/qmake
$ make

编译结束后运行如下命令拷贝目标文件到指定目录。

$ cp /root/TC/qt-everywhere-opensource-src-4.7.3/bin/lupdate \
/root/TC/buildroot-2016.08.1/output/host/usr/\
i686-buildroot-linux-gnu/sysroot/bin

8.4 编译codeeditor

编译codeeditor。

$ cd /root/TC/qt-everywhere-opensource-src-4.7.3/examples/\
widgets/codeeditor
$ /root/TC/qt-everywhere-opensource-src-4.7.3/bin/qmake
$ make

8.5 编译qt运行库

确保/root/qte/qt-everywhere-opensource-src-4.7.3目录的源文件是按照附录修改的。然后通过如下命令设置环境变量。

$ export PKG_CONFIG_PATH=/root/TC/buildroot-2016.08.1/output/staging/usr/lib/pkgconfig

切换工作目录。

$ cd /root/qte/qt-everywhere-opensource-src-4.7.3

按照如下方式运行configure脚本。

$ ./configure -opensource -confirm-license -release -shared \
-embedded x86 -xplatform qws/linux-i686-g++ -force-pkg-config \
-no-glib -largefile -no-qt3support -depths 16,24,32 \
-qt-gfx-linuxfb -no-gfx-transformed -no-gfx-qvfb -no-gfx-vnc \
-no-gfx-qnx -no-gfx-multiscreen -no-gfx-directfb -qt-mouse-pc \
-no-mouse-linuxtp -no-mouse-tslib -no-mouse-qvfb -no-mouse-qnx \
-qt-mouse-linuxinput -qt-kbd-tty -no-kbd-qvfb -no-kbd-qnx \
-qt-kbd-linuxinput -little-endian -qt-zlib -qt-libjpeg -qt-gif \
-qt-libmng -qt-libpng -no-libtiff -qt-freetype -no-openssl -svg \
-dbus \
-I/root/TC/buildroot-2016.08.1/output/staging/usr/include/dbus-1.0 \
-I/root/TC/buildroot-2016.08.1/output/staging/usr/lib/\
dbus-1.0/include \
-no-sql-sqlite -no-xmlpatterns -no-multimedia \
-no-audio-backend -no-phonon -no-phonon-backend -no-webkit \
-no-script -no-scripttools -no-javascript-jit -stl -no-xinerama \
-no-cups -no-nis -no-accessibility -no-separate-debug-info \
-prefix /usr \
-hostprefix /usr \
-plugindir /usr/lib/qt-4.7.3/plugins \
-fast -no-rpath -nomake examples -nomake demos -qconfig cust

最后运行如下命令编译。

$ gmake
$ gmake install

9. 编译libmeegotouch

下载libmeegotouch-0.23.5-1.tar.gz。如下载后文件名不是libmeegotouch-0.23.5-1.tar.gz,先运行如下命令将其重命名为libmeegotouch-0.23.5-1.tar.gz。

$ mv <download-filename> libmeegotouch-0.23.5-1.tar.gz

其中<download-filename>为下载保存的文件名。

再运行如下命令解压之。

$ tar zxf libmeegotouch-0.23.5-1.tar.gz -C /root/TC

9.1 设置环境变量

通过如下命令设置环境变量。

$ export QTDIR=/root/TC/qt-everywhere-opensource-src-4.7.3
$ export PKG_CONFIG_PATH=/root/TC/buildroot-2016.08.1/output/host/\
usr/i686-buildroot-linux-gnu/sysroot/lib/pkgconfig:/root/TC/\
buildroot-2016.08.1/output/host/usr/i686-buildroot-linux-gnu/\
sysroot/usr/lib/pkgconfig
$ export PKG_CONFIG_LIBDIR=/root/TC/buildroot-2016.08.1/output/host/\
usr/i686-buildroot-linux-gnu/sysroot/lib:/root/TC/\
buildroot-2016.08.1/output/host/usr/i686-buildroot-linux-gnu/\
sysroot/usr/lib

9.2 修改libmeegotouch部分文件

切换到/root/TC/libmeegotouch-0.23.5-1目录。

$ cd /root/TC/libmeegotouch-0.23.5-1

参考附录修改相关文件。

修改结束后,通过如下命令拷贝已修改结束的libmeegotouch源文件到/root/qte目录。

$ cp -a /root/TC/libmeegotouch-0.23.5-1 /root/qte/

然后到/root/TC/libmeegotouch-0.23.5-1目录下运行如下命令生成Makfile。

$ ./configure --prefix=/root/TC/buildroot-2016.08.1/output/host/usr/\
i686-buildroot-linux-gnu/sysroot/usr \
--host=i686-linux \
--sysconfdir=/etc -no-opengl -dbus -no-gconf -no-icu \
-no-meegographicssystem -no-debug -release

9.3 编译mgen

使用下列命令编译之。

$ cd /root/TC/libmeegotouch-0.23.5-1/mgen
$ /root/TC/qt-everywhere-opensource-src-4.7.3/bin/qmake
$ make

9.4 编译mmoc

使用下列命令编译之。

$ cd /root/TC/libmeegotouch-0.23.5-1/mmoc
$ /root/TC/qt-everywhere-opensource-src-4.7.3/bin/qmake
$ make

运行下列命令拷贝目标文件到指定目录。

$ cp mmoc /usr/bin/

9.5 为交叉编译链编译libmeegotouch

使用下列命令编译libmeegotouch。

$ cd /root/TC/libmeegotouch-0.23.5-1
$ make
$ make install

9.6 编译libmeegotouch运行库

首先设置环境变量。

$ export QTDIR=/root/TC/qt-everywhere-opensource-src-4.7.3
$ export PKG_CONFIG_PATH=/root/TC/buildroot-2016.08.1/output/host/\
usr/i686-buildroot-linux-gnu/sysroot/lib/pkgconfig:/root/TC/\
buildroot-2016.08.1/output/host/usr/i686-buildroot-linux-gnu/\
sysroot/usr/lib/pkgconfig
$ export PKG_CONFIG_LIBDIR=/root/TC/buildroot-2016.08.1/output/host/\
usr/i686-buildroot-linux-gnu/sysroot/lib:/root/TC/\
buildroot-2016.08.1/output/host/usr/i686-buildroot-linux-gnu/\
sysroot/usr/lib

然后运行下列命令编译。

$ cd /root/qte/libmeegotouch-0.23.5-1
$ ./configure --prefix=/usr --host=i686-linux \
--sysconfdir=/etc -no-opengl -dbus -no-gconf \
-no-icu -no-meegographicssystem -no-debug -release
$ make

10. 编译busybox

下载 busybox-1.25.1.tar.bz2然后运行下列命令。

$ tar jxf busybox-1.25.1.tar.bz2 -C /root/TC
$ cd /root/TC/busybox-1.25.1
$ make defconfig && sed -i 4d .config

按照附录修改相关文件然后,运行如下命令编译。

$ make

11. 编译e2fsck

下载e2fsprogs-1.42.tar.gz然后运行下列命令。

$ tar zxf e2fsprogs-1.42.tar.gz -C /root/TC
$ cd /root/TC/e2fsprogs-1.42
$./configure --host=i686-linux --prefix=/ --exec-prefix=/ \
--sysconfdir=/etc --localstatedir=/var
$ make

12. 编译curl

下载curl-7.57.0.tar.bz2然后运行下列命令。

$ tar jxf curl-7.57.0.tar.bz2 -C /root/TC
$ cd /root/TC/curl-7.57.0
$ ./configure --prefix=/ --host=i686-linux --disable-dict \
--disable-static --disable-rtsp --disable-ftp --disable-gopher \
--disable-imap --disable-pop3 --disable-smtp --disable-telnet \
--disable-tftp --with-ssl --without-zlib
$ make

13. 编译grub

下载 grub_0.97.orig.tar.gzgrub_0.97-68.diff.gz 到/root/TC目录,然后执行如下命令解压和打补丁。

$ tar zxf grub_0.97.orig.tar.gz -C /root/TC
$ cd /root/TC/grub-0.97
$ zcat /root/TC/grub_0.97-68.diff.gz | patch -p1

然后按照附录修改相关文件,修改结束后,运行如下命令编译之。

$ export CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
$ ./configure --host=i686-linux --prefix=/usr --exec-prefix=/usr \
--sysconfdir=/etc --localstatedir=/var --disable-auto-linux-mem-opt \
--disable-graphics --disable-hercules --enable-serial \
--enable-ext2fs --enable-fat --disable-ffs --disable-ufs2 \
--disable-minix --disable-reiserfs --disable-vstafs --disable-jfs \
--disable-xfs --disable-iso9660 --disable-gunzip \
--disable-md5-password --without-curses
$ make

14. 编译seabios

下载seabios-1.9.0.tar.gz然后运行下列命令。

$ tar xzf seabios-1.9.0.tar.gz -C /root/TC
$ cd /root/TC/seabios-1.9.0
$ make defconfig && make clean

按照附录修改部分文件,然后运行下列命令。

$ make

15. 编译linux内核

下载linux-3.18.40.tar.xz然后运行下列命令。

$ tar Jxf linux-3.18.40.tar.xz -C /root/TC
$ cd /root/TC/linux-3.18.40
$ make defconfig

按照附录内容修改文件相关文件。

修改完成后,运行如下命令编译内核。

$ make bzImage
$ make modules

16. 编译QEMU

下载qemu-2.10.1.tar.xz然后运行下列命令。

$ tar Jxf qemu-2.10.1.tar.xz -C /root/TC
$ cd /root/TC/qemu-2.10.1

按照附录内容修改相关文件。修改完成后,运行如下命令编译QEMU。

$ export PKG_CONFIG=/root/TC/buildroot-2016.08.1/output/host/usr/bin/pkg-config
$ ./configure --prefix=/usr --cross-prefix=i686-linux- --target-list=i386-softmmu,x86_64-softmmu
$ make
$ make DESTDIR=/root/TC/buildroot-2016.08.1/output/target install
$ unset PKG_CONFIG

17. 编译lz4

下载lz4-1.8.1.2.tar.gz,如下载文件名不是lz4-1.8.1.2.tar.gz,先将其重命名为lz4-1.8.1.2.tar.gz,然后运行下列命令编译之。

$ tar zxf lz4-1.8.1.2.tar.gz -C /root/TC
$ cd /root/TC/lz4-1.8.1.2/lib
$ make CC=gcc
$ make install
$ make clean
$ cd /root/TC/lz4-1.8.1.2
$ make CC=i686-linux-gcc
$ cp -a lib/lz4frame.h /root/TC/buildroot-2016.08.1/output/staging/usr/include/
$ cp -a lib/liblz4.so* /root/TC/buildroot-2016.08.1/output/staging/usr/lib/

18. 编译rsync

下载rsync-3.1.2.tar.gz然后运行下列命令编译之。

$ tar zxf rsync-3.1.2.tar.gz -C /root/TC
$ cd /root/TC/rsync-3.1.2
$ ./configure --host=i686-linux --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make

19. 编译zlib

下载zlib-1.2.11.tar.gz然后运行下列命令编译之。

$ tar zxf zlib-1.2.11.tar.gz -C /root/TC
$ cd /root/TC/zlib-1.2.11
$ ./configure
$ make
$ make DESTDIR=/root/TC/root64 install

20. 编译libxml2

下载libxml2-2.9.8.tar.gz然后运行下列命令编译之。

$ tar zxf libxml2-2.9.8.tar.gz -C /root/TC
$ cd /root/TC/libxml2-2.9.8
$ export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
$ ./configure CPPFLAGS=-D_GNU_SOURCE
$ make
$ make DESTDIR=/root/TC/root64 install

21. 编译openssl

下载openssl-1.0.2k.tar.gz然后运行下列命令编译之。

$ tar zxf openssl-1.0.2k.tar.gz -C /root/TC
$ cd /root/TC/openssl-1.0.2k
$ ./Configure -D_GNU_SOURCE no-threads linux-x86_64
$ make
$ make DESTDIR=/root/TC/root64 install

22. 编译TC软件包

在开发机上解压TC项目组提供的软件发行包,对于Source Code Release,软件包的文件名为TC_1910_Source_Release.tar.gz;对于Binary Release,软件包的文件名为TC_1910_Binary_Release.tar.gz。二者的后续操作步骤相同,本节后续将以Source Code Release为例来说明如何制作服务器安装包及镜像导出工具。

$ tar zxf TC_1910_Source_Release.tar.gz -C /root/Documents

下载下面列出的85个文件并放到解压产生的目录/root/Documents/TC_1910_Source_Release/3rdParty及其子目录内,各个文件的具体存放位置如描述如图所示。

/root/Documents/TC_1910_Source_Release/3rdParty/
├── ramdisk/
│   └── meegotouchtheme_0.21.14-1+0m6.tar.gz
└── server/
    ├── centos7/
    │   ├── dnsmasq-2.76-2.el7.x86_64.rpm
    │   ├── libpng-1.5.13-7.el7_2.x86_64.rpm
    │   ├── lz4-1.8.1.2.tar.gz
    │   ├── mysql-libs-5.1.73-5.el6_6.x86_64.rpm
    │   ├── net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
    │   ├── openssl-1.0.2k-8.el7.x86_64.rpm
    │   ├── psmisc-22.20-15.el7.x86_64.rpm
    │   ├── pv-1.4.6-1.el7.x86_64.rpm
    │   ├── qrencode-3.4.1-3.el7.x86_64.rpm
    │   ├── rsync-3.1.2-4.el7.x86_64.rpm
    │   ├── xampp-linux-x64-1.8.3-5-installer.run
    │   ├── gcc/
    │   │   ├── cpp-4.8.5-16.el7.x86_64.rpm
    │   │   ├── gcc-4.8.5-16.el7.x86_64.rpm
    │   │   ├── glibc-devel-2.17-196.el7.x86_64.rpm
    │   │   ├── glibc-headers-2.17-196.el7.x86_64.rpm
    │   │   ├── kernel-headers-3.10.0-693.el7.x86_64.rpm
    │   │   ├── libmpc-1.0.1-3.el7.x86_64.rpm
    │   │   └── mpfr-3.1.1-4.el7.x86_64.rpm
    │   ├── krn957/
    │   │   ├── libselinux-2.5-14.1.el7.x86_64.rpm
    │   │   ├── libselinux-python-2.5-14.1.el7.x86_64.rpm
    │   │   ├── libselinux-utils-2.5-14.1.el7.x86_64.rpm
    │   │   ├── libsemanage-2.5-14.el7.x86_64.rpm
    │   │   ├── libsepol-2.5-10.el7.x86_64.rpm
    │   │   ├── linux-firmware-20180911-69.git85c5d90.el7.noarch.rpm
    │   │   ├── kernel-3.10.0-957.21.3.el7.x86_64.rpm
    │   │   ├── kernel-headers-3.10.0-957.21.3.el7.x86_64.rpm
    │   │   ├── kernel-tools-3.10.0-957.21.3.el7.x86_64.rpm
    │   │   ├── kernel-tools-libs-3.10.0-957.21.3.el7.x86_64.rpm
    │   │   ├── policycoreutils-2.5-29.el7_6.1.x86_64.rpm
    │   │   ├── selinux-policy-3.13.1-229.el7_6.12.noarch.rpm
    │   │   └── selinux-policy-targeted-3.13.1-229.el7_6.12.noarch.rpm
    │   ├── ntfs/
    │   │   ├── gnutls-3.3.26-9.el7.x86_64.rpm
    │   │   ├── nettle-2.7.1-8.el7.x86_64.rpm
    │   │   ├── ntfs-3g-2017.3.23-11.el7.x86_64.rpm
    │   │   ├── ntfsprogs-2017.3.23-11.el7.x86_64.rpm
    │   │   └── trousers-0.3.14-2.el7.x86_64.rpm
    │   └── smb/
    │   │   ├── avahi-libs-0.6.31-17.el7.x86_64.rpm
    │   │   ├── cups-libs-1.6.3-29.el7.x86_64.rpm
    │   │   ├── libldb-1.1.29-1.el7.x86_64.rpm
    │   │   ├── libtalloc-2.1.9-1.el7.x86_64.rpm
    │   │   ├── libtdb-1.3.12-2.el7.x86_64.rpm
    │   │   ├── libtevent-0.9.31-1.el7.x86_64.rpm
    │   │   ├── libwbclient-4.6.2-12.el7_4.x86_64.rpm
    │   │   ├── pytalloc-2.1.9-1.el7.x86_64.rpm
    │   │   ├── samba-4.6.2-12.el7_4.x86_64.rpm
    │   │   ├── samba-client-libs-4.6.2-12.el7_4.x86_64.rpm
    │   │   ├── samba-common-4.6.2-12.el7_4.noarch.rpm
    │   │   ├── samba-common-libs-4.6.2-12.el7_4.x86_64.rpm
    │   │   ├── samba-common-tools-4.6.2-12.el7_4.x86_64.rpm
    │   │   └── samba-libs-4.6.2-12.el7_4.x86_64.rpm
    │   ├── perl
    │   │   ├── perl-5.16.3-294.el7_6.x86_64.rpm
    │   │   ├── perl-Carp-1.26-244.el7.noarch.rpm
    │   │   ├── perl-constant-1.27-2.el7.noarch.rpm
    │   │   ├── perl-Encode-2.51-7.el7.x86_64.rpm
    │   │   ├── perl-Exporter-5.68-3.el7.noarch.rpm
    │   │   ├── perl-File-Path-2.09-2.el7.noarch.rpm
    │   │   ├── perl-File-Temp-0.23.01-3.el7.noarch.rpm
    │   │   ├── perl-Filter-1.49-3.el7.x86_64.rpm
    │   │   ├── perl-Getopt-Long-2.40-3.el7.noarch.rpm
    │   │   ├── perl-HTTP-Tiny-0.033-3.el7.noarch.rpm
    │   │   ├── perl-libs-5.16.3-294.el7_6.x86_64.rpm
    │   │   ├── perl-macros-5.16.3-294.el7_6.x86_64.rpm
    │   │   ├── perl-parent-0.225-244.el7.noarch.rpm
    │   │   ├── perl-PathTools-3.40-5.el7.x86_64.rpm
    │   │   ├── perl-Pod-Escapes-1.04-294.el7_6.noarch.rpm
    │   │   ├── perl-podlators-2.5.1-3.el7.noarch.rpm
    │   │   ├── perl-Pod-Perldoc-3.20-4.el7.noarch.rpm
    │   │   ├── perl-Pod-Simple-3.28-4.el7.noarch.rpm
    │   │   ├── perl-Pod-Usage-1.63-3.el7.noarch.rpm
    │   │   ├── perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm
    │   │   ├── perl-Socket-2.010-4.el7.x86_64.rpm
    │   │   ├── perl-Storable-2.45-3.el7.x86_64.rpm
    │   │   ├── perl-Text-ParseWords-3.29-4.el7.noarch.rpm
    │   │   ├── perl-threads-1.87-4.el7.x86_64.rpm
    │   │   ├── perl-threads-shared-1.43-6.el7.x86_64.rpm
    │   │   ├── perl-Time-HiRes-1.9725-3.el7.x86_64.rpm
    │   │   └── perl-Time-Local-1.2300-2.el7.noarch.rpm
    └── web/
        ├── bootbox-4.4.0.min.js
        ├── bootstrap-3.3.6.tar.gz
        ├── html5shiv-3.7.2.tar.gz
        ├── justgage-1.3.1.tar.gz
        ├── jquery-1.12.4.tar.gz
        ├── md5-2.6.0.tar.gz
        └── respond-1.4.2.tar.gz

注意:在下载以下列出的8个文件后,可能需要对文件重命名,以确保文件名和上图中贴出的文件名一致。

bootbox-4.4.0.min.js
bootstrap-3.3.6.tar.gz
html5shiv-3.7.2.tar.gz
lz4-1.8.1.2.tar.gz
justgage-1.3.1.tar.gz
md5-2.6.0.tar.gz
jquery-1.12.4.tar.gz
respond-1.4.2.tar.gz

然后运行如下命令编译生成TC服务器端安装包TC_1910_Release.tar。

注意:參考设置环境变量一节设置PATH环境变量,确认路径/root/TC/buildroot-2016.08.1/output/host/usr/bin为PATH包含的路径序列中的第一个路径。

$ cd /root/Documents/TC_1910_Source_Release
$ bash build.sh

上述命令运行成功后,将生成TC发行包TC_1910_Release.tar,文件路径为:/root/Documents/TC_1910_Source_Release/output/target/TC_1910_Release.tar。

该发行包包含客户端驱动程序、发行文档、服务器安装程序包和镜像导出工具,下图列出了发行包中的前三级目录包含的文件。

TC_1910_Release
├── client_installer/
│   ├── linux/
│   │   ├── clientControl/
│   │   └── diskDriverForLinux/
│   └── windows/
│       └── tcc_setup/
├── doc/
│   ├── TC-Development-Manual
│   ├── 英特尔®透明计算软件解决方案系统安装和操作说明手册.pdf
│   └── 英特尔®透明计算软件解决方案系统镜像制作手册.pdf
├── server_installer/
│   └── server_installer.tar
└── tool/
    ├── image_export_tool/
    │   └── tcboot.iso
    └── initializer/
        └── tc-initializer.iso
        

下面逐个对各个子目录作说明。

client_installer
该目录中包含TC客户端镜像文件中的控制程序和驱动程序,Windows7和Windows10相关的程序存放到client_installer/windows目录,Linux相关的程序存放到client_installer/linux目录。关于如何安装驱动和更新更新镜像文件中的TC应用程序,请参考“TC系统镜像制作手册”。
doc
该目录放置TC的发行文档。
server_installler
该目录存放TC服务器安装包。可将server_installer/server_installer.tar拷贝至TC服务器系统上使用,TC系统安装和配置请参阅文档“TC系统安装配置手册”。
tool
该目录包含TC相关的工具。目前包含两个工具,tcboot.iso是镜像导出工具,tc-initializer.iso是客户机硬盘初始化工具。可将这两个文件拷贝到Windows系统上,使用第三方启动优盘制作工具UltraISO将文件tcboot.iso和tc-initializer.iso分别写入两个容量不小于128MB的优盘,就制作好了优盘镜像导出工具和优盘初始化工具。使用优盘镜像导出工具导出系统镜像文件请参考“TC系统镜像制作手册”,使用优盘初始化工具初始化客户机请参考“TC系统操作说明手册”。

III  附录

23. 第三方软件参考链接

此处列出150个软件包的名字和对应的参考链接,用户完成下载完成后,如发现下载的文件名和此处列出的文件名不一致,应对下载的文件执行重命名操作,将其重命名为此处列出的名字。

24. 第三方软件的配置和修改内容

后续列出的内容是通过Linux文件比对命令

diff -Nur <OLD-FILE> <NEW-FILE>

生成的,该命令用于逐行比对文件OLD-FILE和文件NEW-FILE的内容,并以一定格式将逐行比对的结果显示出来。下面对上述命令产生的结果作简要说明。

行首连续4个字符为“diff”
该行指示本次比对的两个文件的路径
行首连续3个字符为“+++”
该行指示文件NEW-FILE的路径及其他信息
行首连续3个字符为“---”
该行指示文件OLD-FILE的路径及其他信息
行首第1个字符为“+”
该行只出现在NEW-FILE中
行首第1个字符为“-”
该行只出现在OLD-FILE中
行首连续2个字符为“@@”
该行指示OLD-FILE和NEW-FILE文件内容从特定行开始的比对结果
行首第1个字符为一个空格(“ ”)
该行的内容出现在OLD-FILE和NEW-FILE中

注意:在比对结果中,除去“diff”、“---”、“+++”、“+”、“-”和“@@”开头之外的其他行,均以一个空格开头。

提示:您可以使用附带的Linux Shell脚本export-content-from.sh从本文档中抽取对相关文件的修改内容,该脚本接收一个参数,参数表示一个HTML文档。

$ bash export-content-from.sh <html-filename>

上述命令执行成功后,产生的内容保存在工作目录的output目录中。您可方便地使用linux系统的patch命令把以下列出的修改内容写入到对应的模块中。

24.1 buildroot

对buildroot的修改如下所示。

24.2 qt

对qt的修改如下所示。

24.3 libmeegotouch

对libmeegotouch的修改如下所示。

24.4 busybox

对busybox的修改如下所示。

24.5 grub

对grub的修改如下所示。

24.6 seabios

对seabios的修改如下所示。

20.7 linux

对linux内核的修改如下所示。

20.8 QEMU

对QEMU的修改如下所示。

IV  文档修改历史

25. 文档修改历史

25.1 Rev.2.170802.1

HTML初始版本。

25.2 Rev.2.170818.1

修正了以下几个问题:

  1. rpm命令中包含中文减号“-”。
  2. 张贴的对QT等软件包修改内容中部分文字被浏览器识别为HTML标签。
  3. 编译e2fsck重复张贴的命令。
  4. 文本框不适应浏览器窗口大小。
  5. 其他一些拼写错误和不正确的跳转。

25.3 Rev.2.170821.1

添加了用于支持TC系统运行在CentOS7上所需的的第三然软件的说明。

25.4 Rev.2.170901.1

在上一版基础上做了如下修改。

  1. 更新了对buildroot和busybox的修改内容。
  2. 修改了编译busybox之前,对其相关文件的修改内容。
  3. 删除了对5个已不再使用的软件包的相关说明。
  4. 其他一些拼写错误和不正确的跳转。

25.5 Rev.2.170904.1

更新了文档中软件包的名字,增加了对buildroot编译的提示。

25.6 Rev.2.170914.1

更新了第三方软件包meegotouchtheme_0.21.14-1+0m6.tar.gz的下载链接。

25.7 Rev.2.180115.1

更新了对busybox、grub和meegotouch的修改。

25.8 Rev.2.180319.1

增加了对第三方软件包cURL的编译说明,更新了对buildroot和busybox的修改。

25.9 Rev.2.180322.1

更新了在CentOS7.4环境下编译TC软件包所需的第三方软件包。

25.10 Rev.2.180521.1

增加了对第三方软件包lz4和QEMU的编译支持,更新了buildroot和busybox的修改内容,增加了生成二维码的第三方软件包。

25.11 Rev.2.180629.1

更新了对第三方软件busybox、linux的修改内容,并增加了对zlib、libxml2和openssl的编译说明。

25.12 Rev.2.180702.1

使用红色字体标注重要内容。

25.13 Rev.2.180720.1

更新了对seabios的修改内容,修改了开发机链接的OpenSSL库版本,由1.1.0g改为1.0.2k,为TC服务器增加了OpenSSL库。

25.14 Rev.2.180905.1

升级了客户机一侧使用的rsync版本。

25.15 Rev.2.181112.1

更改了版本信息。

25.16 Rev.2.190129.1

更新了版本信息,seabios下载链接,对中文支持的描述和对buildroot、busybox及linux的修改。