嵌入式 Linux平台 C程序 交叉编译技术

2023-05-16

嵌入式Linux平台C程序交叉编译技术

一、实验目的和任务

  1. 本实验要求复习和掌握Linux平台的C程序开发过程。
  2. 本实验要求掌握嵌入式开发板的操作方法。
  3. 本实验要求掌握Linux平台交叉编译方法和程序运行方法。

二、实验设备介绍

B703实验室是一个综合的硬件开发实验室,基于本门课程主要用到的配置环境如下:
1.软件环境: win7操作系统,VMware workstation,ubuntu12 [配置交叉编译环境]。
2.硬件环境: PC主机与smart210开发板;

三、实验内容和步骤

3.1 Smart210开发板的基本介绍和使用

由于博创开发板历经时久,多数已有功能损坏,使用新版linux开发板,其核心板是Smart210,使用串口线将PC机与703开发板连接,开发板是arm CPU,PC机则是intel CPU。操作开发板最重要的方法就是连接到开发板的串口,串口提供一个超级管理员命令窗口,还支持文件传输。开发板具有丰富的外接接口,PC机通过外接接口控制开发板,传输数据(程序或文件)最常用的是通过串口和网口,如果要使用WiFi需要配备专门的wifi模块。选择串口连接方式首先准备一条质量良好的usb2serial线(质量不好的串口线会浪费很多时间),一端连到PC(win10),一端连接到开发板的COM0口,使用XShell软件连接开发板连接,查看PC机端串口编号为COM5。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果PC主机只有USB接口没有串口接口,可以用USB转串口的线(9口)连接到开发板的COM口,还有一种4针的usb转ttl的转接方式,与开发板上有对应的(vcc 5v,gnd,TX,RX)针脚相连。
B703PC机的win7使用Xshell软件连接串口,使用菜单:File->New。在对话框中设置连接的名称,协议要选SERIAL,选择SERIAL节点,请使用com2口[指PC主机端],并且波特率设为115200,开发板请接com0。如果能够看到root@FriendlyARM提示符,表示已经可以通过串口操作开发板,可以在这个窗口执行命令,还可以传输文件。
在这里插入图片描述
在这里插入图片描述
如果线路成功连接到开发板,打开开发板开关,则显示开发板系统启动信息。如果连接不成功,可能连接线断了,换另一条线,B703主机短的是COM1口,长的是COM2口。开发板固定是COM0不变。按下回车后,有root@FriendlyARM提示符则表示串口连接成功。在这里插入图片描述
在这里插入图片描述
如果smart210开发板如下图没有显示图形化菜单界面,其实机器是正常运行的,机器没有问题。
在这里插入图片描述
开发板启动后是显示学校图标还是显示QT菜单界面的区别,在/etc/init.d/rcS文件中设定了一条指令,该指令内容如下
bin/qtoptia &
这行命令实际是要求开发板运行一个qt程序用来显示一个丰富的菜单。
通过命令行进入开发板上的etc/init.d目录,编辑rcs文件(vi ./rcs)。找到这行代码,在前面加个#将它注释掉,就显示学校图标。保留该行则开机显示qt的菜单界面。
在这里插入图片描述
在rcS文件中有一行指令,bin/qtopia & 它显示一个qt界面的菜单,行前加#则只显示学校图标。在这里插入图片描述

3.2 交叉编译工具arm-linux-gcc介绍

在PC平台的ubuntu系统中运行gcc –v命令,编译的目标是x86_64的应用程序。
在这里插入图片描述
在arm平台(树莓派)运行gcc –v命令,编译的目标是arm-linux的应用程序。在这里插入图片描述
在不同平台生成的目标文件格式是不同的,file命令可查看可执行文件的平台信息。bg 是在pc平台编译生成的,而bg_rp则是在arm平台生成的(树莓派)。在这里插入图片描述
在pc平台无法运行arm平台的可执行文件。在这里插入图片描述
一般的嵌入式开发板由于硬件性能弱,直接编译二进制很艰难,借助PC来编译则容易一些。交叉编译工具arm-linux-gcc是一个在pc平台运行的编译工具,它将源码编译生成的是在arm平台运行的程序。由于 arm-linux-gcc工具依赖的运行库过多,而PC机,嵌入式板,GCC工具的版本的组合可能太多,交叉编译平台的搭建是相当繁琐和耗时的,因此下述的过程仅作为参考,不建议轻易尝试。

