YA157C交叉编译环境搭建
@
0.系列教程
- 我用STM32MP1做了个疫情监控平台1—交叉编译环境搭建
- 我用STM32MP1做了个疫情监控平台2—Qt环境搭建
- 我用STM32MP1做了个疫情监控平台3—疫情监控平台实现
- 我用STM32MP1做了个疫情监控平台4—功能完善界面重新设计
1.开发板简介
- 开发板型号:MYD-YA157C,512MB DDR3,4GB eMMC
- 主控芯片:STM32MP157AAC
- 光盘资料版本:MYD-YA157C-20191225.iso
MYD-YA157C开发套件由核心板MYC-YA157C和底板MYB-YA157C组成,主控芯片是ST目前最高配置的MPU——STM32MP157AAC3,双核Corte-A7+Cortex-M4,主频最高可达650Mhz。
硬件准备
- 12v电源适配器
- USB-TTL模块:115200/8/1/无
- 网线
开发板和主机配置
- 开发板Linux版本:Linux 4.19.9
- 开发板IP:192.168.1.136
- 主机配置:Ubuntu 16.04
- 主机IP:192.168.1.111
2.主机搭建交叉编译环境
所谓交叉编译,其实是相对于本地编译,即在一种平台上编译出来的程序,可以在另外一个平台下运行,即编译的环境和运行的环境不一样,属于交叉的。在进行嵌入式开发时,常常是在PC(x86架构)上使用交叉编译工具编译,编译出来的可执行文件在开发板(ARM)平台下运行。
交叉编译工具包,位于光盘资料的03-Tools/Complie Toolchain
目录下,是一个压缩包,直接右键提取,或者使用tar解压命令都可以把压缩包解压。解压完成之后有以下几个文件:
#解压sdk
tar xvf qt-sdk.tar.xz
#进入sdk目录之后可以看到以下文件
meta-toolchain-qt5-openstlinux-eglfs-stm32mp1-x86_64-toolchain-2.6-snapshot.host.manifest
meta-toolchain-qt5-openstlinux-eglfs-stm32mp1-x86_64-toolchain-2.6-snapshot.sh
meta-toolchain-qt5-openstlinux-eglfs-stm32mp1-x86_64-toolchain-2.6-snapshot.target.manifest
meta-toolchain-qt5-openstlinux-eglfs-stm32mp1-x86_64-toolchain-2.6-snapshot.testdata.json
因为后面我们会进行Qt应用的开发,所以这里我们选择带Qt图形库支持的交叉编译工具包
安装交叉编译工具包:
#切换到解压之后的文件夹执行安装脚本
./meta-toolchain-qt5-openstlinux-eglfs-stm32mp1-x86_64-toolchain-2.6-snapshot.sh
#按[ENTER]键选择默认的安装配置,默认安装在/opt目录下
来看一下是否安装成功了:
#切换到安装目录
cd /opt/st/stm32mp1/2.6-snapshot/
#临时设置环境变量
source ./environment-setup-cortexa7t2hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi
#这样会把GCC交叉编译器临时添加到环境变量,退出终端失效
#查看GCC交叉编译器版本
arm-openstlinux_eglfs-linux-gnueabi-gcc --version
#或者使用$CC --version
#输出信息
arm-openstlinux_eglfs-linux-gnueabi-gcc (GCC) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
如果能输出版本信息,就说明安装成功了。
3.编译第一个ARM Linux程序——Hello World
有了交叉编译工具,和PC平台的gcc使用方法一样,就可以直接编译第一个程序了。
#切换到用户目录
cd ~
#新建一个目录
mkdir hello
#切换到hello目录
cd hello
#新建一个C文件
touch hello.c
#输入Hello World程序
vim hello.c
hello.c文件的内容:
#include <stdio.h>
int main(void)
{
printf("Hello STM32MP1 ! -- By arm-gcc\n");
return 0;
}
编写完成之后,先别急着用arm-gcc编译,先用Ubuntu自带的gcc编译一下,看有没有语法错误,能不能正常运行。编译这个C文件,并指定输出文件为pc.o
gcc hello.c -o pc.o
看一下这个文件的类型,并执行这个文件。
可以看出,没有语法错误,生成了pc.o文件,这个文件是运行在x86_64架构系统上,即PC上的,而且运行结果是我们想要的。好了,程序运行没问题,就可以使用arm-gcc来编译这个程序,并生成可以在arm开发板上运行的可执行文件了。再使用交叉编译工具编译这个C程序,指定输出arm.o文件。
$CC hello.c -o arm.o
语法没有错误,生成了arm.o文件,可以通过file命令查看这个文件的信息。
因为这个文件是运行在ARM架构的系统上的,所以在PC上不能运行,下面我们把这个文件放到开发板上去运行。
4.在开发板上运行Hello World程序
怎么能在开发板上运行这个程序呢?也就是怎么能把这个文件传输到开发板上呢?
4.1 U盘拷贝
这恐怕是最简单的方法了。把生成的arm.o文件复制到U盘里,把U盘插到板子上的USB接口,并挂载到mnt目录
#查看当前的设备
ls /dev/sda*
#挂载U盘到mnt目录
mount /dev/sda /mnt
#如果没有挂载成功,尝试挂载另外一个设备
mount /dev/sda4 /mnt
#挂载成功之后切换到mnt目录
cd /mnt
#运行arm.o
./arm.o
实际运行:
同样取消挂载:
#先退出/mnt目录
cd ~
#取消挂载
umount /mnt
这种方式有点麻烦,我们来使用另外一种方法。
4.2 scp文件传输
在使用交叉编译工具链,编译出arm.o文件时,我们是通过拷贝到U盘,然后把U盘插到开发板上来运行程序的,但是这样未免太麻烦了。
那么有没有一种简单的方式,可以在PC Ubuntu主机和开发板快速方便的进行文件传输呢?其实有很多种方法,nfs,ftp,tftp等等,这里我们使用一种最简单的方式:scp命令。
scp命令是基于物理网口的,在进行传输之前,需要确定开发板和PC主机是可以正常通信的。开发板和电脑使用网线连接,或者开发板连接路由器,电脑连路由器的WiFi,这两种方式都是可以的。
- 开发板配置eth0网口IP地址:
ifconfig eth0 192.168.1.136 up
- 主机配置IP地址
通过有线连接选项,手动配置IPv4地址
开发板和主机互相ping,测试网络是否正常。
这样就说明是正常的。把PC主机上的arm.o文件传输到开发板上:
scp ~/arm.o root@192.168.1.136:/root
如果出现如下错误:
只需要执行一下提示的那一行命令就行了:
ssh-keygen -f "/home/whik/.ssh/known_hosts" -R 192.168.1.136
如果还是报错:
那就把knows_host文件删除了
rm ~/.ssh/know_hosts
再执行scp命令:
先输入yes,下面会显示传输的进度。
到开发板上看一下:
可以看到,和PC上的运行结果是一样的。
关于scp的其他用法:
#复制本地文件到远程文件夹
scp local_file remote_username@remote_ip:remote_folder
#复制本地文件到远程文件
scp local_file remote_username@remote_ip:remote_file
#复制整个目录及其子文件
scp -r local_folder remote_username@remote_ip:remote_folder
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可。
- 1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号。命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 remote@192.168.1.136:/usr/local/sin.sh /home/administrator
- 2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
4.3 tftp文件传输
另一种文件传输方式,比scp麻烦一些,先在主机配置tftp服务器,并配置共享目录,然后就可以开始文件传输了。
#主机安装tftp服务器
sudo apt-get install tftpd-hpa
#创建共享目录
mkdir ftp
#修改目录权限
chmod 777 ftp
#在配置文件中添加共享目录
sudo vim /etc/default/tftp-hpa
#添加共享文件夹
TFTP_DIRECTORY="/home/whik/ya157c/ftp"
#启动tftp服务器
sudo service tftpd-hpa restart
开发板获取主机192.168.1.111上共享目录下的a.cpp文件,并重新命名为b.cpp保存到本地
#把远程的a.cpp文件保存到本地b.cpp
tftp 192.168.1.111 -g -r a.cpp -l b.cpp
#把远程的a.cpp保存到本地,不重命名
tftp 192.168.1.111 -g -r a.cpp
参数说明:
-g 表示下载文件(get)
-p 表示上传文件(put)
-l 表示本地文件名(local file)
-r 表示远程主机的文件名(remote file)
5.ssh登录开发板
如果scp和tftp都可以正常传输,我们还可以使用ssh命令登录开发板,和串口登录是一样的。
ssh root@192.168.1.136
6.注意
如果遇到无法正常安装程序,请尝试安装以下程序。
#更新源
sudo apt-get update
sudo apt-get upgrade
#安装所需要的软件
sudo apt-get install libusb-1.0-0
sudo apt-get install bison flex sed wget curl cvs subversion git-core
coreutils unzip texi2html texinfo docbook-utils gawk python-pysqlite2 diffstat
help2man make gcc build-essential g++ desktop-file-utils chrpath libxml2-utils
xmlto docbook bsdmainutils iputils-ping cpio python-wand python-pycryptopp
python-crypto
sudo apt-get install libsdl1.2-dev xterm corkscrew nfs-common nfs-kernel-
server device-tree-compiler mercurial u-boot-tools libarchive-zip-perl
sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib
libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev
7.shell脚本点灯
简单写一个shell脚本闪个灯,没什么技术含量,led_blink.sh文件内容:
#!/bin/bash
echo none > /sys/class/leds/heartbeat/trigger
#死循环
while true
do
echo 0 > /sys/class/leds/heartbeat/brightness
echo "点亮"
sleep 0.1
echo 1 > /sys/class/leds/heartbeat/brightness
sleep 0.1
echo "熄灭"
done
在开发板上运行
#scp传输
scp led_blink.sh root@192.168.1.136:/home/root
#开发板给这个脚本添加可执行权限
chmod +x led_blink.sh
#开发板执行这个脚本
./led_blink.sh
系列教程
- 我用STM32MP1做了个疫情监控平台1—交叉编译环境搭建
- 我用STM32MP1做了个疫情监控平台2—Qt环境搭建
- 我用STM32MP1做了个疫情监控平台3—疫情监控平台实现
- 我用STM32MP1做了个疫情监控平台4—功能完善界面重新设计
我的公众号:mcu149
YA157C交叉编译环境搭建的更多相关文章
- Exynos4412交叉编译环境搭建
Exynos4412交叉编译环境搭建 交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发.编译速度. 环境: Tiny4412SDK1506开发板 需要软件: arm-linux- ...
- Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程
搭建所需环境Linux版本:Ubuntu 14.10 交叉编译器版本:arm-linux-gcc-4.4.3资源链接 何为交叉编译环境搭建交叉编译环境,即安装.配置交叉编译工具链.在Ubuntu环境下 ...
- Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读
环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...
- Android独立交叉编译环境搭建
我们经常需将一些C/C++源码编译成本地二进制,直接在android的linux内核上运行,这是就需要进行交叉编译.由于Android的运行环境核普通Linux又区别,所以常规方式针对ARM进行交叉编 ...
- iMX6 yocto平台QT交叉编译环境搭建
转:https://blog.csdn.net/morixinguan/article/details/79351909 . /opt/fsl-imx-fb/4.9.11-1.0.0/environm ...
- Zynq7000开发系列-4(新:Xilinx交叉编译环境搭建)
一.前言 本来上一篇文章已经讲了Xilinx交叉编译环境的搭建,但是我在后续的使用中发现:使用2011年版本的交叉编译链编译OpenCV 3.1.0时出现错误: 网络搜索一番,查明是交叉编译链的问题 ...
- Zynq7000开发系列-3(Xilinx交叉编译环境搭建)
一.前言 上一篇文章说了,在开发之前必须先搭建起交叉编译环境,于是这里我们就介绍一下环境的搭建过程. 其实在所安装的Vivado HLx 2016.4中就包含了Xilinx SDK,在该SDK上即可开 ...
- ARM-Linux Gcc 交叉编译环境搭建
1 NFS网络文件系统搭建 测试宿主机与目标板ping通 目标板上某个文件夹(例如mnt)挂载到宿主机(192.168.1.111)的/home/nfs_dir文件夹下 mount –t nfs –o ...
- vs与linux的交叉编译环境搭建
很久之前就想写一个linux服务器,但是对linux的vim编译工具又不是很熟,只能在win环境下写好代码拷贝到linux环境下编译运行,现在VS出了一个插件可以对linux代码远程在linux环境下 ...
随机推荐
- SVN服务器的搭建(一)
1.基本概念 1.1.什么是版本控制 简单点来说,版本控制就是数据仓库,它可以记录你对文件的每次更改.这样,就算你在昏天黑地的改了几个月后老板说不要了,还是按照过去那样,你也不会抓狂,简单的恢复版本操 ...
- Notes_STL_List_And_Map
//Description: 使用STL遇到的问题 //Create Date: 2019-07-08 09:19:15 //Author: channy Notes_STL_List_And_Map ...
- Spring Boot 2.x 整合 Redis最佳实践
一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...
- Apsara Clouder专项技能认证:实现调用API接口
一.API 简介 1.API 的概念 API(Application Programming Interface应用程序编程接口)是一些预定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访 ...
- zabbix 使用邮件发送告警信息
配置系统mail命令,使其可以发送外网邮件 mail 命令配置 修改zabbix_server配置文件,使其可以执行告警脚本 [root@rexen etc]# vim /usr/local/zabb ...
- 康耐视软件VisionPro-max-u与VisionPro-plus-u的区别
康耐视软件VisionPro-max-u与VisionPro-plus-u的区别 1.VisionPro-plus-u为基础版可以直接运用该软件包的算法,拖拽式的窗口程序 2.VisionPro-ma ...
- Esp8266和HomeKit
Summary 没有找到合适的简单解决方案,将Esp8266控制的设备连接到HomeKit.所以参照EspEasy实现 HomeKit和Esp8266连接. 连接方式: Raspberry Zero ...
- Nginx笔记总结七:root和alias文件路径配置
1. root path 配置段:http.server.location.if location ~ ^/weblogs/ { root /data/weglogs/www.ttlsa.com; a ...
- JXJJOI2018_T2_tank
题目描述 Lemon最近迷上了一款坦克对战游戏.在这款游戏中,Lemon需要驾驶一辆坦克与敌军对战. 坦克有很多不同的武器,每种武器有各自的特点,而Lemon所要做的就是合适地发射这些武器,对敌军造成 ...
- Angular2与Angular1的区别
原文地址: http://www.angularjs.cn/A2Ar 整体上来说,Angular2变得更加简洁,最核心的概念只剩下一个,那就是组件Component,其它所有的一切都是围绕着Compo ...