嵌入式开发环境的建立- 建立宿主主机开发环境

原地址:http://blog.csdn.net/duwchy/article/details/1612878

在进行嵌入式3D等开发,必须有一台x86的PC机作为宿主机,  绝大多数的 Linux 软件开发都是以 native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即开发板上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台 PC 机)上,对应的开发板叫做目标板。  
开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。 然后把可执  )行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相同,宿主机为 Intel 或 AMD 处理器, 而目标板如HHPXA270 为 PXA270,GNU 编译器提供这样的功能,在编译编译器时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿主开发机,由于我选择移植的嵌入式操作系统是linux,所以宿主机上的操作系统也跟这个保持一致,也是Linux,只不过它们所对应的计算机体系结构是不同的而已,一个是PXA270基于ARM的,一个是基于x86的。但 Linux 有多个发行版本, 而我选择的是国人自己开发的MagicLinux,是开源操作系统,对中文支持很好,系统小巧稳定,功能齐全,支持了一下我国的开源事业。然后在宿主机上要建立交叉编译调
试的开发环境。环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作。
宿主机操作系统选择安装好之后,我们需要做的是交叉编译工具链的安装,由于我们PC机上的CPU体系结构和开发板上的是完全不同的,一个是x86,一个是ARM,而开发板上又不可以对我们开发的程序进行编译链接,所以我们需要一种特殊的编译工具进行在PC机上进行编译,然后编译的程序可以拿到开发板上运行的,arm linux 交叉编译工具链可以帮我们这个忙,下面将介绍交叉编译工具的安装。另外嵌入式开发通常要求宿主机配置有网络,支持 NFS(为交叉开发调试程序时 mount 所
用),还要支持 TFTP 服务器(为下载烧写调试内核所用)等等,这个将在后面介绍。
1. ARM Linux交叉编译工具的安装。
ARM Linux 在网络上有许多开源的代码,也有为x86平台编译好的可执行文件,我下载的是 arm-unknown-linux 工具,GCC内部版本为2.95.2,下载工具包
armv4l-unknown-linux-gcc-2.95.2.tar.gz
直接解压安装到 /opt/host 目录就可以了
tar xzvf armv4l-unknown-linux-gcc-2.95.2.tar.gz -C /opt/host
在 /opt/host 就会有一个名为 armv4l 的目录,里面就有我们需要用到的交叉编译GCC工具,以后交叉编译工作都需要用到它。

2. 配置PC机的IP地址
由于板子u-boot(嵌入式的装载程序,后面将介绍)的tftp有默认的服务器IP地址,而我需要从PC机tftp服务器上下载烧写或者调试内核,所以我需要设置PC机的IP,执行下面命令:
ifconfig eth0 192.168.2.111
ifconfig eth0 broadcast 192.168.2.255
ifconfig eth0 netmask 255.255.255.0

3. 在PC机上配置NFS服务器
由于开发板上的flash空间有限,并且flash不可以频繁的刷新,而且开发板上ramdisk文件系统空间的限制得比较少,再有提供给3D开发的链接库比较大,而3D程序开发过程中测试调试次数和频繁,所以不可能每次都把程序烧到文件系统上进行调试,所以我们可以使用一种网络文件共享协议NFS(Network File System) ,把PC上的文件系统共享到开发板上的文件系统,开发板就可以把这个共享文件系统里的文件看成自己的文件。所以调试起来就很方便了。只有到了程序最终发布,才把程序烧写到开发板的flash上。下面是NFS服务器的配置过程。
3.1 以root的身份在控制台输入setup,在系统服务选项中选中[*]nfs  [*]portmap  服务选项
 portmap服务对NFS 是必须的,因为它是NFS 的动态端口分配守护进程,如果portmap不启动,NFS就启动不了的。如果Linux上系统服务上没有这个配置选项,可以到网上搜索一些相关的软件包。

3.2 编辑 /etc/exports 文件
exports文件是NFS的共享目录配置文件,主要是指定共享目录和共享策略。使用vi命令编辑,在文件中加入类似下面的内容:
/ *(rw,sync)
/root/share *(rw,sync)
第一条规则 / 表示整个根目录进行共享,* 表示对于所有用户共享,rw 可读写,sync 文件同步
第一条规则 /root/share 表示共享目录,当然你还可以类似的添加其他目录进行共享。后面的内容表示对ip为10.13.9.19的主机赋予读写权限,其他机器 * 仅有读写权限。

3.3 然后在控制台分别执行以下两条命令
[root]# service portmap restart
[root]# service nfs restart   或者   /etc/rc.d/init.d/nfs restart
如果看到一连串的[ok]时,表示已经启动成功了。如果第一次启动,nfs ,又使用restart命令,可能开始会出现一些[FAILED],那是在停止nfs服务,而nfs服务还没有启动所以会FAILED。

3.4 测试NFS服务
要测试NFS是否真正配置的成功,只要进行以下测试:
[root]# mout -t nfs  10.13.9.19:/root/share /mnt  #/mnt 是挂载到本地的服务
如果你在/mnt 下可以看到NFS共享目录的内容,表示你NFS设置成功了。
使用#umount  /mnt 取消挂载。
使用minicom(后面将介绍)超级终端通过串口控制嵌入式Linux系统,然后执行mount操作就可以挂载共享文件系统了,不过这里的mount操作跟PC机子上的mount有点不一样,在我使用的开发板上需要像下面这样:
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024  192.168.2.111:/root/share /mnt
192.168.2.111是pc机子的ip,/mnt这个目录是我板上一个目录,“rsize=1024,wsize=1024 ”设置很重要,没设置对的时候,一运行Qt-embedded(嵌入式GUI系统,后面将介绍)程序就出现:
nfs: server ********* not responding, still trying.
的错误。只能用1024,其他都不行,应该是与网络系统的MTU有关。

