开发环境:Ubuntu 16.04
i.mx6 linux版本:4.9.11
tslib版本:1.4
awtk版本:awtk-v1.3+rc.1@aworks.2
一、首先安装i.mx6交叉编译环境:
1、yocto:bitbake meta-toolchain获取交叉编译工具fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.9.11-1.0.0.sh(不会的可以网上搜索i.mx6的开发环境搭建)
2、安装交叉编译环境:
./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.9.11-1.0.0.sh
3、配置交叉编译环境:
source /opt/fsl-imx-x11/4.9.11-1.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
ps:也可以将这个语句加入到~/.bashrc里面,开启启动。
4、试验编译是否成功:
1)编写文件main.c并保存
unsigned int dwTimer;
void main(void)
{
dwTimer = 0;
}
2)编译文件
$CC -o main main.c
生成可执行文件main
3) 输入命令file main 检查main文件是否为i.mx6下的可执行文件
file main
执行结果:
mian:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=df3032d9e2ceccc66fd70dc1b6a08215454fc6b8, not stripped
二、安装tslib库
下载 tslib-1.4.tar.gz
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
编译:
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
mkdir tmp
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
make
make install
安装:
cd tmp
cp * -rf /opt/
三、linux下编译awtk
如果没有安装scons和依赖的软件包,请在终端运行下面的命令:
sudo apt-get install scons
sudo apt-get install libsndio dev libgtk 3 dev libglu1 mesa libglu1 mesa dev libgl1 mesa glx libgl1 mesa dev
复制awtk的代码至linux系统并解压。

编译运行(在终端下,进入AWTK所在的目录,并运行下列命令):
scons
./bin/demoui
demoui就是编译出来的可执行程序。
四、移植awtk至i.mx6
修改 awtk-linux-fb/awtk_config.py文件

将awtk-examples目录下HelloWorld-Demo拷贝至user_apps目录下,
然后执行命令:
scons APP=../user_apps/HelloWorld-Demo
出现找不到math.h的错误

需要将交叉编译器的头文件路径加入awtk的配置文件awtk-linux-fb/awtk_config.py:

再次编译,出现找不到库文件的错误:

需要对配置文件awtk-linux-fb/awtk_config.py做如下修改,加入交叉编译环境库的路径:

由于environment-setup-cortexa9hf-neon-poky-linux-gnueabi文件已经设置了CC CXX LD AR STRIP变量,所以这里不能再修改原有的变量,不然原有的选项会失掉。

environment-setup-cortexa9hf-neon-poky-linux-gnueabi部分内容如下:
11 export CC="arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
12 export CXX="arm-poky-linux-gnueabi-g++ -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
13 export CPP="arm-poky-linux-gnueabi-gcc -E -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
14 export AS="arm-poky-linux-gnueabi-as "
15 export LD="arm-poky-linux-gnueabi-ld --sysroot=$SDKTARGETSYSROOT"
16 export GDB=arm-poky-linux-gnueabi-gdb
17 export STRIP=arm-poky-linux-gnueabi-strip
编译通过。
有可能还会出现找不到gpinyin头文件的错误,需要对配置文件awtk-linux-fb/awtk_config.py做如下修改:

