嵌入式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 bufferif(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与常用的文件共享方式。

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

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

嵌入式 Linux平台 C程序 交叉编译技术相关推荐

  1. linux算法设计,嵌入式Linux平台下随机序列算法设计.doc

    嵌入式Linux平台下随机序列算法设计 嵌入式Linux平台下随机序列算法设计 [摘 要]本文以多媒体播放器的随机不重复播放机能为切入点,针对嵌入式平台实时性要求高,处理速度不够快,但系统存储歌曲量大 ...

  2. linux 文件系统字体小,基于嵌入式Linux平台的最小文件系统的制作

    工作平台:FL2440 交叉编译环境:arm-linux-gcc 3.4.1 busybox版本:1.9.1 1) 制作文件系统总目录: mkdir my_rootfs 2) 编译&安装bus ...

  3. 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解

    原标题:嵌入式Linux驱动设备之MTD技术详解 MTD(memory technology device内存技术设备)是用于访问memory设备(ROM.flash)的Linux的子系统. MTD的 ...

  4. 嵌入式linux毕业设计,基于嵌入式Linux平台的智能小区终端系统设计与实现

    内容简介: 硕士学位论文 基于嵌入式Linux平台的智能小区终端系统设计与实现,正文共69页. [摘要] 智能化小区通过采用智能终端系统,为住户提供了一种更加安全.舒适.方便.快捷和开放的智能化.信息 ...

  5. SIMcom嵌入式Linux平台通用配置

    修订记录 修订日期 修订作者 修订备注 创建第一版 2020.02.14 forwardxiang@163.com 文档版本V1.0.0 文章目录 第一部分 SIMcom嵌入式Linux平台通用配置 ...

  6. 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...

    用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...

  7. 嵌入式linux应用程序升级,基于嵌入式Linux平台的应用升级机制的研究与设计

    摘要: 随着科技的发展与新技术的推出,嵌入式在生活中被广泛应用,嵌入式产品在日常生活中扮演了重要的角色.嵌入式Linux操作系统已经普遍应用到医疗电子,信息家电,远程通信,机顶盒等多个领域,嵌入式Li ...

  8. 锐捷认证客户端在嵌入式linux平台上的移植

    一.TCP/IP协议简介 IP协议用于将多个包交换网络连接起来,IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流 ...

  9. 嵌入式linux下的FFmpeg交叉编译(最全面)

    FFmpeg介绍 当下直播应用很火,在音视频领域,FFmpeg相当知名.可能你用的一些视频播放器背后都有它的身影.FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音视频流.转码.封装.解封装 ...

最新文章

  1. wordpressPHP实现ajax评论,wordpress无刷新评论:无需插件ajax实现wordpress comment无刷新机制...
  2. 轻量级高精度人脸关键点推荐
  3. 参数整定临界比例度实验_控制算法手记自动整定方法初步
  4. apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL
  5. spring @order控制对象的顺序
  6. 类选择器与ID选择器的比较
  7. 如何在基于 Silverlight 的本地应用程序之间实现通信
  8. 【渝粤题库】陕西师范大学210022 学前儿童语言教育 作业(专升本)
  9. 成都软件工程师python_为什么每个软件工程师都应该学习Python?
  10. php获取变量数据类型,php如何确定变量的数据类型
  11. MySQL免安装版安装
  12. openGauss与PostgreSQL分区策略语法测试
  13. strnpy函数的用法
  14. python deap_Python遗传算法框架DEAP-Creating Types
  15. Android显示人民币双横线的¥符号
  16. Android手机解网络锁软件,GalaxSIM解锁工具 GalaxSim Unlock
  17. 半监督3D医学图像分割(三):URPC
  18. baidu手机卫兵给开发者生态带来新想像空间
  19. PyQt5中为窗口添加菜单工具栏状态栏
  20. R5 7640H参数 锐龙R57640H性能怎么样相当于什么水平级别

热门文章

  1. maven-聚合工程
  2. 基于Linux的及时通信软件
  3. 大事发生,程序员一直在守护世界
  4. 实现一个对Django Models数据进行模拟的Mock方案
  5. 视频处理基础知识整理
  6. 搭建vpn linux,vpn在linux下搭建
  7. webstorm 打开项目java.io.IOEXception:couldn't create PTY
  8. 狂神。JavaWeb学习(2)
  9. 牛逼的人生都是从苦逼的岁月爬过来的
  10. word如何翻译成中文?Word翻译成中文的方法分享