移植MiniGUI 3.0和tslib到JZ2440

2019-07-12 20:15发布

最近尝试移植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.gz2)进入新目录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.gz2)进入新目录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.gz2)进入新目录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.gz2)进入新目录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.gz2)进入新目录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.gz2)进入新目录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 ordirectoryWARNING: failed to generate license pictures.3)修改Makefile$ sudo vi src/newgal/pcxvfb/Makefile把相关的地方都去掉(可注释),就两个地方如下红 {MOD}部分:#oldincludedir = /usr/includeINCLUDES= -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.gz2)这个库好像有问题。其实我们只要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 optionsgal_engine=fbcondefaultmode=480x272-16bpp # IAL engine#ial_engine=console# mdev=/dev/input/miceial_engine=tslibmdev=/dev/input/event0mtype=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_malloc3)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/tslibexport TSLIB_TSDEVICE=/dev/event0export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.confexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_CALIBFILE=/etc/pointercal_a70export TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:/usr/local/lib/注意:1)蓝 {MOD}部分与网上给出的“dev/input/event0”不同。测试是哪个,可在开发板上执行“cat/dev/event0”或“dev/input/event0”后,点击屏幕,串口会回传数据(显示为乱码)。如果该文件配置错误,则开发板运行校准/usr/local/tslib/bin/ts_calibrate时,会提示:ts_open:No such file or directory2)红 {MOD}部分一定要添加!!网上参考的没有添加该库路径。如果没有该库文件,则开发板运行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 inputmodule pthres pmin=1module variance delta=30module dejitter delta=100module 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步骤中关于蓝 {MOD}字体说明。 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步骤中关于红 {MOD}字体说明。
参考:https://blog.csdn.net/canbus/article/details/8624060/
http://blog.sina.com.cn/s/blog_82665f8c0100yzgd.html