感谢李先静先生,A.C.E和唐俊傑先生的技术支持。
附上修改后的配置文件awtk_config.py的内容:
1 import os
2 import platform
3
4 OS_NAME = platform.system()
5
6 def joinPath(root, subdir):
7 return os.path.normpath(os.path.join(root, subdir))
8
9 CWD=os.path.normpath(os.path.abspath(os.path.dirname(__file__)));
10
11 TK_LINUX_FB_ROOT = CWD
12 TK_ROOT = joinPath(TK_LINUX_FB_ROOT, '../awtk')
13 TK_SRC = joinPath(TK_ROOT, 'src')
14 TK_3RD_ROOT = joinPath(TK_ROOT, '3rd')
15 GTEST_ROOT = joinPath(TK_ROOT, '3rd/gtest/googletest')
16
17 BUILD_DIR = joinPath(TK_LINUX_FB_ROOT, 'build')
18 BIN_DIR = joinPath(BUILD_DIR, 'bin')
19 LIB_DIR = joinPath(BUILD_DIR, 'lib')
20 VAR_DIR = joinPath(BUILD_DIR, 'var')
21 TK_DEMO_ROOT = joinPath(TK_ROOT, 'demos')
22
23
24
25 LCD='LINUX_FB'
26 INPUT_ENGINE='pinyin'
27 NANOVG_BACKEND='AGGE'
28
29 COMMON_CCFLAGS=' -DHAS_STD_MALLOC -DWITH_FS_RES -DHAS_STDIO -DWITH_VGCANVAS -DWITH_UNICODE_BREAK -DLINUX'
30 COMMON_CCFLAGS=COMMON_CCFLAGS+' -DSTBTT_STATIC -DSTB_IMAGE_STATIC -DWITH_STB_IMAGE -DWITH_STB_FONT '
31 COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_NANOVG_AGGE -DWITH_WIDGET_TYPE_CHECK'
32
33 #add by zy --20191217
34 #COMMON_CCFLAGS=COMMON_CCFLAGS+' -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.9.11-1.0.0/sysroo ts/cortexa9hf-neon-poky-linux-gnueabi'
35
36 GRAPHIC_BUFFER='default'
37 #GRAPHIC_BUFFER='jzgpu'
38 #if GRAPHIC_BUFFER == 'jzgpu':
39 # COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_JZGPU'
40
41 #only for c compiler flags
42 COMMON_CFLAGS=''
43 COMMON_CFLAGS=COMMON_CFLAGS+' -std=gnu99 '
44
45
46 OS_LIBS=[]
47 OS_LIBPATH=['/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.2.0',
48 '/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/',
49 '/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/',
50 '/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/arm-poky-linux-gnueabi/6.2.0',
51 ]
52 OS_CPPPATH=['/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/include/',
53 '/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/include/c++/6.2.0',
54 '/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/include/c++/6.2.0/arm-poky-linux-gnueabi',
55 ]
56 OS_LINKFLAGS=' --sysroot=/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi'
57 OS_SUBSYSTEM_CONSOLE=''
58 OS_SUBSYSTEM_WINDOWS=''
59 #OS_FLAGS='-Wall -Os '
60 OS_FLAGS='-g -Wall -Os -mfloat-abi=hard '
61
62 #for build tslib
63 #TSLIB_INC_DIR=joinPath(TK_LINUX_FB_ROOT, '3rd/tslib/src')
64 #TSLIB_LIB_DIR=joinPath(TK_LINUX_FB_ROOT, '3rd/tslib/src/.libs')
65
66 #for prebuild tslib
67 TSLIB_LIB_DIR='/opt/tslib1.4/lib'
68 TSLIB_INC_DIR='/opt/tslib1.4/include'
69 #TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-'
70 TOOLS_PREFIX='/opt/fsl-imx-x11/4.9.11-1.0.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-'
71
72 #for pc build
73 #TOOLS_PREFIX=''
74 #TSLIB_LIB_DIR=''
75
76 OS_LIBS = OS_LIBS + ['stdc++', 'pthread', 'm', 'dl']
77 COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DLINUX -DHAS_PTHREAD -DENABLE_CURSOR '
78
79 if TSLIB_LIB_DIR != '':
80 COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DHAS_TSLIB '
81
82 CFLAGS=COMMON_CFLAGS
83 LINKFLAGS=OS_LINKFLAGS;
84 LIBPATH=[LIB_DIR] + OS_LIBPATH
85 CCFLAGS=OS_FLAGS + COMMON_CCFLAGS
86 LIBS=['awtk', 'extwidgets', 'widgets', 'awtk_linux_fb', 'base', 'gpinyin', 'tkc', 'nanovg-agge', 'agge', 'nanovg', 'linebreak', 'rt'] + OS _LIBS
87
88
89 CPPPATH=[TK_ROOT,
90 TK_SRC,
91 TK_3RD_ROOT,
92 joinPath(TK_SRC, 'ext_widgets'),
93 joinPath(TK_ROOT, 'tools'),
94 joinPath(TK_3RD_ROOT, 'agge'),
95 joinPath(TK_3RD_ROOT, 'agg/include'),
96 joinPath(TK_3RD_ROOT, 'nanovg'),
97 joinPath(TK_3RD_ROOT, 'nanovg/base'),
98 joinPath(TK_3RD_ROOT, 'libunibreak'),
99 joinPath(TK_3RD_ROOT, 'gpinyin/include'),
100 ] + OS_CPPPATH
101
102
103 if TSLIB_LIB_DIR != '':
104 LIBS = ['ts'] + LIBS
105 LIBPATH = [TSLIB_LIB_DIR] + LIBPATH;
106 CPPPATH = [TSLIB_INC_DIR] + CPPPATH;
107
108
109 os.environ['LCD'] = LCD
110 os.environ['TARGET_ARCH'] = 'arm'
111 os.environ['BIN_DIR'] = BIN_DIR;
112 os.environ['LIB_DIR'] = LIB_DIR;
113 os.environ['TK_ROOT'] = TK_ROOT;
114 os.environ['CCFLAGS'] = CCFLAGS;
115 os.environ['VGCANVAS'] = 'NANOVG'
116 os.environ['INPUT_ENGINE'] = INPUT_ENGINE;
117 os.environ['TSLIB_LIB_DIR'] = TSLIB_LIB_DIR;
118 os.environ['NANOVG_BACKEND'] = NANOVG_BACKEND;
119 os.environ['TK_3RD_ROOT'] = TK_3RD_ROOT;
120 os.environ['GTEST_ROOT'] = GTEST_ROOT;
121 os.environ['NATIVE_WINDOW'] = 'raw';
122 os.environ['GRAPHIC_BUFFER'] = GRAPHIC_BUFFER;
123
124 #CC=TOOLS_PREFIX+'gcc',
125 #CXX=TOOLS_PREFIX+'g++',
126 #LD=TOOLS_PREFIX+'g++',
127 #AR=TOOLS_PREFIX+'ar',
128 #STRIP=TOOLS_PREFIX+'strip',
129
本文档详细介绍了在Ubuntu 16.04环境下,如何将AWTK框架移植到i.mx6 Linux系统的过程,包括安装交叉编译环境、tslib库,以及解决编译中遇到的头文件和库文件问题。
2007

被折叠的 条评论
为什么被折叠?



