@

0.系列教程

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

系列教程

我的公众号:mcu149

YA157C交叉编译环境搭建的更多相关文章

  1. Exynos4412交叉编译环境搭建

    Exynos4412交叉编译环境搭建 交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发.编译速度. 环境: Tiny4412SDK1506开发板 需要软件: arm-linux- ...

  2. Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程

    搭建所需环境Linux版本:Ubuntu 14.10 交叉编译器版本:arm-linux-gcc-4.4.3资源链接 何为交叉编译环境搭建交叉编译环境,即安装.配置交叉编译工具链.在Ubuntu环境下 ...

  3. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  4. Android独立交叉编译环境搭建

    我们经常需将一些C/C++源码编译成本地二进制,直接在android的linux内核上运行,这是就需要进行交叉编译.由于Android的运行环境核普通Linux又区别,所以常规方式针对ARM进行交叉编 ...

  5. iMX6 yocto平台QT交叉编译环境搭建

    转:https://blog.csdn.net/morixinguan/article/details/79351909 . /opt/fsl-imx-fb/4.9.11-1.0.0/environm ...

  6. Zynq7000开发系列-4(新:Xilinx交叉编译环境搭建)

    一.前言  本来上一篇文章已经讲了Xilinx交叉编译环境的搭建,但是我在后续的使用中发现:使用2011年版本的交叉编译链编译OpenCV 3.1.0时出现错误: 网络搜索一番,查明是交叉编译链的问题 ...

  7. Zynq7000开发系列-3(Xilinx交叉编译环境搭建)

    一.前言 上一篇文章说了,在开发之前必须先搭建起交叉编译环境,于是这里我们就介绍一下环境的搭建过程. 其实在所安装的Vivado HLx 2016.4中就包含了Xilinx SDK,在该SDK上即可开 ...

  8. ARM-Linux Gcc 交叉编译环境搭建

    1 NFS网络文件系统搭建 测试宿主机与目标板ping通 目标板上某个文件夹(例如mnt)挂载到宿主机(192.168.1.111)的/home/nfs_dir文件夹下 mount –t nfs –o ...

  9. vs与linux的交叉编译环境搭建

    很久之前就想写一个linux服务器,但是对linux的vim编译工具又不是很熟,只能在win环境下写好代码拷贝到linux环境下编译运行,现在VS出了一个插件可以对linux代码远程在linux环境下 ...

随机推荐

  1. Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题

    1. 在matlab的m函数很可能遇到原函数[a,b] = func(a); 这样的两个输出参数. 2. 在观察C#生成后定义中我们发现: public MWArray HP(); public MW ...

  2. 2019-2020-1 20199324《Linux内核原理与分析》第一周作业

    1.问题:使用banner输出图形字符为什么都是大写? 2.实验二:基本概念及操作 作业:命令toilet和figlet的使用 使用如下命令安装 $ sudo apt-get update $ sud ...

  3. 监控 Linux 服务器活动的几个命令(watch top ac)

    watch.top 和 ac 命令为我们监视 Linux 服务器上的活动提供了一些十分高效的途径. 为了在获取系统活动时更加轻松,Linux 系统提供了一系列相关的命令.在这篇文章中,我们就一起来看看 ...

  4. 吴裕雄--天生自然python学习笔记:python 文件批量处理

    Python 在文件处理方面表现突出,关于文件的处理 也是很多人经常用到的功能. 对 Python 的文件处理的技巧进行综合应用,比如把大量文件 的复制.按指定的文件名进行保存.找出重复的照片.将 所 ...

  5. demo4j解析xml

    1//先加入dom4j.jar包 2import java.util.HashMap; 3import java.util.Iterator; 4import java.util.Map; 5 6im ...

  6. vs2015的密钥

    最近一直提示VS要登陆,登陆完就说评估期已到,搞得很烦. VS2015 enterprise版本得密钥:  HM6NR-QXX7C-DFW2Y-8B82K-WTYJV    亲测有效!!! 专业版本的 ...

  7. Jmeter阶梯式压测

    https://www.cnblogs.com/Zfc-Cjk/p/11639219.html 什么是阶梯式压测? 阶梯式压测,就是对系统的压力呈现阶梯性增加的过程,每个阶段压力值都要增加一个数量值, ...

  8. King of the Waves

    You are organising a king of the hill tournament, the Buenos Aires Paddleboarding Competition (BAPC) ...

  9. Google DevTools Explanation

    Evaluating network performance The Network panel records information about each network operation in ...

  10. 前端之css引入方式/长度及颜色单位/常用样式

    1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset="UTF-8"> < ...