如何把51程序移植到arm?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把51程序移植到arm?相关的知识,希望对你有一定的参考价值。
如何把51的C语言程序移植到LM3SXXXX 的arm7中,arm中提供了很多外设驱动程序(API函数),可是不太会用。本人新手希望能有人解惑,谢谢!
一、准备busybox 1.14.1
qt-embedded-linux-opensource-src-4.5.1
tslib 1.4
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
构建一个新的根文件系统目录,路径为
/root/rootfs
二、具体步骤:
1、编译安装busybox
在官网下载最新版。可以参考如下几处要修改的地方:
Busybox Settings ---> Build Options ---> (arm-linux-)Cross Compiler prefix
Busybox Settings ---> Installation Options --->[]Dont't use /usr
Busybox Settings ---> Installation Options --->(/root/rootfs) BusyBox installation prefix
Busybox Settings --->Busybox Library Tuning --->[*] Fancy Shell prompts
输入如下命令,编译并安装。
# make;make install
2、编译安装tslib
# ./autogen.sh
# ./configure -prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes
# make;make install
安装目录指明为 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/
主要是为了在编译QTE时,不用指定tslib的头文件和库文件,方便以后程序开发。
注意:在做这一步前,需要做一个目录链接
在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/目录下
# ln -s ../../usr/include ./
3、编译安装QTE
1)、最基本的配置
# ./configure -prefix /usr -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -qt-mouse-tslib
-prefix /usr 使用这个配置,编译后的QTE库文件即可放在目标文件系统的/usr/lib下,而不是默认/usr/local/Trolltech/QtEmbedded-4.5.1 这个很深的目录
2)、编译
# make
# cp lib/* /root/rootfs/usr/lib -rd 将QTE库文件拷贝到根文件系统的目录
# cp plugins /root/rootfs/usr -rd 将QTE插件目录拷贝到根文件系统的目录
4、根文件系统的设置
1)、这时/root/rootfs/usr下应该有 bin etc include lib sbin目录
tslib生成的etc目录,包含一个tslib的配置文件 nf,编辑此文件,去掉module_raw input前的注释
# mv etc ../ 移动到rootfs的根目录
2)、进行一次清理操作
#arm-linux-strip lib/*.so
#arm-linux-strip usr/lib/*.so
3)、编辑etc/profile,添加以下内容
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/nf
export TSLIB_PLUGINDIR=/usr/lib/ts
最后,通过mkyaffs2image 制作镜像,烧写镜像,启动ts_calibrate校验触屏即可。 参考技术A 这个主要是要注意8位机代码移植到32位机的问题,如果你51的C写得很规范移植会好点,如果写的不规范麻烦会大点,比如unsigned
int 这个类型在8位机和32位。 参考技术B 这个主要是要注意8位机代码移植到32位机的问题,如果你51的C写得很规范移植会好点,如果写的不规范麻烦会大点,比如unsigned int 这个类型在8位机和32位编译出来的效果就是不一样的。还有就是ARM芯片会有字节对齐的问题,如果51的C里面用到了结构体,那么字节对齐的问题会出现在sizeof(结构体名)。这个函数因为字节对齐问题,可能会算出的结构体字节大小和你想的不一样。 其他好像也没有什么需要注意的了本回答被提问者采纳 参考技术C 1)学习 Linux系统安装、常用命令、应用程序安装。
2) 学习 Linux 下的 C 编程、这本书必学《UNIX 环境高级编程》、《UNIX 网络编程》,Rechard Stevens 写的,C 高手大都学习过《C 和指针》、《C 缺陷与陷阱》、《高质量C/C++编程指南》、《C 专家编程》、《The C programming Language》
3)程序员大都要学:数据结构,嵌入式程序员数据结构必学。
4)底层开发人员大都要学:微机原理、计算机体系结构,嵌入式开发人员必学。
5)单片机可以让一个从事软件开发的人了解和如何操作硬件,有必要学。
6)ARM 体系结构,其中有汇编。
7)数字电路有必要学习,不然在做底层开发时真的会不知道怎么看原理图,起码也得懂与或门。
8)ARM + Linux 应用程序开发。(前提是要有开发板)
QT·移植Qt到ARM平台及搭建Qt交叉编译环境
目录
要想在ARM平台上运行Qt程序,得满足以下两个点:
1、ARM平台上搭建Qt运行环境
2、获得通过交叉编译后的Qt可执行文件
一、编译tslib库
从网上下载 tslib 源码压缩包,发送到 Ubuntu 中并解压,进入tslib源码目录,内容如下所示:
执行命令安装以下软件:
- sudo apt-get update
- sudo apt-get install autoconf automake libtool
执行 autogen.sh 生成 Makefile:
- ./autogen.sh
配置使用的交叉编译器及 tslib 编译输出路径:
- ./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.
- cache -prefix=/home/xzj/tslib-1.21/arm-tslib
直接执行 make 编译及 make install 安装:
- make
- make install
安装完成后在当前目录下生成一个 arm-tslib 目录。也是我们上面指令的编译输出目录路径。可以查看生成目录下有以下内容:
二、移植 tslib 到文件系统
我把生成的 arm-tslib 放到了挂载的buildroot文件系统的跟目录,并改名为了 tslib。(可放在其它目录了,比如usr/lib,可不改名字,根据自己喜好,但接下来的环境变量要填对)
配置 tslib 的环境变量
打开文件系统根目录下的/etc/profile文件,填入以下内容:
简单说明: TSLIB_TSDEVICE //触摸屏设备文件名,这个需要选对 TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。 SLIB_CONFFILE //配置文件名。 TSLIB_PLUGINDIR //插件目录 TSLIB_CONSOLEDEVICE //控制台设备文件名 TSLIB_FBDEVICE //设备名 以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。
可以使用 ts_calibrate 进行校验 ts_test 进行测试
三、编译Qt源码(用于移植到ARM)
从网上下载Qt源码 https://download.qt.io/,我下载的是5.12.9的版本。
放到 ubuntu 并解压得到 qt-everywhere-src-5.12.9源码目录
修改 qmake.conf,配置相关的编译器,默认使用arm-linux-gnueabi前缀。
- gedit ./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
配置编译选项,输入./configure -help 指令,查看可配置选项,由于配置选项太长,我另写了一个脚本来执行配置选项,名为autoconfig.sh,配置主要指定编译输出路径和功能选择:
#!/bin/bash
./configure -prefix /home/xzj/tool/qt-everywhere-src-5.12.9/armqt-5.12.9 \\
-opensource \\
-confirm-license \\
-release \\
-strip \\
-shared \\
-xplatform linux-arm-gnueabi-g++ \\
-optimized-qmake \\
-c++std c++11 \\
--rpath=no \\
-pch \\
-skip qt3d \\
-skip qtactiveqt \\
-skip qtandroidextras \\
-skip qtcanvas3d \\
-skip qtconnectivity \\
-skip qtdatavis3d \\
-skip qtdoc \\
-skip qtgamepad \\
-skip qtlocation \\
-skip qtmacextras \\
-skip qtnetworkauth \\
-skip qtpurchasing \\
-skip qtremoteobjects \\
-skip qtscript \\
-skip qtscxml \\
-skip qtsensors \\
-skip qtspeech \\
-skip qtsvg \\
-skip qttools \\
-skip qttranslations \\
-skip qtwayland \\
-skip qtwebengine \\
-skip qtwebview \\
-skip qtwinextras \\
-skip qtx11extras \\
-skip qtxmlpatterns \\
-make libs \\
-make examples \\
-nomake tools -nomake tests \\
-gui \\
-widgets \\
-dbus-runtime \\
--glib=no \\
--iconv=no \\
--pcre=qt \\
--zlib=qt \\
-no-openssl \\
--freetype=qt \\
--harfbuzz=qt \\
-no-opengl \\
-linuxfb \\
--xcb=no \\
-tslib \\
--libpng=qt \\
--libjpeg=qt \\
--sqlite=qt \\
-plugin-sql-sqlite \\
-I/home/xzj/tool/tslib-1.21/arm-tslib/include \\
-L/home/xzj/tool/tslib-1.21/arm-tslib/lib \\
-recheck-all
给执行权限,执行脚本进行配置
- chmod +x ./autoconfig.sh
- sudo apt-get install g++ // 配置前请先安装 g++
- ./autoconfig.sh
配置完成够开始进行编译和安装,由于编译用时比较久,最好使用多指令同时运行:
- make -j12
- make install
执行安装指令后,会在当前目录生成一个 armqt-5.12.9 文件,配置时命名的输出文件:
四、移植Qt到文件系统
把刚才生成的 armqt-5.12.9 放到挂载的 buildroot 文件系统的/opt目录中:
要想Qt 程序显示中文,需把中文字库放到新建一个/usr/share/fonts/目录下。配置 Qt5 的环境变量,打开文件系统/etc/profile,添加如下内容:
注意文件名和路径
以上就是搭建ARM平台(开发板)的Qt运行环境,接下来需要在ubuntu搭建Qt交叉编译环境。
五、搭建 Qt Creator 交叉编译环境
从网上下载安装包安装 Qt Creator, qt-opensource-linux-x64-5.12.9.run
下载完成后,给权限并执行安装:
- chmod u+x qt-opensource-linux-x64-5.12.9.run
- sudo ./qt-opensource-linux-x64-5.12.9.run
接下来就会弹出安装窗口,就跟在win安装应用一样了,省略。
安装完成后, 配置Qt Creator Kits。打开Qt,点击工具->选项
配置 qmake,qmake在上面编译Qt源码后生成的armqt-5.12.9里面
配置 C++编译器,这里我使用以前安装的交叉编译器,我的在ubuntu的/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++
配置 Kits,选择刚才的Qt versions和C++编译器。
Qt环境搭建好了,可以新建一个项目试试,在新建项目时的Kits选项记得把刚才添加Kits也勾选上。
构建ARM平台上的Qt执行程序,就选上刚才新添加的Kit,然后点击构建,就会生成一个 build-test-ARM_Qt_5_12_9-Debug 的文件,里面就存放着Qt可执行程序,把这个可执行程序发送到ARM平台(开发板),然后直接运行就可以了。
如果想在ubuntu上运行,就选择默认的kit,然后直接点击绿色的三角形运行就可以了,同时会生成一个build-test-Desktop_Qt_5_12_9_GCC_64bit-Debug 文件,里面的可执行文件就是在ubuntu中运行的。
六、获得Qt可执行文件的另一种方法
除了上面说的在Qt Creator 中构建出可以在ARM平台上运行的Qt程序之外,还有另一种方法也可以得到可以在ARM平台上运行的Qt程序。
进入项目的文件夹,直接运行qmake,生成 Makefile,再执行 make 开始编译。
- cd test
- /home/xzj/tool/qt-everywhere-src-5.12.9/armqt-5.12.9/bin/qmake
- make
以上是关于如何把51程序移植到arm?的主要内容,如果未能解决你的问题,请参考以下文章