3.3 Smart210开发板的交叉编译程序

打开虚拟机进入ubuntu12系统,ubuntu系统中的arm-linux-gcc版本较新,可以在新开发板上运行。
在这里插入图片描述
//011.c 第一个交叉编译源程序

#include <stdio.h>
int main(void)
{
printf("Hello from smart210.\n");
}


调整xshell的显示样式。在这里插入图片描述在机器间传输文件的方法有:SD卡,U盘,通过串口线结合rz命令从pc传到开发板,这几个方法都无需网络支持,还有ftp命令,nfs协议,samba协议,在使用这些方法前必须配置好机器的IP地址,然后通过网络传输。
在xshell终端上使用rz命令将文件拷贝到开发板上,使用chmod命令添加执行属性。

在这里插入图片描述

3.5 Smart210开发板上的图片显示程序

将下面的程序在虚拟机ubuntu12上使用arm-linux-gcc进行编译。
//012.c 开发板显示图片

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
void *aplay_music(void *arg)//子线程
{
        system("madplay NewDivide.mp3 -r");
}
int show_photo(char *number)
{
	int fd_bmp;
	int fd_lcd;
	int i;
	int lcd_buf[800*480];
	char bmp_buf[800*480*3];
	fd_bmp=open(number,O_RDWR);
	if(fd_bmp==-1)
	{
		printf("open bmp failed!\n");
		return -1;
	}
	lseek(fd_bmp,54,SEEK_SET);
	read(fd_bmp,bmp_buf,800*480*3);
	for(i=0;i<800*480;i++)
	{
//将位图字节信息加载到内存中
		lcd_buf[i]=(bmp_buf[i*3+2]<<16)+(bmp_buf[i*3+1]<<8)+(bmp_buf[i*3]<<0);
	}
	close(fd_bmp);
	//文件/dev/fb0控制屏幕上的每一点的颜色的文件,程序改变文件的内容,可实现在屏幕上画图了:-)
	fd_lcd=open("/dev/fb0",O_RDWR);//打开linux frame buffer
	if(fd_lcd==-1)
	{
		printf("open fb0 failed\n");
		return -1;
	}
	write(fd_lcd,lcd_buf,800*480*4);
	close(fd_lcd);
	return 0;
}
int main(void)
{
	int i = 0;
	char  bmp_name[5][10]={"1.bmp", "2.bmp", "3.bmp", "4.bmp", "5.bmp"};
	pthread_t pthread1;
	//pthread_create(&pthread1,NULL,aplay_music,NULL); 
	for(i=0;i<100;i++) //主线程
	{
		show_photo(bmp_name[i%5]);
		sleep(2); 
	}
	return 0; 
}

Smart210老师的开发板,虚拟机上的QT已经配置好了交叉编译环境。可以在虚拟机中使用交叉编译命令:arm-linux-gcc –o picshow picshow.c

使用xshell软件连接开发板,使用rz命令将图片和程序传到开发板上,
修改picshow文件属性,添加运行属性:chmod a+x picshow
运行程序即可看到屏幕交替显示图片。
在ubuntu12中使用交叉编译工具编译源程序。在这里插入图片描述

在开发板上使用rz命令将showpic文件传输到开发板,并且将showpic程序添加执行属性。

结束程序是使用ctrl+c键盘组合。在这里插入图片描述

程序运行效果如图,从中可看到图版是倒过来的,因为位图像素的坐标与屏幕的坐标不一致。

在这里插入图片描述

3.6 文件在Smart210开发板pc和虚拟机间的传输

在机器间传输文件的方法有:SD卡,U盘,通过串口线结合rz命令从pc传到开发板,这几个方法都无需网络支持,还有ftp命令,nfs协议,samba协议,在使用这些方法前必须配置好机器的IP地址,然后通过网络传输。
Win7与虚拟机ubuntu传输文件最简易的方法是进行文件拖放,但要求虚拟机正确安装vmware tools,如果无法拖放则需要重新安装vmware tools。
rz是一个开源程序,可从网络下载源码,经过交叉编译在开发板上运行。
samba是linux与常用的文件共享方式。

四、程序调试中遇到的问题和解决过程及运行结果

