‘壹’ 嵌入式系统开发为什么要采用交叉编译的方式
由于嵌入式系统资源匮乏,一般不能像PC一样安装本地编译器和调试器,不能在本地编写、编译和调试自身运行的程序,而需借助其它系统如PC来完成这些工作,这样的系统通常被称为宿主机。宿主机通常是linux系统,并安装交叉编译器、调试器等工具;宿主机也可以是Windows系统,安装嵌入式Linux集成开发环境。在宿主机上编写和编译代码,通过串口、网口或者硬件调试器将程序下载到目标系统里面运行。所谓的交叉编译,就是在宿主机平台上使用某种特定的交叉编译器,为某种与宿主机不同平台的目标系统编译程序,得到的程序在目标系统上运行而非在宿主机本地运行。这里的平台包含两层含义:一是核心处理器的架构,二是所运行的系统,这样,交叉编译有3种情形:(1)目标系统与宿主机处理器相同,运行不同的系统;(2)目标系统与宿主机处理器不同,运行相同的系统;(3)目标系统与宿主机处理器不同,运行不同的系统。实际上,在PC机上进行非Linux的嵌入式开发,哪怕使用IDE集成环境如Keil、ADS、Realview,都是交叉编译和调试的过程,只是IDE工具隐藏了细节,没有明确提出这个概念而已。
‘贰’ 如何建立Linux系统下交叉编译环境
基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成(所以称为交叉编译)。双方之间一般通过串口,并口或以太网接口建立连接关系。 但在此我建议构建如下的交叉编译环境,适合个人或研发小组使用:单独拿出一台PC机(PII以上即可,就用以前淘汰的旧机器就可以),在该PC上安装桌面的Linux操作系统(如Red Hat Linux 8.0及以上),可以采用默认的安装选项(注意要包含FTP服务),这台PC作为Linux服务器,除管理员以外,一般不直接让其他人去操作。 将该Linux服务器接入局域网,并新建一些合法用户,以便其他的PC机(在此我们将其称为工作站)的合法用户能访问到Linux服务器。而其他的PC机(工作站)仍然使用Windows操作系统,原来干啥继续干啥。 需要的软件工具包括: 1、FTP客户端程序(如Cuteftp,可到网上下载)。 2、Telnet工具(如SecureCRT,可到网上下载)。 3、移植到某一特定ARM平台的Linux操作系统内核源码(一般由销售商整理提供)。
‘叁’ 怎样编写单片机的串口通信的程序,一般的步骤是怎么样
编写串口通讯程序步骤为:
1、设置波特率
2、设置串口工作方式
3、收发数据。
比如:
main()
{
unsignedchardat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0);
RI=0;
dat=SBUF;
SBUF=~dat;
while(TI==0)
TI=0;
}
}
‘肆’ 如何构建交叉编译环境。
你说的是我下面的回答吗?下面就一些问题作一个说明,以期抛砖引玉。
基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成(所以称为交叉编译)。双方之间一般通过串口,并口或以太网接口建立连接关系。
但在此我建议构建如下的交叉编译环境,适合个人或研发小组使用:单独拿出一台PC机(PII以上即可,就用以前淘汰的旧机器就可以),在该PC上安装桌面的Linux操作系统(如Red Hat Linux 8.0及以上),可以采用默认的安装选项(注意要包含FTP服务),这台PC作为Linux服务器,除管理员以外,一般不直接让其他人去操作。
将该Linux服务器接入局域网,并新建一些合法用户,以便其他的PC机(在此我们将其称为工作站)的合法用户能访问到Linux服务器。而其他的PC机(工作站)仍然使用Windows操作系统,原来干啥继续干啥。
需要的软件工具包括:
1、FTP客户端程序(如Cuteftp,可到网上下载)。
2、Telnet工具(如SecureCRT,可到网上下载)。
3、移植到某一特定ARM平台的Linux操作系统内核源码(一般由销售商整理提供)。
4、GNU编译工具,可由相关网站下载,或由销售商整理提供。
在工作站安装:
在某工作站PC上安装FTP客户端程序和Telnet工具,安装完毕后应该可以在该工作站PC和Linux服务器之间进行文件的传输,并在工作站PC可以通过Telnet登陆到Linux服务器(可能需要将Linux服务器的防火墙服务关闭才能完成)。
在Linux服务器安装:
将工作站PC上的Linux操作系统内核源码压缩包和GNU编译工具通过FTP传送到Linux服务器的某个目录(如合法的用户目录),然后在该目录下解压,并将GNU编译工具安装到默认的工作目录即可,以上工作通过在工作站PC使用Telnet工具完成,而不需要在Linux服务器上进行。
Linux操作系统内核的编译:
Linux操作系统内核的编译一般有一个比较固定的步骤,会根据MakeFile文件的不同而略有差异,可参考相关文档,编译的工作在工作站PC使用Telnet工具完成。
‘伍’ c语言怎么实现串口通信
编程原理
程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS
INT
14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存
‘陆’ vmware虚拟机如何使用串口
如何开启VMware串口
先前在玩GEC2410时,有个想法,就是在linux下进行调试,由于目标板上电或复位时会发送信息给PC机的串口,这已在windows下实现过,于是想在linux下看看效果,可是当时我在linux下设好串口后,发现一点反应都没有,当时以为是自己没有安装交叉编译环境,于是昨天晚上把嵌入式 linux下的交叉编译环境装好后,心想这下应该可以拉,没想到我上电目标板,linux下的串口一直没有反应,郁闷,怎么这样呢,既然不适交叉编译环境的原因,总得有个原因吧,于是我上网搜,先前我也够笨的,怎么就不知道上网查呢,呵呵,原来是我没有把VMware的串口打开,呵呵,马上关机[关虚拟机下的系统],在VM->Setting......->点击ADD,把串口加进来,呵呵设置时尽量不要用自动检测,要选中串口,反正即使你的虚拟系统启动后可以随便改的,同时要把串口设为启动时就连接拉,这样,linux下的串口在目标板上电或复位后收到和windows下一样的数据,哈哈,爽!
环境:
宿主机:Windows7 VMware7.1
虚拟机:Fedora12
VMware的串口:
一个虚拟机最多可以添加四个虚拟串口,有如下几个方法配置虚拟串口:
连接一个虚拟串口到宿主机的物理串口。
连接一个虚拟串口到宿主机上的一个文件。
在两个虚拟机之间建立一个直接的连接,或者将虚拟机的串口与宿主机的应用程序连接。
为虚拟机添加串口
首先要保证虚拟机处于关机(power off)状态,选择菜单中的VM -> Settings... ,在Hardware标签页中点击Add按钮,在Add Hardware Wizard对话框中选择Serial Port,点击next,如图:
然后要选择Serial port type,共有三种类型:
1.如果你要使用宿主机的物理串口设备,选择Use physical serial port on the host,然后点击next,选择你要使用的物理串口即可。
2.如果想要将串口数据输出到一个文件,选择 Output to file,然后next,选择输出文件,该文件是一个txt文本文件。启动虚拟机后做个测试,在命令行中执行:
echo "asdf" >> /dev/ttyS0,
然后打开输出文件,即可看到串口输出的字符串asdf。
3.使用named pipe可以实现两个虚拟机或虚拟机与宿主机的应用程序通过串口连接。选择Output to named pipe,点击next,进入如下界面:
输入管道名,对于windows宿主机,管道名格式为 //./pipe/ ,必须以 //./pipe/开头。
输出调试信息到宿主机上的应用程序:
第一个下拉菜单选择This end is the server或This end isthe client,在第二个下拉菜单选择The other end is an application。
输出调试信息到另一个虚拟机:
第一个下拉菜单选择This end is the server,第二个下拉菜单选择The other end is an application。
将两个虚拟机用串口连接:
在虚拟机上安装Fedora12和ubuntu10.04,为两个虚拟机添加串口,
Fedora12的串口设置为:
Ubuntu10.04的串口设置为:
这样设置后Fedora的串口为serial port 1,设备名为ttyS0,ubuntu的串口为serial port 2,设备名为ttyS1。
测试:
在Fedora下执行:
cat < /dev/ttyS0
在ubuntu下执行:
echo hello > /dev/ttyS1
在Fedora里可以看到收到的字符串hello,说明ubuntu发送和Fedora接收正常,可以互换后做同样的测试。
语 法
statserial[必要参数][设备]
功 能
statserial 命令:显示各个接脚的状态,常用来判断串口是否正常,Ctrl+C退出
类似命令: stat
相似命令: linux命令
执行权限: 超级用户 普通用户
命令属性: 网络通讯
参数
必要参数
-n 不循环显示
-d 十进制显示
-x 十六进制显示
选择参数
无
范例
范例1:显示串口状态
[root@linux ~]# statserial /dev/tty1
范例2:只显示一次串口状态
[root@linux ~]# statserial -n /dev/tty1
‘柒’ 求怎么实现在Linux操作系统下的Qt界面程序通过串口与STM32通信
1、可以
2、qt Creator只是一个集成开发工具,这个版本随意,网上下就可以,qte不是用最新,而是最好用跟你在Linux开台开发一样的。首先要在Linux下交叉编译qte的库,然后再将Lib这些文件移植在板子上,最后通过交叉编译好的库去编译你在pc上编写的程序,放到板子上运行!关于交叉编译qt的文章,网上可以搜到很多。
3、WIN7平台的交叉编译工具安装比较麻烦,不推荐使用,直接在Linux去下一个别人交叉工具包,直接解压就好。。去友善的官网,或其他网站下这类的工具
‘捌’ 如何交叉编译应用程序,技巧,注意事项
如果你程序中需要读取某个文件夹下的文件则须注意:
假如你的所有文件都放在一个名为test的文件夹下,当然也包括main.cpp,同时程序需要读取test/input文件夹下的文件,比如说图片,这时在程序中路径你就需按如下写:input/(请注意这个斜线的方向)
不知道为什么OpenCV程序中如果有imwirte、waitKey函数(不知道是哪个的原因还是都有),虽然交叉编译会通过,但当你把编译好的二进制可执行程序拷贝到ARM平台下执行,会出现错误。(可能是当初OpenCV库交叉编译时没编译完全,当然这主要是交叉编译平台缺少某些软件;也可能是ARM平台系统中缺少某些软件造成的)