我的环境:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
host:Windows XP SP2
guest:VMWARE 6.0 Fedora10
gcc 4.3.2
linux的安装和配置
Fedora10的安装还算是顺利,记得安装的时候一定要把开发工具包选上,不然的话以后编译会出现很多问题,再去从网上下就太麻烦了。虚拟机中linux和主机windows之间共享文件的方法有很多重,我采用通过ssh服务的方式,在windows下安装ssh服务客户端:SSHSecureShellClient,这是一个开源软件,可以免费下载,不仅可以在客户机和服务器间互传文件,而且还可以以telnet方式登录服务器。
要使用ssh方式共享文件,就必须打开linux下的sshd服务:#./etc/init.d/sshd start,最好是关闭防火墙:#iptables -F或者chkconfig iptables off,如果安装了gnome或kde桌面的话就可以直接在图形界面下的系统-服务里面开启sshd【sshd的配置文件是:/etc/ssh/ssh_config】。【linux的服务都是以脚本方式运行的,这些服务脚本都放在/etc/rc.d/init.d下面。在linux下面/etc/xinetd.d目录:inetd是一个终极服务程式,大部分的网络服务都由他启动。对服务的配置可以通过chkconfig工具来实现:# chkconfig --list smb(查看smb服务运行情况),# chkconfig --level 35 smb on(打开3、5级别下的smb服务)】然后执行:ps -A | grep sshd看看有没有sshd的进程,如果起来了就可以进行连接了。
安装交叉编译工具链
1、什么是交叉编译:
什么是交叉编译?在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。
有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:
· 1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
· 2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
· 3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。 【http://www.farsight.com.cn/FarsightBBS/dispbbs.asp?boardID=14&ID=1850&page=1】
我选择ELDK交叉开发环境,ELDK是UBOOT的作者开发的交叉编译环境,最开始是针对PowerPC的,现在已支持很多平台。首先从DENX的网站www.denx.de下载最新的uboot版本和ELDK交叉编译工具。目前uboot最新版本是u-boot-2009.01,eldk最新版本是4.2,eldk有针对不同体系结构的版本,我这里下载了arm-2008-11-24.iso。
2、安装交叉编译环境:
a、将arm-2008-11-24.iso放在/root/download【我自己建的目录】下面,
b、然后挂载此映像文件:#mount -o -loop arm-2008-11-24.iso /mnt/cdrom,
c、进入光盘:#cd /mnt/cdrom/,
d、运行安装:#./install -d /opt/eldk arm【我安在目录/opt/eldk下,如果不能运行的话就要先更改cdrom目录为可执行权限#chmod a+x /mnt/cdrom】
e、添加环境变量(永久性):#vim /root/.bashrc,即编辑root目录下的.bashrc文件加入以下部分:
PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
CROSS_COMPILE=arm-linux-
export PATH CROSS_COMPILE
d、执行arm-linux-gcc -v查看安装情况,如果一切正常的话应该会出现版本信息。到此交叉编译环境已经安装完毕。
【skyeye仿真环境的搭建】
之所以还搭建一个仿真环境是怕有的同学可能没有开发板,这样的话如果有一个仿真环境的话就可以在脱离开发板的环境下学习Linux和bootloader了。
【1、skyeye是一个可以在通用的Linux和Windows平台上仿真多种主流嵌入式开发板和外设,并且可以在其上运行和调试多种嵌入式操作系统的仿真开发环境,起源于μCLinux组织的armulator模拟器软件,armulator可以模拟Ateml AT91开发板并在其上运行μCLinux系统。
SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。
SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处是SkyEye的执行效率更高。
通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段。
如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等),采用SkyEye可以有效地提高工作效率,因为你可以直接在μCOS-II和μCLinux for SkyEye上进行开发和调试,而与具体硬件打交道的各种driver已经存在,且有源码级调试环境,只需关心高层的逻辑设计和实现就可以了。
SkyEye本身作为一个开放式的项目体系,可以划分为多个独立的子项目系统。通过参与SkyEye的各个子项目,与大家共同交流、协作,可以进一步学习、分析、精通Linux内核,掌握ARM嵌入式CPU编程。
SkyEye并不能取代开发板等硬件的功能,但通过它可以比较容易进入到嵌入式软件的广阔天地中。由于SkyEye建立在GDB基础之上,使用者可以方便地使用GDB提供的各种调试手段对SkyEye仿真系统上的软件进行源码级的调试,还可以进行各种分析,如执行热点分析、程序执行覆盖度分析等。由于SkyEye提供了源代码和相关文档,有经验的用户完全可以修改和扩充SkyEye来满足自己的需求。目前SkyEye模拟了大量的硬件,包括CPU内核、存储器、存储器管理单元、缓存单元、串口、网络芯片、时钟等。本文节自《源码开放的嵌入式系统软件分析与实践——基于SkyEye和ARM开发平台》
2、安装skyeye:安装skyeye时一定要注意版本问题,最开始我下载的是skyeye1.2.7RC1,但是安装好了以后仿真UBOOT启动时要是提示有一段内存找不到,后来换了skyeye1.2.6RC1才好了的。
a、将下载包解压:#tar -jxvf skyeye1.2.6RC1.tar.bz2,
b、安装:#./configure&&make&&make install,然后执行skyeye -h就可以看到版本和帮助信息了,如果没有出现那就要换个版本重新安装了。
3、skyeye的使用:
skyeye首先需要一个skyeye.conf文件,它包含了cpu结构,板结构,以及内存块。我根据UBOOT的smdk2410开发板写出skyeye.conf文件文件如下:
#cpu体系
cpu: arm920t
#开发板
mach: s3c2410x
#内存块
mem_bank: map="M", type="R", addr="0x00000000", size="0x00008000", file=./u-boot.bin,boot=yes
mem_bank: map="M", type="RW", addr="0x30000000", size="0x00400000"
mem_bank: map="I", type="RW", addr="0x48000000", size="0x20000000"
mem_bank: map="I", type="RW", addr="0x19000300", size="0x00000020"
其中map说明这是内存(M)还是IO(I),type指示是RAM(RW),还是ROM(R),addr是起始地址,size是内存块的大小,boot指出skyeye从这里启动,我上面的配置相当于把uboot放在NOR Flash里面启动。
将skyeye.conf和u-boot.bin、u-boot放在同一个文件夹里面,然后执行#./skyeye就可以看到uboot起来了。】
文章评论(0条评论)
登录后参与讨论