参考文档:minigui1.6.10在mini2440上的移植
一、编译前准备
1.硬件环境
A. 主机
x86系列PC机。
B. 开发板
友善之臂mini2440开发板,T3.5寸液晶显示器。
2.软件环境
A. 主机操作系统
VMware虚拟机下的Fedora9
B. 开发板操作系统
嵌入式Linux,内核版本为2.6.25-14.fc9.i686
C. 交叉编译器
arm-linux-gcc-4.4.3(安装位置:/opt/FriendlyARM/toolschain/4.4.3/)。
3.相关说明
A. 命令
所有以#开头的均为在shell中执行的命令。
B. 交叉编译器位置
交叉编译器的安装位置为/opt/FriendlyARM/toolschain/4.4.3/,进行交叉编译产生的库都安装在
/usr/local/arm_zlib/目录下,参考文档里面是把交叉编译库放到交叉编译器的位置。
C. 工作目录
默认的工作目录为
/root/minigui,绝大多数操作都在此目录下进行。
D. 注释
对shell脚本进行的注释均放在该命令下一行的圆括号内。
4.下载MiniGUI图形库源码(CSDN下载)
A. 开发库
libminigui-1.6.10.tar.gz编译完成后生成三个库:它们分别是libminigui、libmgext以及libvcongui。libminigui 是提供窗口管理和图形接口的核心函数库,也提供了大量的标准控件;libmgext 是libminigui 的一个扩展库,提供了一些高级控件以及“文件打开”、“颜 {MOD}选择”对话框等;libvcongui 则为Linux操作系统提供了一个应用程序可用的虚拟控制台窗口,从而可以方便地在MiniGUI环境中运行字符界面的应用程序。
B. 资源文件
minigui-res-1.6.10.tar.gzMiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。
C. 示例程序mg-samples-str-1.6.10.tar.gz(这里我下载的是,
mg-samples-1.6.10.tar.gz,也是可以的。)
《MiniGUI编程指南》的配套示例程序。
5.下载所依赖函数库源码
A. zlib库
这是编译后面的库的基础。地址:http://www.zlib.net
/zlib-1.2.3.tar.gz
B. png库
png图片支持库。地址:http://superb-east.dl.sourceforge.net/sourceforge/libpng/
libpng-1.0.10rc1.tar.gz
C. jpeg库
jpeg图片支持库
jpegsrc.v6b.tar.gz。地址:http://www.minigui.org/downloads
D. ttf库
TrueType字体的支持库。地址:
http://nchc.dl.sourceforge.net/sourceforge/freetype/
freetype-1.3.1.tar.gz
E. popt库
编译mde需要。地址:http://gd.tuwien.ac.at/utils/rpm.org/dist/rpm-4.1.x/
popt-1.7.tar.gz
6.下载上位机仿真程序
Qt虚拟缓冲帧qvfb-1.1.tar.gz,上位机仿真需要
7.复制根文件系统(这样较麻烦,可把相应的交叉编译的库文件下载到开发板/lib目录,勿需重新烧写系统。)
所有准备文件如下图,打包名称(minigui1.6.10在mini2440上的移植)下载链接:
http://download.csdn.net/detail/mashang123456789/7531637
8.解压源码包
A. 建立工作目录及复制源码包
#mkdir /root/minigui
(创建工作目录,绝大部分相关的操作抖将在此目录下进行)
#cd /root/minigui
(进入工作目录)
#mkdir source
(创建source目录,所有的源码包都放在此目录)
#cp … source
(把所有下载的源码包复制到此目录)
#mkdir arm
(创建arm目录,所有进行交叉编译所需的源码都放在此目录)
#mkdir x86
(创建x86目录,所有进行仿真所需的源码都放在此目录)
新建的三个目录如左图所示。
B. 解压上位机仿真所需源码
#cd /root/minigui/source
(进入源码包所在目录)
(1)#tar zxvf libminigui-1.6.10.tar.gz –C ../x86
(解压MiniGUI图形库源码到x86目录,-C选项的含义是更改解压缩目录)
(2)#tar zxvf minigui-res-1.6.10.tar.gz –C ../x86
(解压MiniGUI资源文件到x86目录)
(3)#tar zxvf mg-samples-1.6.10.tar.gz –C ../x86
(解压MiniGUI示例源码到x86目录)
(4)#tar zxvf mde-1.6.10.tar.gz –C ../x86
(解压MiniGUI综合演示源码到x86目录)
(5)#tar zxvf qvfb-1.1.tar.gz –C ../x86
(解压qvfb源码到x86目录)
C. 解压交叉编译所需源码
#cd /root/minigui/source
(1)#tar zxvf libminigui-1.6.10.tar.gz –C ../arm
(解压MiniGUI图形库源码到arm目录)
(2)#tar zxvf minigui-res-1.6.10.tar.gz –C ../arm
(解压MiniGUI资源文件到arm目录)
(3)#tar zxvf mg-samples-1.6.10.tar.gz –C ../arm
(解压MiniGUI示例源码到arm目录)
(4)#tar zxvf mde-1.6.10.tar.gz –C ../arm
(解压MiniGUI综合演示源码到arm目录)
(5)#tar zxvf zlib-1.2.3.tar.gz –C ../arm
(解压zlib源码到arm目录)
(6)#tar zxvf libpng-1.0.10rc1.tar.gz –C ../arm
(解压png源码到arm目录)
(7)#tar zxvf jpegsrc.v6b.tar.gz –C ../arm
(解压jpeg源码到arm目录)
(8)#tar zxvf popt-1.7.tar.gz –C ../arm
(解压popt源码到arm目录)
(9)#tar xvzf freetype-1.3.1.tar.gz -C ../arm/
(解压字体源码)
9.目录及源码分布总览
二、建立仿真开发环境
1.安装minigui-res-1.6.10
#cd /root/minigui/x86/minigui-res-1.6.10
#make install
这样MiniGUI运行时所需的资源文件就被安装到/usr/local/lib/minigui/res/目录下。
2.编译libminigui-1.6.10
#cd /root/minigui/x86/libminigui-1.6.10
#./configure
#make
#makeinstall
库文件被安装到系统中。
3.编译mg-samples-1.6.10
#cd /root/minigui/x86/mg-samples-1.6.10
#./configure
#make
在src目录下可以看到生成的可执行程序。
4.编译mde-1.6.10
#cd /root/minigui/x86/mde-1.6.10
#./configure
#make
在各个子目录里可以看到相应的可执行演示程序。
5.编译qvfb-1.1
#cd /root/minigui/x86/qvfb-1.1
#./configure
执行上面configure语句时,就报错(如果没报错更好)
checking for Qt... configure: error: Qt (>= Qt 3.0.3) (headers and libraries) not found. Please check your installation!
报错的解决方法:参考链接
http://blog.chinaunix.net/uid-25120309-id-3045220.html
(1)下载qt-devel-3.3.8-4.fc7.i386.rpm,我们是f9,这个是f7,需要强制安装#rpm -ivh qt-devel-3.3.8-4.fc7.i386.rpm --force --nodeps
(2)# ./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3
(3)#make,然后再#make install
#make
6.在上位机上仿真MiniGUI应用程序
#qvfb –width 640 –height 480
&
这里注意两点:
(1)这里可能报错说找不到库文件,可以按照上面参考链接的方法,把/usr/local/lib添加进去。或者export LD_LIBRARY_PATH="/usr/local/lib/"
(2)这里qvfb一定要加上&,使其后台运行,若不执行,而直接执行后面的helloword,就会报错。
NEWGAL: Does not find matched engine: qvfb.
InitGUI: Can not get graphics engine information!
#cd /root/minigui/x86/mg-samples-1.6.10/src
#./helloworld
如果一切顺利的话现在就可以在qvfb上面看到MiniGUI的界面了。还有mde子目录里面的程序,也可以直接执行
三、交叉编译图形库
1.编译zlib库
由于zlib 库的configure 脚本不支持交叉编译选项,所以我们只好使用符号链接把gcc指向我们的交叉编译器arm-linux-gcc,在编译完后再改回来即可。
A. 把gcc指向我们的交叉编译器arm-linux-gcc
#cd /usr/bin
#mv gcc gcc_back
(备份gcc)
#ln -s /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc ./gcc
(创建gcc到arm-linux-gcc的符号连接)
#mvldld_back
(备份ld)
#ln -s /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-ld ./ld
(创建ld到arm-linux-ld的符号连接)
B. 交叉编译zlib库
#cd/root/minigui/arm/zlib-1.2.3
#./configure --prefix=/usr/local/arm_zlib/ --shared
(prefix选项把zlib库安装在/usr/local/arm_zlib/)
(shared说明生成共享库)
#make
#make install
C. 改回gcc
#cd /usr/bin
#rm gcc
(删除gcc到arm-linux-gcc的符号连接)
#mv gcc_back gcc
(还原gcc)
#rm ld
(删除ld到arm-linux-ld的符号连接)
#mv ld_back ld
(还原ld)
2.编译png库
这个是用来显示png图形的,MiniGUI里很多图都是png的,如果没有这个库,你的MiniGUI将无法正常工作。由于libpng 不提供有效的configure 脚本,所以只好自己动手改写Makefile文件了。
A. 改写Makefile
#cd libpng-1.0.10rc1/
#cp scripts/makefile.linux Makefile
(把Scripts 下的一个Makefile拷出来自己动手改)
#vi Makefile
#viMakefile
(自己动手改Makefile)
CC=arm-linux-gcc
prefix=/usr/local/arm_zlib
ZLIBLIB=/usr/local/arm_zlib/lib
ZLIBINC=/usr/local/arm_zlib/include
(保存)
B. 编译安装
# make
# make install
3.编译jpeg库
由于jpeg库的configure文件设计的有问题,得先用gcc编译一个dummy.c的文件,然后才能后面编译,不然的话就会出现libtool 找不到之类的错误。所以先本机编译,然后清除后,最后交叉编译即可解决这个问题。
A. 本机编译jpeg库
#cd /root/minigui/arm/jpeg-6b
#./configure --enable-shared --enable-static
#make
#make clean
B. 交叉编译jpeg库
#./configure --prefix=/usr/local/arm_zlib CC=arm-linux-gcc --enable-shared --enable-static
#make
#mkdir –p /usr/local/arm_zlib/man/man1
(安装前需要在arm-linux下建个目录,不然安装会出错,后来发现除了新建man/man1目录,还得新建bin目录:
#
mkdir -p /usr/local/arm_zlib/bin)
#make install
4.编译popt
#cd /root/minigui/arm/popt-1.7
#./configure --prefix=/usr/local/arm_zlib/ --host=arm-linux --enable-shared --enable-static
#make
#make install
5.编译libttf库
libttf 库是TrueType字体的支持库,当然可以支持也可以不支持,这个库只能全手动安装和编译,先建立一个目录来存放其有用的或者说是我们所用到的库的源文件。
A. 复制源文件
#mkdir -p /root/minigui/arm/libttf/extend
#cd /root/minigui/arm/
#cp freetype-1.3.1/lib/* freetype-1.3.1/lib/arch/ansi/* libttf/
#cp freetype-1.3.1/lib/extend/* libttf/extend/
B. 交叉编译
#cd libttf
#arm-linux-gcc -c -fPIC -O2 freetype.c
(这个C源文件包括了其它所有的.c文件)
#arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c (是大写i)
(把extend下所有的.c文件全部编译)
#arm-linux-gcc --shared -o libttf.so *.o
(生成最后的动态链接库)
#cp libttf.so /usr/local/arm_zlib/lib/
6.编译libminigui(后面把触摸屏驱动加上,还需要重新编译一次)
#cd /root/minigui/arm/libminigui-1.6.10
# ./configure --prefix=/root/minigui/arm/target --host=arm-linux --target=arm-linux --build=i386-linux --with-osname=linux --with-style=classic --with-targetname=fbcon --enable-autoial --enable-rbf16 --disable-vbfsupport CC=arm-linux-gcc
#make
#make install
(这样就会把交叉编译好的库文件和头文件安装在/root/minigui/arm/target目录)
#cp /root/minigui/arm/target/lib/* /usr/local/arm_zlib/lib/
#cp -r /root/minigui/arm/target/include/* /usr/local/arm_zlib/include/
(把交叉编译好的库文件和头文件复制到同一个库位置,便于使用)
7.编译mg-samples
执行到这里说好多没有声明,所以有两种方法:
(1)单个文件编译生成
#arm-linux-gcc helloworld.c -o helloworld -I/usr/local/arm_zlib/include -L/usr/local/arm_zlib/lib -lminigui -lmgext -lmgext -lm -lpthread -ljpeg -lpng -lttf -lz
(2)修改src中的Makefile文件,修改两处,再make就可以生成所有的arm可执行文件了。
CC = arm-linux-gcc -I/usr/local/arm_zlib/include -L/usr/local/arm_zlib/lib
LIBS = -lminigui -lmgext -lmgext -lm -lpthread -ljpeg -lpng -lttf -lz
8.编译mde
(1)修改/minigui/arm/mde-1.6.10/notebook中的Makefile,和7中一样的设置就可以了。
四、部署图形库
(参考文档是制作开发板根文件系统,然后烧写到mini2440中,参考MINIGUI移植到2440嵌入式,将相应的res文件和交叉库文件下载到mini2440开发就可以了。)
1.复制资源文件
把/usr/local/lib/minigui/res目录下的所有文件拷贝到开发板上,其开发板上的目录如下形式/usr/local/lib/minigui/res/,实际上这个目录与配置文件MiniGUI.cfg里的相应内容的目录一致,以便找到相应的资源。
可以将res文件打包
[root@mashang /]# cd /usr/local/lib/minigui/
[root@mashang minigui]# ls
res
[root@mashang minigui]# tar cvzf 1.tar.gz res/
再把1.tar.gz通过tftp或者其他方式下载到开发板/usr/local/lib/minigui/目录下,再解压就可以了,结果如下图
2将相应交叉编译的库文件下载到mini2440的/lib/目录下
网上较常见的方法就是把每个库中所有的文件都下载到开发板中,这种方法比较笨。可以先不下载这些库,到最后执行测试程序helloworld时,会报错说找不到某些库,再下载,这样可以节约mini2440有限的存储资源(64M)。必需的交叉编译库名称如下:
libminigui-1.6.so.10
libmgext-1.6.so.10
libpng.so.2
libttf.so
libz.so.1
把五个库中的这五个文件下载到开发板/lib/目录下就可以了。
3.在开发板上三处需要进行相应的配置
(1)在开发板的/etc目录下建立ld.so.conf文件,并添加如下内容:
/usr/local/lib
/usr/lib
/lib #实际上添加这个库文件目录就行了,目的是运行helloworld的时候,能找到相应的库文件,其他两个库目录可选,我加上了它,是为了系统扩展。
(2)下载MiniGui.cfg到开发板/etc/目录中
# cp /root/minigui/arm/target/etc/MiniGUI.cfg /tftpboot/
再通过tftp或者其他方式下载到开发板/etc/中,并修改部分配置:
要修改的部分基本就是上图四个框子里面部分。第一个框改成fbcon ,没有异议。第二个框子有的改成cosole或者tslib,在执行测试程序说只有dummy,所以尝试几种后就改成dummy了。第三个框子也有好几种情况,后来查看开发板/dev/input/目录,有mice和event0,后面的文档说填event0. 第三个是因为mini2440开发板用的液晶是T3.5寸的,是竖屏的,分辨率就是240*320了。这个我先写成320*240,后面执行测试程序时,会报错。但是第二三个框填什么不会报错,程序能执行,只是触摸屏不能用,这个后面会解决的。
(3)在/etc/init.d/rcS脚本文件最后添加如下内容:
1)因为要运用minigui,需要关闭qtopia,所以可以kill -9掉,或者如上图直接注释掉,根本不让启动;
2)tty后面的数字代表控制台,有的设为tty0,这里根据rcS文件中前面的部分,所以设为/dev/tty1
(4)运行测试程序(这一步就可以测试需要哪些交叉编译库了)
[root@FriendlyARM /long]# ./helloworld
至此minigui在mini2440上的移植基本完成了,各个测试程序都能正常启动运行,但是有个bug就是触摸屏不能,所以下面就来解决触摸屏的问题。
五minigui1.6.10+tslib触摸屏矫正解决方案
参考链接2:
http://blog.csdn.net/canbus/article/details/8624060
(1)交叉编译tslib-1.4.tar.gz
#tar xvzf tslib-1.4.tar.gz -C /root/minigui/arm/
# cd /root/minigui/arm/tslib/
#./autogen.sh
#./configure --host=arm-linux --prefix=/root/minigui/arm/arm_tslib
tslib安装目录不能是当前目录 /root/minigui/arm/tslib/,不然后面make
install会报错
#make
出现错误:s_test.c:(.text+0x1e4): undefined
reference to `rpl_malloc' 解决办法:vi config.h
注释掉 #define malloc rpl_malloc
再#make
#make install
交叉编译完成,下一步是把tslib拷贝到mini2440
/usr/local中
(2)拷贝结果如下图
(3)配置tslib环境:修改/etc/profile配置文件
vi /etc/profile
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
结果如下图
保存完成后,执行下面语句,使其生效。
#source /etc/profile
(4)另外/usr/local/tslib/etc/ts.conf 中的内容应该是:
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
运行/usr/local/tslib/bin/ts_calibrate 校准触摸屏,再执行helloworld,发现触摸屏还是不能用。安装参考链接3尝试,最后可以解决
参考链接3:
http://blog.sina.com.cn/s/blog_82665f8c0100yzgd.html(5)修改dummy.c重新配置编译libminigui(即tslib和minigui的链接)
因为MiniGUI自带的IAL 输入引擎中,有一个叫做dummy.c。为了尽可能简单,在这里在其基础上稍作修改,使之符合我们的要求即可,下面为改后的dummy.c文件。
/*
** $Id: dummy.c 7335 2007-08-16 03:38:27Z xgwang $
**
** dummy.c: The dummy IAL engine.
**
** Copyright (C) 2003 ~ 2007 Feynman Software.
** Copyright (C) 2001 ~ 2002 Wei Yongming.
**
** Created by Wei Yongming, 2001/09/13
*/
#include
#include
#include
#include
#include
#include "common.h"
#include "tslib.h"
#ifdef _DUMMY_IAL
#include
#include
#include
#include
#include
#include "misc.h"
#include "ial.h"
#include "dummy.h"
#ifndef _DEBUG
#define _DEBUG // for debugging
#endif
typedef struct {
unsigned short pressure;
unsigned short x;
unsigned short y;
unsigned short pad;
} TS_EVENT;
static unsigned char state [NR_KEYS];
static int mousex = 0;
static int mousey = 0;
static TS_EVENT ts_event;
static struct tsdev *ts;
static int mouse_update(void)
{
return 1;
}
static void mouse_getxy(int *x, int* y)
{
if (mousex < 0) mousex = 0;
if (mousey < 0) mousey = 0;
if (mousex > 239) mousex = 239;
if (mousey > 319) mousey = 319;
#ifdef _DEBUG
// printf ("mousex = %d, mousey = %d/n", mousex, mousey);
#endif
*x = mousex;
*y = mousey;
}
static int mouse_getbutton(void)
{
return ts_event.pressure;
}
#ifdef _LITE_VERSION
static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except, struct timeval *timeout)
#else
static int wait_event (int which, fd_set *in, fd_set *out, fd_set *except,
struct timeval *timeout)
#endif
{
struct ts_sample sample;
int ret = 0;
int fd;
fd_set rfds;
int e;
if (!in) {
in = &rfds;
FD_ZERO (in);
}
fd = ts_fd(ts);
if ((which & IAL_MOUSEEVENT) && fd >= 0) {
FD_SET (fd, in);
#ifdef _LITE_VERSION
if (fd > maxfd) maxfd = fd;
#endif
}
#ifdef _LITE_VERSION
e = select (maxfd + 1, in, out, except, timeout) ;
#else
e = select (FD_SETSIZE, in, out, except, timeout) ;
#endif
if (e > 0) {
// input events is coming
if (fd > 0 && FD_ISSET (fd, in)) {
FD_CLR (fd, in);
ts_event.x=0;
ts_event.y=0;
ret = ts_read(ts, &sample, 1);
if (ret < 0) {
perror("ts_read()");
exit(-1);
}
ts_event.x = sample.x;
ts_event.y = sample.y;
ts_event.pressure = (sample.pressure > 0 ? 4:0);
// if (ts_event.pressure > 0 &&
if((ts_event.x >= 0 && ts_event.x <= 239) &&
(ts_event.y >= 0 && ts_event.y <= 319)) {
mousex = ts_event.x;
mousey = ts_event.y;
// printf("ts_event.x is %d, ts_event.y is %d------------------------------------->/n",ts_event.x ,ts_event.y);
}
//#ifdef _DEBUG
// if (ts_event.pressure > 0) {
// printf ("mouse down: ts_event.x = %d, ts_event.y = %d,ts_event.pressure = %d/n",ts_event.x,ts_event.y,ts_event.pressure);
// }
//#endif
ret |= IAL_MOUSEEVENT;
return (ret);
}
}
else if (e < 0) {
return -1;
}
return (ret);
}
BOOL InitDummyInput(INPUT* input, const char* mdev, const char* mtype)
{
char *ts_device = NULL;
if ((ts_device = getenv("TSLIB_TSDEVICE")) != NULL) {
// open touch screen event device in blocking mode
ts = ts_open(ts_device, 0);
} else {
#ifdef USE_INPUT_API
ts = ts_open("/dev/input/0raw", 0);
#else
ts = ts_open("/dev/touchscreen/ucb1x00", 0);
#endif
}
#ifdef _DEBUG
printf ("TSLIB_TSDEVICE is open!!!!!!!!!!!/n");
#endif
if (!ts) {
perror("ts_open()");
exit(-1);
}
if (ts_config(ts)) {
perror("ts_config()");
exit(-1);
}
input->update_mouse = mouse_update;
input->get_mouse_xy = mouse_getxy;
input->set_mouse_xy = NULL;
input->get_mouse_button = mouse_getbutton;
input->set_mouse_range = NULL;
input->wait_event = wait_event;
mousex = 0;
mousey = 0;
ts_event.x = ts_event.y = ts_event.pressure = 0;
return TRUE;
}
void TermDummyInput(void)
{
if (ts)
ts_close(ts);
}
#endif
(6)对minigui重新交叉编译
对minigui进行重新编译了,主要是lib库,因为用到了tslib 库,所以必须在编译的时候告诉MiniGUI 到哪里去找到tslib 相关的头文件和共享库文件。
# ./configure --prefix=/root/minigui/arm/target --host=arm-linux --target=arm-linux --build=i386-linux --with-osname=linux --with-style=classic --with-targetname=fbcon --enable-autoial --enable-rbf16 --disable-vbfsupport CC=arm-linux-gcc CFLAGS="-I/root/minigui/arm/arm_tslib/include -L/root/minigui/arm/arm_tslib/lib -lts"
# make
# make install
把新的libminigui-1.6.so.10下载到开发板/lib/目录
(7)重新生成arm测试程序
1)#arm-linux-gcc helloworld.c -o helloworld -I/usr/local/arm_zlib/include -L/usr/local/arm_zlib/lib -L/root/minigui/arm/arm_tslib/lib -lminigui -lmgext -lmgext -lm -lpthread -ljpeg -lpng -lttf -lz -lts
这里添加了两个:-L/root/minigui/arm/arm_tslib/lib还有-lts
2)Makefile重新生成notebook
CC = arm-linux-gcc -I/usr/local/arm_zlib/include -L/usr/local/arm_zlib/lib -L/root/minigui/arm/arm_tslib/lib
LIBS = -lminigui -lmgext -lmgext -lm -lpthread -ljpeg -lpng -lttf -lz -lts
(8)测试程序
运行/usr/local/tslib/bin/ts_calibrate 校准触摸屏,再执行notebook,触摸屏就可以用了。