4. 在PC机上配置TFTP服务器
TFTP是在烧写和调试嵌入式Linux内核时使用的,下面是配置过程
4.1 下载软件包
下载 tftp-server-0.43-1.i386.rpm和tftp-hpa-0.48.tar.gz(可能有更新版本的)两个包,一个是服务器,一个包含客户端。
4.2 安装tftp-server-0.43-1.i386.rpm 服务器
[root]# rpm -ivh --nodeps tftp-server-0.43-1.i386.rpm,此时根目录下会多一个tftpboot的目录,是tftp的共享目录
4.3 编译安装tftp-hpa-0.48.tar.gz
[root]# tar vxfz  tftp-hpa-0.48.tar.gz
[root]# cd tftp-hpa-0.48
[root]# make
[root]# make install
4.4 使用超级用户身份运行setup命令,在系统服务理选上tftp服务 [*]tftp
4.5 启动tftp服务器
[root]# service xinetd restart
看到启动[OK]就可以了
4.6 测试tftp
1).在终端输入命令
[root]# netstat -a | grep tftp
如果有相关的输出,就表明tftp配置成功了。
2).可以在tftpboot中放一些文件,然后使用tftp客户端命令连接服务器,然后用GET命令下载文件,如果下载成功,那么配置成功了。

Copyright (C) duwchy, Please give source when reprint.

时间: 2024-10-08 20:50:30

嵌入式开发环境的建立- 建立宿主主机开发环境的相关文章

LFS(2)建立新用户和新环境

本来想使用我的日常工作用户mirage,但是看到LFS-Book里建立了新账户还进行了各种设置,我也就建立了新账户,防止不小心搞破坏. 建立新的group名为lfs,建立新用户lfs, groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs -s 是指定默认的shell,不指定也行,反正默认都是bash -g 是指定新用户将加入lfs组 -m 这个选项指明为新用户建立家目录,(这个选项不可省略,会报错) -k 这个选项是指定从/d

asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里讲的主要是通过Codefirst方式实现的. 一.M层简单介绍 1.M层很形象的将数据库里面的各个表格映射成了C#当中的类,比如上篇文章创建的用户表: ? 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE [dbo].[SYS_USER](          [ID]

WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解

上一节<WCF分布式框架基础概念>我们介绍了WCF服务的概念和通信框架模型,并给出了基于自定义托管服务的WCF程序的实现代码.考虑到WCF分布式开发项目中关于托管宿主服务配置和客户端添加引用.两个环节最容易出错.对于大部分想学习WCF分布式开发的人来说,成功开发.配置.部署第一个自己的WCF服务困难重重.很多资料都介绍了WCF的基本概念.但是对于实际的项目开发过程介绍粗略,给入门者带来诸多不便.今天我们就来补充一节WCF分布式开发一个完整解决方案的开发和配置过程.本节基本结构是:首先介绍[1]

[Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置

前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环境之前,首先要解释一下Scientific Linux 6.x,该Linux发行版与CentOS.Red Hat Linux的管理机制比较类似.如果你的Linux采用的是上述系统,基本上配置过程完全一致:如果你采用的是Ubuntu系统,配置过程可能会稍有不同. 那么,Start![请以管理员账号登陆

JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误

问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabin&version=1 解决方法: 出现以上错误的原因是,solr服务器上配置的Field和javabean提交的Field不能对应, 导致solr服务器找不到域,拒绝访问. 打开SOLR_HOME下的conf文件夹找到schema.xml文件,在其中添加对应的域. 例如以下代码添加了:title,

HTML5移动开发之路(25)—— AppCan开发环境

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(25)-- AppCan开发环境 一.工具下载: 官方下载地址:http://www.appcan.cn/experience.html 按照安装指导默认安装即可 二.建立项目 启动AppCan SDK 建立项目 填入在appcan官网上注册的账号和密码,方便后面对应用的管理. 建立好的项目如下: 三.使用模拟器调试 右击index.html,选择预览 四.使用真机调试 1.下载真机调试工具:http://

eclipse开发cocos2dx 3.2环境搭建之一: Android C\C++环境搭建(ndk r9d)

这几天有时间,琢磨一下cocos2dx.cocos2d家族其实挺庞大的,也有cocos2d-android这种可以直接用Java语言来开发的,但是cocos2d-android资料相对少一些,而且貌似都是几年前的.对比一下还是cocos2dx比较流行,有可以跨平台,而且既然要学就一起把c++学了. 这段时间已经用惯了idea,不太想换回去,但是查了查发现idea还不能做c++开发.国内倒是有家公司开发了一款idea的cocos插件,不过其实是cocos2dx-js,好像最新版的又加入了cocos

[环境]搭建Node+NPM+Grunt+Ruby开发环境

序 最近尝试了一下CoffeeScript,和Sass,不得不说这两个搭配起来的确是不错的选择,熟悉以后基本上开发就比较快速了. 当然要开发这个首先需要搭建环境,这里就需要有Node.NPM.Grunt.Ruby. Node与NPM基本上是一套安装,有了Node环境后才能搭建后面的CoffeeScript环境:而Ruby是为了执行Sass编译命令所需要的环境,当然最后还有一个Grunt,这个是为了项目构建的方便,一体化构建,不用自己重复执行编译命令. Ruby Ruby,一种为简单快捷的面向对象

Centos7下,简单DOCKER 使用.映射SSH端口到宿主主机.

参考这哥们的文章:http://www.jianshu.com/p/d2dd936863ec 获取镜像 docker pull centos:7.2.1511 //也可以不指定版本,默认最新latest docker run -t -i centos:7.2.1511 /bin/bash //启动并进入docker 容器 yum install wget wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/rep