NUC980嵌入式linux和Qt开发环境搭建

        NUC980是新唐推出的一款工业级ARM926内核的微处理器,其接口丰富,包含2路以太网接口、10路串口、4路CAN接口等其他常用接口。新唐提供了裸机BSP和Linux4.4-BSP,此处不采用裸机方式开发。本文主要以NUC980-IOT开发板为基础描述Linux开发环境的搭建过程及部分注意事项(请先前往新唐官网自行下载开发用虚拟机及相关应用资料)。

        本文的内容摘要如下:

        1、Linux开发环境的搭建过程和要点以及快速上手NUC980-IOT开发板;

        2、嵌入式Qt的编译及安装;

        3、安装GDB-Server使用QtCreator进行Qt程序在线调试的方法;

       第一部分

        首先,拿到开发板后原厂的开发板内部烧写的可能是RAM类型的文件系统,想要正常使用需要构建FLASH下的根文件系统。对于NUC980-IOT开发板其使用的是SPI-Nand-Flash,在NUC970_Buildroot执行make menuconfig,修改RAM文件系统为yaffs2 root以便以烧录到FLASH中,设置如图1所示。

NUC980嵌入式linux和Qt开发环境搭建_第1张图片

 图1 根文件系统配置

执行make后可以看到NUC970_Buildroot/output/images/rootfs.yaffs2镜像,此文件即为根文件系统。

        参见新唐的根文件系统构建文档可知NUC980-IOT的烧录文件主要有5个(内核和UBOOT在生成时均需要使用make menuconfig做配置,具体配置参见官方文档此处不赘述,此处仅提示注意点-内核启用NFS服务以便后续开发)。由USB启动后打开NuWriter软件烧录,需要注意的是这5个文件的烧录地址偏移和烧录类型,偏移值如图2所示:

NUC980嵌入式linux和Qt开发环境搭建_第2张图片

图2 烧录地址偏移 

 以上部分文件烧录完成后,改为SPI-NAND启动,通过调试串口可以看到系统已经正常启动。

第二部分

        准备下载Qt源代码,前往http://download.qt.io/下载,最新的Qt编译时貌似有问题,此处采用的是Qt5.9.9版本,下载完成后解压。由于不想采用动态库的形式,此处采用静态编译的方式编译Qt。需要设置的有两处,首先是指定交叉编译器,进入qt-everywhere-opensource-src-5.9.9\qtbase\mkspecs\linux-arm-gnueabi-g++目录,此目录下的qmake.conf用于指定交叉编译器。使用绝对路径的方式指定交叉编译器,将原来的arm-linux-gnueabi-xxx注释。

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
#QMAKE_CC                = arm-linux-gnueabi-gcc
#QMAKE_CXX               = arm-linux-gnueabi-g++
#QMAKE_LINK              = arm-linux-gnueabi-g++
#QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++

QMAKE_CC                = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-gcc
QMAKE_CXX               = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-g++
QMAKE_LINK              = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-g++
QMAKE_LINK_SHLIB        = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-g++


# modifications to linux.conf
#QMAKE_AR                = arm-linux-gnueabi-ar cqs
#QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy
#QMAKE_NM                = arm-linux-gnueabi-nm -P
#QMAKE_STRIP             = arm-linux-gnueabi-strip

QMAKE_AR                = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-ar cqs
QMAKE_OBJCOPY           = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-objcopy
QMAKE_NM                = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-nm -P
QMAKE_STRIP             = /usr/local/arm_linux_4.8/usr/bin/arm-nuvoton-linux-uclibcgnueabi-strip

load(qt_config)

         之后返回主目录,使用gedit新建一个编译安装脚本installqt.sh,脚本内容如下:

./configure -static -release -opensource -confirm-license -no-opengl -xplatform linux-arm-gnueabi-g++ -prefix /usr/local/qt5.14-arm-static -silent -qpa linuxfb --libpng=qt --libjpeg=qt --zlib=qt -c++std c++11

         保存后,执行命令sudo ./installqt.sh。配置完成后执行sudo make。make完成后执行sudo make install。至此Qt安装完成。注意:考虑在installqt.sh中关闭example的编译安装,因为太大而且安装过程浪费极多时间。

         Qt-SDK安装完成后开始安装Qt的集成开发环境QtCreator,下载qt-creator-opensource-linux-x86_64-4.4.1.run,直接使用命令sudo ./qt-creator-opensource-linux-x86_64-4.4.1.run安装。至此Qt已经安装完成,可以使用Qt进行程序开发了,但是目前在目标机上进行在线调试,因为我们还没有配置GDB。一般嵌入式目标板性能不足,不适合直接使用GDB进行调试,所以需要交叉编译GDB调试器,GDB运行于Ubuntu虚拟机,GDB-Server运行于目标板。

第三部分 (此处坑多)

        1、新唐提供的交叉编译器中集成的GDB没法供Qt使用,因为编译时没有加入python支持,故需要重新编译安装一个。

        1、首先如果在交叉编译GDB的过程中一直出现一些莫名其妙的错误请删除该文件夹,重新解压后编译安装!

        2、在QtCreator中使用GDB是需要python支持的!不同版本的GDB对python的版本要求不一样,此处GDB7.10.1需要使用python2.7,请确保环境变量设置正确执行python --version后系统显示的是python2.xx。若显示python3.xx请先修改环境变量。最后不管使用哪个版本的python请先通过apt-get install安装上pythonx.x-dev,因为编译时会用到。

        解压新唐提供的GDB7.10.1,进入gdb-7.10.1目录。执行sudo ./configure --target=arm-linux --with-python。设置完成后执行sudo make,make完成后执行sudo make install。默认的安装路径在/usr/local/bin。安装完成后可以看到/usr/local/bin/arm-linux-gdb。在Qt构建套件中需要选择此版本GDB。

        GDB安装完成后,还需要进入目录gdb-7.10.1\gdb\gdbserver,再次编译一个GDB-Server供开发板使用,进入gdb-7.10.1\gdb\gdbserver目录执行sudo ./configure --target=arm-linux --host=arm-linux,配置完成后执行sudo make。编译完成后可以在当前目录看到gdbserver可执行程序,复制并保存该程序,后续需要保存到开发板的/bin目录下,以后就可以通过gdbserver命令开启在线调试功能了。

        打开QtCreator,配置构建套件,编译器选择新唐提供的交叉编译器即可,但是debugger调试器不能用新唐提供的,使用我们编译安装的带python功能的GDB即可,依次配置Qt Version >> Compilers>>Debuggers>>Kits以后Qt配置完成。配置如图3所示:

NUC980嵌入式linux和Qt开发环境搭建_第3张图片

图3 添加GDB 

         最后,我们打开并设置好虚拟机的NFS服务,目标板也启动NFS挂载后即可访问虚拟机的文件,打开Qt建立一个工程,将编译输出文件放置到NFS共享目录下,同时,不要忘记将gdbserver可执行文件复制到开发板的/bin目录下。此处使用串口做了一个测试程序,名为tes4,嵌入式目标板在NFS目录下执行gdbserver 192.168.1.105:9000 test4即可启动GDB服务器参见图4。此处IP为目标板IP,端口为目标板端口,可以自由选择。

NUC980嵌入式linux和Qt开发环境搭建_第4张图片

图4 控制台窗口

 

        在Qt中点击Debug>>StartDebugging>>Attaching to running Debug Server,输入相应参数点击OK即可,参见图5。

NUC980嵌入式linux和Qt开发环境搭建_第5张图片

图5 启动调试

         参见图6此处可以看到Qt已经进入调试模式,可以观察变量或者单步运行、跳转等。后续可以开始进行调试工作。若嵌入式目标板安装了SSH服务,通过SSH可以更方便的进行一键调试。

NUC980嵌入式linux和Qt开发环境搭建_第6张图片

图6 开始调试

-------------------------------------------------------结束--------------------------------------------------------------------

 

 

你可能感兴趣的:(嵌入式系统应用,linux,qt,gdb,嵌入式)