移植awtk至i.mx6 linux系统

本文档详细介绍了在Ubuntu 16.04环境下,如何将AWTK框架移植到i.mx6 Linux系统的过程,包括安装交叉编译环境、tslib库,以及解决编译中遇到的头文件和库文件问题。

开发环境: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 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值