最近尝试移植Mini GUI到JZ2440,过程中虽然参考他人过程,但仍有一些小问题出现。为了便于以后移植和其他玩家参照,下面将过程总结如下。
1、下载MiniGUI 3.0资源,并建立工作目录
登录网址:http://www.minigui.org/en/download/下载,假设下载的文件都存放在“/home/book/Downloads”中。
建立工作目录“/opt/mini_GUI/arm/cross”如下。
$ mkdir -p /opt/mini_GUI/arm/cross
其中,编译完的目标文件全部放在cross目录下。源文件解压到/opt/minigui/arm下,故先拷贝下载文件到目录“/opt/mini_GUI/arm/”中
$ cp /home/book/Downloads/*.gz /opt/mini_GUI/arm/ -dr
2、编译Freetype库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar zxf freetype-2.3.9-fm20100818.tar.gz
2)进入新目录freetype-2.3.9-fm20100818,并执行configure命令,然后执行make install。
$ cd freetype-2.3.9-fm20100818
$ ./configure --host=arm-linux --enable-static --prefix=/opt/mini_GUI/arm/cross
$ make
$ make install
3、编译JPEG库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar zxf jpegsrc.v7.tar.gz
2)进入新目录jpeg-7,并执行配置、configure命令,然后执行make install。
$ cd jpeg-7
$ CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/opt/mini_GUI/arm/cross --build=i386-linux \
--host=arm-linux --target=arm-linux --enable-shared
$ make
$ make install
4、编译PNG库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar zxf libpng-1.2.37.tar.gz
2)进入新目录libpng-1.2.37,并执行配置、configure命令,然后执行make install。
$ cd libpng-1.2.37
$ CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/opt/mini_GUI/arm/cross --build=i386-linux \
--host=arm-linux --target=arm-linux
$ make
$ make install
5、编译zlib库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar zxf zlib-1.2.2.tar.gz
2)进入新目录zlib-1.2.2,并执行配置、configure命令,然后执行make install。
$ cd zlib-1.2.2
$ CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/opt/mini_GUI/arm/cross --shared
$ make
$ make install
6、编译资源库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar xzf minigui-res-be-3.0.12.tar.gz
2)进入新目录minigui-res-be-3.0.12,并执行配置、configure命令,然后执行make install。
$ cd minigui-res-be-3.0.12
$ CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/opt/mini_GUI/arm/cross
$ make
$ make install
7、编译核心库
1)进入/opt/mini_GUI/arm/目录,执行解压命令:
$ tar xzf libminigui-3.0.12-linux.tar.gz
2)进入新目录libminigui-3.0.12-linux,并执行配置、configure命令。
$ cd libminigui-3.0.12-linux
$ CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
CFLAGS="-I/opt/mini_GUI/arm/cross/include -I/opt/toolschain/4.4.3/arm-none-linux-gnueabi/include" \
CPPFLAGS="-g -I/opt/mini_GUI/arm/cross/include-I/opt/toolschain/4.4.3/arm-none-linux-gnueabi/include " \
CXXFLAGS="-g -I/opt/mini_GUI/arm/cross/include-I/opt/toolschain/4.4.3/arm-none-linux-gnueabi/include " \
./configure --prefix=/opt/mini_GUI/arm/cross --host=arm-linux \
--target=arm-linux --build=i386-linux --with-osname=linux \
--with-targetname=fbcon --enable-autoial \
--disable-vbfsupport --enable-tslibial
回车后执行配置后,最后提示如下信息,可忽略。
./configure: line 15530: ./runme.sh: No such file ordirectory
WARNING: failed to generate license pictures.
3)修改Makefile
$ sudo vi src/newgal/pcxvfb/Makefile
把相关的地方都去掉(可注释),就两个地方如下红色部分:
#oldincludedir = /usr/include
INCLUDES= -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include \
-I$(abs_top_srcdir)/src/newgal/ #-I/usr/include
然后执行编译和安装。
$ make
$ make install
8、编译实例库
1)进入/opt/mini_GUI/arm/目录,执行解压命令。
$ tar xzf mg-samples-3.0.12.tar.gz
2)这个库好像有问题。其实我们只要make一个helloword出来测试是否移植成功就可以了。手工交叉编译helloworld.c,在目录“/opt/mini_GUI/arm/mg-samples-3.0.12/src”下生成可执行文件helloworld。
$ cd /opt/mini_GUI/arm/mg-samples-3.0.12/src
$ arm-linux-gcc -o helloworld helloworld.c -L/opt/mini_GUI/arm/cross/lib-lminigui_ths -ljpeg -lm -lpthread -ldl -lpng -lts -I/opt/mini_GUI/arm/cross/include
9、拷贝到根文件目录并修改
1)交叉编译完成,把生成的minigui文件拷贝到根文件中。
比如建立的NFS根文件目录为“/opt/nfs_root/miniGUI_2nd”
$ cd /opt/nfs_root/
$ mkdir -p ./miniGUI_2nd
将最小根文件系统目录“/opt/nfs_root/fs_orig/”中的内容拷贝到“/opt/nfs_root/miniGUI_2nd”中
$ sudo cp /opt/nfs_root/fs_orig/*/opt/nfs_root/miniGUI_2nd/ -dr
查看“/opt/nfs_root/miniGUI_2nd/usr/local”目录是否存在(最小文件系统中没有local目录),若不存在,则建立local目录,并将minigui生成的文件拷贝到该目录下。
$ cd /opt/nfs_root/miniGUI_2nd/usr/
$ sudo chmod a+w .
$ mkdir –p local
$ cp /opt/minigui/arm/cross/* /opt/nfs_root/miniGUI_2nd/usr/local/-dr
2)修改修改开发板上minigui配置文件(必须要用sudo,否则无法正确保存)
$ sudo vi /opt/nfs_root/miniGUI_2nd/usr/local/etc/MiniGUI.cfg
把其中的system段修改成如下(分辨率按照实际屏幕参数填写):
[system]
# GAL engine and default options
gal_engine=fbcon
defaultmode=480x272-16bpp
# IAL engine
#ial_engine=console
# mdev=/dev/input/mice
ial_engine=tslib
mdev=/dev/input/event0
mtype=IMPS2
[fbcon]
defaultmode=480x272-16bpp
10、移植tslib
1)下载tslib
$ git clone https://github.com/kergoth/tslib
我的ubuntu下载时总是提示下载失败,所以就在网上手动下载了一个“tslib-1.4.tar.gz”文件,将该文件放在“/opt/mini_GUI/arm/”目录下。
2)解压tslib,进入目录,并配置
$ tar -xzf tslib-1.4.tar.gz
$ cd tslib/
$ ./autogen.sh
$ echo"ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
$ ./configure --host=arm-linux --prefix=/opt/mini_GUI/arm/cross/tslib
配置完成后,直接编译可能会提示出错”ts_test.c:(.text+0x1d8): undefined reference to `rpl_malloc”,原因是在 tslib-1.4/config.h 中有一行定义 “#define mallocrpl_malloc”,直接注释掉这行定义即可,除非你自己实现了一个 malloc 版本。
$ sudo vi ./config.h
找到“#define malloc rpl_malloc”,并注释改行。
// #define malloc rpl_malloc
3)make并安装
$ make
$ make install
11、拷贝tslib到根目录
拷贝安装好的即cross目录下的tslib到根目录的usr/local下,即
$ sudo cp /opt/mini_GUI/arm/cross/tslib/opt/nfs_root/miniGUI_2nd/usr/local/ -dr
$ cd /opt/nfs_root/miniGUI_2nd/usr/local/
在“/opt/nfs_root/miniGUI_2nd/usr/local/”目录下ls,可以看到以下目录。
“bin etc include lib share tslib”
11、修改配置文件
1)配置环境变量
配置tslib环境。进入NFS文件系统跟目录(或者开发板NFS启动后,在根目录下)修改。
$ cd /opt/nfs_root/miniGUI_2nd
$ sudo vi /opt/nfs_root/miniGUI_2nd/etc/profile
向该文件中写入如下内容:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal_a70
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:/usr/local/lib/
注意:
1)蓝色部分与网上给出的“dev/input/event0”不同。测试是哪个,可在开发板上执行“cat/dev/event0”或“dev/input/event0”后,点击屏幕,串口会回传数据(显示为乱码)。如果该文件配置错误,则开发板运行校准/usr/local/tslib/bin/ts_calibrate时,会提示:
ts_open:No such file or directory
2)红色部分一定要添加!!网上参考的没有添加该库路径。如果没有该库文件,则开发板运行helloworld时,会提示:
./helloworld:error while loading shared libraries: libminigui_ths-3.0.so.12: cannot openshared object file: No such file or directory
2)配置ts.conf
$ cd /opt/nfs_root/miniGUI_2nd
$ sudo vi /opt/nfs_root/miniGUI_2nd/ usr/local/tslib/etc/ts.conf
修改其中的内容为:
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
12、设置NFS启动文件系统
1)在PC Linux的文件/etc/exports配置文件中增加允许挂接的目录,打开该文件
$ sudo vi /etc/exports
在最后一行增加以下代码:
/opt/nfs_root/miniGUI_2st/ *(rw,sync,no_root_squash)
2)重启NFS服务,在命令行输入:sudo /etc/init.d/nfs-kernel-serverrestart,提示信息完成即可。
3)开发板重启,在U-Boot中设置启动参数命令为:
set bootargsnoinitrd root=/dev/nfs nfsroot=192.168.1.105:/opt/nfs_root/miniGUI_2ndip=192.168.1.11:192.168.1.105:192.168.1.1:255.255.255.0::eth0:off init=/linuxrcconsole=ttySAC0
保存命令参数:
save
注意以上内容中“192.168.1.105”为服务器IP,且指定开发板IP地址为“192.168.1.11”。
13、测试
1)开发板正常NFS启动后,输入执行屏幕标定,校准触摸屏。
# /usr/local/tslib/bin/ts_calibrate
注意,若提示“ts_open: No such file or directory”,则很可能是profile文件中的配置出现问题,见11步骤中关于蓝色字体说明。
2)校准完成后,在PC linux上把之前编译出的helloworld拷贝到NFS根目录
$ cp /opt/mini_GUI/arm/mg-samples-3.0.12/src/helloworld/opt/nfs_root/miniGUI_2nd/
3)在开发板上运行helloworld,即可到结果,移植完成
# ./helloworld
注意,若提示“./helloworld: error while loading shared libraries:libminigui_ths-3.0.so.12: cannot open shared object file: No such file ordirectory”,则很可能是profile文件中的库路径配置出现问题,见11步骤中关于红色字体说明。
参考:
https://blog.csdn.net/canbus/article/details/8624060/
http://blog.sina.com.cn/s/blog_82665f8c0100yzgd.html