社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
B703实验室是一个综合的硬件开发实验室,基于本门课程主要用到的配置环境如下:
1.软件环境: win7操作系统,VMware workstation,ubuntu12 [配置交叉编译环境]。
2.硬件环境: PC主机与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界面的菜单,行前加#则只显示学校图标。
在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工具的版本的组合可能太多,交叉编译平台的搭建是相当繁琐和耗时的,因此下述的过程仅作为参考,不建议轻易尝试。
打开虚拟机进入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命令添加执行属性。
将下面的程序在虚拟机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 failedn");
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键盘组合。
程序运行效果如图,从中可看到图版是倒过来的,因为位图像素的坐标与屏幕的坐标不一致。
在机器间传输文件的方法有:SD卡,U盘,通过串口线结合rz命令从pc传到开发板,这几个方法都无需网络支持,还有ftp命令,nfs协议,samba协议,在使用这些方法前必须配置好机器的IP地址,然后通过网络传输。
Win7与虚拟机ubuntu传输文件最简易的方法是进行文件拖放,但要求虚拟机正确安装vmware tools,如果无法拖放则需要重新安装vmware tools。
rz是一个开源程序,可从网络下载源码,经过交叉编译在开发板上运行。
samba是linux与常用的文件共享方式。
根据报告内容对指定程序进行调试,请首先排查程序出错的原因,最后得到正确的运行结果,并记录程序出错的代码及修正的内容,开发板的程序运行须拍照后放入实验报告中。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!