移植MiniGUI 3.0和tslib到JZ2440

最近尝试移植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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值