根据报告内容对指定程序进行调试,请首先排查程序出错的原因,最后得到正确的运行结果,并记录程序出错的代码及修正的内容,开发板的程序运行须拍照后放入实验报告中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式 Linux平台 C程序 交叉编译技术 的相关文章

  • Mybatis搞五下(分页、缓存)

    Mybatis搞五下 xff08 分页 缓存 xff09 上篇博客我们讲了动态SQL xff0c 一一多多和延迟加载问题 xff0c 这篇我们讲点轻松的东西 xff0c 关于分页插件pageHelper和Mybatis面试常问的缓存问题 M
  • 03、postman前置脚本

    postman前置脚本是指在Pre requests Script中编写的js脚本 xff0c 一个请求在发送之前 xff0c 会先去执行Pre Request Script xff08 前置脚本 xff09 中的代码 xff0c 可以是为
  • Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网 xff0c 二者虽然名字有不同 xff0c 但是数据还是一样的 xff0c 区别就在于前者把后者的所有店铺和商品的海量数据按照销售量 好评度 信誉度综合测评 重新计算 重新排序展现给买家的一个
  • Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?

    一 ChromeDriver的安装 若想使用Selenium成功调用Chrome浏览器完成相应的操作 xff0c 需要通过ChromeDriver来驱动 我们在下载之前先来确认下我们使用的Chrome浏览器版本 只需要红框内几位相同即可 根
  • 【点云系列】 场景识别类导读

    文章目录 1 背景知识2 定义3 传统方法4 基于深度学习的方法5 其他参考 xff1a 终于可以简单写一下这一块的导读了 xff0c 拖了一个多周了 希望可以帮助到大家 xff1b xff09 1 背景知识 点云检索 xff08 poin
  • 异常检测综述(Anomaly Detection: A Survey)

    Anomaly Detection A Survey 异常检测综述 xff1a 异常检测是一个重要的问题 xff0c 已经在不同的研究领域和应用领域进行了研究 许多异常检测技术是专门为某些应用领域开发的 xff0c 而其他技术则更为通用 本
  • 基于Prometheus和k8s搭建监控系统

    文章目录 1 实验环境2 Prometheus介绍 xff1f 3 Prometheus特点3 1 样本 4 Prometheus组件介绍5 Prometheus和zabbix对比分析6 Prometheus的几种部署模式6 1 基本高可用
  • STM32F4 | 窗口门狗(WWDG)实验

    文章目录 一 STM32F4 窗口看门狗简介二 硬件设计三 软件设计四 实验现象五 STM32CubeMX 配置 WWDG 在本章中 xff0c 我们将使用窗口看门狗的 中断功能来喂狗 xff0c 通过 DS0 和 DS1 提示程序的运行状
  • deepin15.11系统下使用源码包(tar.xz)安装MySQL 8.0+(补充)

    1 下载MySQL的安装包 1 1 进入官网 xff0c 找到下载 官网地址 mysql官网 1 2 找到下载入口 1 3 选择这个 1 4找到适合自己电脑系统版本 2 安装 配置MySQL和创建mysql用户 注意 最好使用root安装和
  • 基于docker部署prometheus

    1 prometheus架构 Prometheus Server 收集指标和存储时间序列数据 xff0c 并提供查询接口 ClientLibrary 客户端库 Push Gateway 短期存储指标数据 主要用于临时性的任务 Exporte
  • Prometheus监控实战系列二十:监控Kubernetes集群(下)

    本文承接上篇 xff0c 在本篇中我们会讲解Prometheus如何应用基于Kubernetes的服务发现功能 xff0c 检索目标信息并进行监控 在监控策略上 xff0c 我们将混合使用白盒监控与黑盒监控两种模式 xff0c 建立起包括基
  • RT-Thread 简介及架构

    RT Thread xff0c 全称是 Real Time Thread xff0c 顾名思义 xff0c 它是一个嵌入式实时多线程操作系统 xff0c 基本属性之一是支持多任务 xff0c 允许多个任务同时运行并不意味着处理器在同一时刻真
  • 进程的结构

    什么是进程 UNIX标准 xff08 特别是IEEE Std 1003 1 2004年版 xff09 把进程定义为 一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源 目前 xff0c 可以把进程看作正在运行的程序 像Linu
  • 【代码小坑】梯度回传为0

    记录一下训练过程中遇到的问题 xff0c 由于这个问题我花了很长时间才解决 xff0c 所以值得记录 先给出结论 xff1a tensor转换成numpy后会丢失梯度 xff0c 导致回传出现问题 由于原代码不容易理解 xff0c 简单用个
  • (超详细)零基础如何学习操作系统---操作系统书籍推荐

    直接先给出路线书籍 编码 隐匿在计算机软硬件背后的语言 汇编语言 x86从实模式到保护模式 操作系统导论 操作系统真象还原 查漏补缺 1 编码 隐匿在计算机软硬件背后的语言 对于完全不懂计算机的朋友 xff0c 这本书可以让你对计算机有一个
  • 多种形式ICP问题的ceres实例应用

    一家之言 xff0c 仅作分享 xff0c 如有不合理或需要改进的地方 xff0c 欢迎各位讨论 ICP方法主要解决空间点云3D 3D的运动估计问题 xff0c 已知 xff1a t 1 t 1 t 1 和
  • git配置以及git-cola使用教程

    git安装 打开终端 xff0c 输入sudo apt get install git git配置 配置用户名 git config global user name 34 user name 34 配置邮箱 git config glob
  • C++ 手撸简易服务器

    本文使用上一期写的反射类 xff0c 另外我发现 lt WinSock2 h gt 这个头文件里有RegisterClass 这个结构 xff0c 还有typedef RegisterClass RegisterClassW这句话 这都能重
  • STM32CubeMX实战教程(一)——软件入门

    软件入门 前言新建工程界面简介MCU外设配置时钟树工程设置工具生成代码代码分析main cgpio cstm32f4xx it c 程序下载现象 结语 前言 STM32Cube 是一个全面的软件平台 xff0c 包括了ST产品的每个系列 平
  • STM32F4 | 定时器中断实验

    文章目录 一 STM32F429 通用定时器简介二 硬件设计三 软件设计四 实验现象五 STM32CubeMX 配置定时器更新中断功能 这一章介绍如何使用 STM32F429 的通用定时器 xff0c STM32F429 的定时器功能十分强

随机推荐

  • 相机标定和ORBSLAM2/VINS测试

    目录 一 相机标定1 1 标定目的1 2 常见模型介绍1 2 1 相机模型1 2 2 畸变模型 1 3 双目标定1 3 1 常见标定工具及对应使用场景1 3 2 Kalibr标定1 3 3 opencv双目标定1 3 4 basalt标定
  • matlab安装教程

    MATLAB xff08 矩阵实验室 xff09 是MATrix LABoratory的缩写 xff0c 是一款由美国The MathWorks公司出品的商业数学软件 MATLAB是一种用于算法开发 数据可视化 数据分析以及数值计算的高级技
  • 软件工程结构化分析

    需求分析的概念 需求分析是软件定义时期的最后一个阶段 xff0c 它的基本任务是准确的回答 系统必须做什么 这个问题 也就是对目标系统提出完整 准确 清晰 具体的要求 在需求分析阶段结束之前 xff0c 系统分析员应该写出软件需求规格说明书
  • 树莓派忘记密码 vnc登陆显示‘No configured security type is supported by 3.3 viewer’的问题解决办法

    树莓派忘记密码以及部署VNC 1 修改密码 需求你的树莓派有屏幕 xff0c 没有屏幕的可以百度其他解决方案了一把键盘 树莓派吃灰了很久 xff0c 最近由于有新的需求 xff0c 就拿出来玩耍一下 首先是第一个问题 xff0c 如何查看i
  • imx6ull 正点原子设备树适配韦东山的开发板 (一)顺利启动,配置led,button

    设备树在公司经常用到 有时候很多驱动编写也就是替换设备树 所以拿韦老师的板子练手设备树 这次尝试直接拿正点的设备书改成韦老师的板子能用 对比 正点原子的设备树结构图 韦东山的设备树结构图 从因为蓝色的是开发板厂商对开发板自己的优化 所以我们
  • 一文了解目标检测边界框概率分布

    一文了解目标检测边界框概率分布 概率建模 众所周知 xff0c CNN的有监督学习通常是建立在给定训练数据集之上的 xff0c 数据集的标签 也称为GT xff0c 决定了人类期望模型学习的样子 它通过损失函数 优化器等与CNN模型相连 因
  • Kalibr安装教程

    系统 xff1a Ubuntu18 04 首先 xff0c 需要安装好gcc g 43 43 cmake ros xff0c 如果没有 xff0c 可使用如下命令一键安装 sudo apt get install gcc g 43 span
  • 程序员:每一份不忘初心的情怀, 都是对技术的追求

    1 真正的情怀 xff0c 是从不矫情 这几年 情怀 大约快成了贬义 创业讲情怀 xff0c 产品讲情怀 xff0c 好像没点情怀都不好意思出门见人 我们曾经充满热情 xff0c 是一位开源软件倡导者 xff0c 我们崇尚全栈工程师才有未来
  • HTML代码简写方法

    原文链接 xff1a HTML代码简写方法 大写的E代表一个HTML标签 1 E 代表HTML标签 2 E id 代表id属性 3 E class 代表class属性 4 E attr 61 foo 代表某一个特定属性 5 E foo 代表
  • Git远程分支

    远程分支 远程分支是位于远程仓库的分支 xff0c 我们通常会用远程分支来更新本地分支 xff0c 然后在本地进行修改 xff0c 最后将修改的结果同步到远程分支上 除此之外 xff0c 我们还需要搞清楚远程跟踪分支和跟踪分支的概念 远程跟
  • STM32F4 | PWM输出实验

    文章目录 一 PWM 简介二 硬件设计三 软件设计四 实验现象五 STM32CubeMX 配置定时器 PWM 输出功能 上一章 xff0c 我们介绍了 STM32F429 的通用定时器 TIM3 xff0c 用该定时器的中断来控制 DS1
  • 基于大疆RM3508电机的串级PID(角度环+速度环)

    1 前言 最近参加ROBOCON xff0c 我负责编写传球机器人 xff0c 由于传球机构需要一个电机转固定角度来带动球 xff0c 所以便用大疆3508电机通过串级PID来实现 xff0c 不得不说3508电机还是真的强 xff0c 先
  • ROS三种通信方式之服务通信

    一 服务通信的理论模型 服务通信也是ROS中一种极其常用的通信模式 xff0c 服务通信是基于请求响应模式的 xff0c 是一种应答机制 也即 一个节点A向另一个节点B发送请求 xff0c B接收处理请求并产生响应结果返回给A 就像是服务器
  • 滑模控制理论(SMC)

    滑模控制理论 Sliding Mode Control SMC 滑膜控制理论是一种建立在现代控制理论基础上的控制理论 xff0c 其核心为李雅普诺夫函数 xff0c 滑膜控制的核心是建立一个滑模面 xff0c 将被控系统拉倒滑模面上来 xf
  • ROS OpenRAVE 常用逆解库 ikfast (应用于UR机械臂)

    ArmKine cpp include 34 armKine h 34 include lt math h gt include lt stdio h gt include lt corecrt math defines h gt defi
  • Fast and High Quality Image Denoising via Malleable Convolution阅读笔记

    论文 xff1a Fast and High Quality Image Denoising via Malleable Convolution arXiv xff1a https arxiv org abs 2201 00392 Abst
  • 浅谈java继承机制——通过super调用父类方法

    最近在看代码的时候遇到一个天坑 xff0c 由于习惯性思维 xff0c 可能大部分人都会掉近这个坑 xff0c 所以拿出来记录一下 子类使用super调用的父类方法里 xff0c 再调用父类的方法 先来看一段代码 xff08 该段代码只是作
  • ORB_SLAM2运行KITTI数据集

    在前文我们已经安装运行了ORB SLAM2 xff0c 下载和编译 xff08 包括报错 xff09 在文章 xff1a ORB SLAM2下载编译及运行EuRoC数据集 浅梦语11的博客 CSDN博客 euroc数据集下载 并且我们使用运
  • 嵌入式学习札记(基于STM32L431) 一、ARM Cortex-M4微处理器

    ARM Cortex M4微处理器 写在前面ARM Cortex M4微处理器简介ARM Cortex M4微处理器内部结构概要位数总线结构中断控制存储器保护低功耗内部寄存器 寻址方式与机器码获取方法指令保留字简表与寻址方式指令保留字简表寻
  • 嵌入式 Linux平台 C程序 交叉编译技术

    嵌入式Linux平台C程序交叉编译技术 一 实验目的和任务 本实验要求复习和掌握Linux平台的C程序开发过程 本实验要求掌握嵌入式开发板的操作方法 本实验要求掌握Linux平台交叉编译方法和程序运行方法 二 实验设备介绍 B703实验室是