嵌入式开发环境的搭建_第1页
嵌入式开发环境的搭建_第2页
嵌入式开发环境的搭建_第3页
嵌入式开发环境的搭建_第4页
嵌入式开发环境的搭建_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于ubuntu的嵌入式开发环境的搭建一,安装ubuntu 安装的方式主要有三种:虚拟机安装,wubi安装,实际安装(光盘安装和硬盘安装)。不管你有没有ubuntu的安装光盘,都可以进行上述的三种安装方式。如果对linux还没有什么信心或者是觉得自己水平还不是太高,可以试试前两种安装方式,如果你的硬盘空间足够大,可以使用实际安装(wubi安装后系统有时会出现莫名其妙的问题,比如更新后无法启动),虚拟机安装是最简单的,配置的时候把光盘改成物理光盘或者你下载的iso文件,然后启动即可进入安装画面。 wubi安装的话,需要这样操作,如果有光盘,打开光驱,双击wubi.exe文件,进行一些简单的配置

2、,重启之后也可以进入安装画面。如果是iso镜像,则用虚拟光驱打开iso文件,然后双击wubi.exe即可。 实际安装则分为光盘安装和硬盘安装(iso文件安装),光盘安装只需要在bios里面设置为光盘启动,把光盘放入光驱重启即可。 无论是哪种安装方式,都要有3g以上的磁盘空间(建议值是10g以上)。虚拟机安装和wubi安装都在安装之前设置好了磁盘的大小。光盘安装则需要用分区魔术师等分区软件预先划出一块磁盘分区用于安装ubuntu,或者是直接把某分区删除。以下为实际安装过程:重新启动后,进入了ubuntu的安装界面,如下所示选择适当的语言可以看到安装的选项,desktop版的ubuntu也是liv

3、ecd,它可以在内存中启动,让用户试用linux。为了方便,这里我们选择“安装ubuntu“。当然你也可以试用ubuntu时双击桌面上的安装图标进行安装。选定后回车,就将进入ubuntu启动的画面启动完成后进行正式安装的设置,首先是再一次询问你的语言,如果刚才是用中文安装的,现在默认的也是中文的了,直接点“前进”一路向前,接着就进入了最关键的一步,对硬盘分区的操作,虚拟机安装和wubi安装的操作比较简单,点“向导使用整个硬盘”,确定即可。如果是实际安装,而且硬盘上又存在其它的操作系统,这一步就一定要小心操作了。一般都是选“手动”,然后对硬盘分区进行操作安装linux至少需要一个分区,挂载点是根

4、目录,即“ /,强烈建议再划分一个swap分区,作为虚拟内存,swap分区在256m以上,1g以下,这是一张创建ext3分区的截图,记得要选择挂载点,其中根目录是一定要挂载的,swap分区在“用于”的下拉框里选择。如果硬盘空间足够大,建议给/home也创建一个分区,wubi安装和虚拟机安装可不考虑跳过这段然后就是关于用户的账号信息设定,这步比较简单,只要记住自己的用户名和密码就可以了然后就会是漫长的安装过程了,不过比起windows,ubuntu的安装要快得多,差不多二十分钟就行了,安装的时候把网线拔了,如果是虚拟机安装,就把网络暂时禁用掉。ubuntu的安装过程中会自动在网络上寻找更新,这将

5、花费大量的时间。等把系统安装完成后,再更新是个更好的解决方案安装完成,重启系统后,进入ubuntu的启动画面,启动后进入登录窗口ubuntu的软件包管理系统是很优秀的,ubuntu可以在“源”中自动更新,可以在“源”中下载并安装软件。托前辈们的福,内网有一个ubuntu的软件源。还记得 吗,这就是ubuntu的源。利用内网的源,需要把源的配置文件改一下在终端中输入以下命令,打开源配置文件sudo gedit /etc/apt/sources.list替换为以下内容(基于9.04的)deb /ub

6、untu/ jaunty main restricted universe multiversedeb /ubuntu/ jaunty-backports main restricted universe multiversedeb /ubuntu/ jaunty-proposed main restricted universe multiversedeb /ubuntu/ jaunty-security main restricted uni

7、verse multiversedeb /ubuntu/ jaunty-updates main restricted universe multiversedeb-src /ubuntu/jaunty main restricted universe multiversedeb-src /ubuntu/jaunty-backports main restricted universe multiversedeb-src http:/ubuntu

8、./ubuntu/jaunty-proposed main restricted universe multiversedeb-src /ubuntu/jaunty-security main restricted universe multiversedeb-src /ubuntu/jaunty-updates main restricted universe multiverse软件源的第一个用途就是更新系统,依次输入下面两行命令,第一次更新系统可能需要花费略长的时间

9、sudo apt-get updatesudo apt-get dist-upgrade然后就可以安装各种软件二,安装交叉编译工具链1,使用制作好的工具链刚开始学习时,建议使用已经制作好的工具链,可以从网上下载制作好的工具链,比如arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2,使用以下命令解压得到gcc-3.4.5-glibc-2.3.6目录cd /opt/sudo tar xjf $你的目录/ arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2执行上述操作后,在/opt/下得到gcc-3.4.5-glibc-2.3.6目录然后设置环

10、境变量path,可以使用命令,如下: $export path=$path:/opt/ gcc-3.4.5-glibc-2.3.6/bin或者在/etc/environment文件修改path的值:sudo gedit /etc/environment在文件中修改后的内容如下:path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/opt/ gcc-3.4.5-glibc-2.3.6/bin”安装ncurses,ncurses是一个能提供功能键定义,屏幕绘制,以及基于文本终端的图形互动

11、功能的动态库,如果没有它,执行make menuconfig会出错,ubuntu下安装比较简单:sudo apt-get install ncurses2,自己制作工具链用户可以自己制作工具链,如果要基于gcc和glibc来制作工具链,可以使用crosstool来进行编译从网上下载crosstool-0.43.tar.gz工具来编译工具链,它运行时,会自动从网上下载源码,然后编译,也可以先自己下载源码,再运行crosstool,这些源码包括:binutils-2.15.tar.bz2 gcc-3.4.5.tar.bz2glibc-2.3.6.tar.bz2glibc-linuxthreads-

12、2.3.6.tar.bz2, linux-2.6.8.tar.bz2linux-libc-headers-.tar.bz2假设将这些源码放到目录/opt/src_gcc_glibc/下 下面分步讲解:(1)修改crosstool脚本执行以下解压命令: sudo tar xzf crosstool-0.43.tar.gzglibc-2.3.6-version-info.h_err.patch是一个补丁文件,它修改glibc-2.3.6/csu/makefile,里面有一个小错误将它复制到crosstool的补丁目录下: sudo cp glibc-2.3.6-version-in

13、fo.h_err.patchcrosstool-0.43/patchs/glibc-2.3.6/需要修改demo-arm-softfloat.sh ,arm-softfloat.dat,all.sh1修改demo-arm-softfloat.sh,修改内容如下:7 tarballs_dir=/opt/src_gcc_glibc /源码存放的目录8 result_top=/opt/gcc-glibc /编译结果存放的目录2修改arm-softfloat.dat修改如下:2 target=arm-softfloat-linux-gcc改为2 target=arm-linux3修改all.sh,修改

14、内容如下:70 prefix=$prefix-result_top/$toolcombo/$target 改为70 prefix=$prefix-result_top/$toolcombo存放的结果目录将由/opt/gcc-glibc/arm-linux/变为/opt/gcc-glibc/(2)编译、安装工具链 执行以下命令: cd crosstool-0.43/ sudo ./ demo-arm-softfloat.sh编译两三个小时后将在、/opt/gcc-glibc/目录下生成gcc-3.4.5-glibc-2.3.6子目录,然后设置环境变量path即可,可以使用命令 arm-linux

15、-gcc v 测试是否安装正确三,安装烧写工具,文件传输工具1,安装与配置minicom串口工具 安装minicom sudo apt-get install minicom sudo apt-get install lrzsz 安装后可以使用zmodem传输协议传输文件 配置minicom 终端下输入命令minicom -s 得到下图:首先选择文件名与路径,得到下图: 上传目录是指pc机向开发板传输文件的默认目录,可以将要传输的文件放到此目录中 下载目录是指开发板向pc机传输文件的存放目录 然后选择文件传输协议,这里使用zmodem协议: 然后选择串口设置,得到下图,可按下图配置: 如果你使

16、用usb转串口,则串口设备为/dev/ttyusb0 然后选择设置保存为dfl,保存刚才的设置 运行实例: 启动minicom #minicom 然后打开开发板,从norflash启动 得到下图: minicom常用命令可以输入ctrl+a-z得到 ctrl+a-s 发送文件 ctrl+a-r 接收文件 ctrl+a-x 退出minicom ctrl+a-w 开启/关闭自动换行2,安装与配置c-kermit串口工具 安装c-kermit sudo apt-get install ckermit 运行kermit之前,在主目录下建立配置文件.kermrc,内容如下: set line /dev/

17、ttys0 /如果为usb转串口,为/dev/ttyusb0 set speed 115200 /设置波特率 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5运行kermit sudo kermit -c 或者 sudo kermit 然后输入c 退出串口,先同时按下”ctrl”和”,再按c键,然后输入 exit 运行实例: sudo

18、kermit -c 打开开发板,从norflash启动,如下图: 3,安装与配置cutecom串口工具 安装cutecom sudo apt-get install cutecom 运行cutecom sudo cutecom 这个和xp下的超级终端一样,是个图形界面,可按下图配置cutecom: 如果直接使用串口,使用/dev/ttys0,如果是usb转串口,则为/dev/ttyusb0使用实例: 首先在终端下运行cutecom sudo cutecom 配置好后,点击open device 然后打开mini2440开发板,比如从norflash启动,如下图 上述三个串口工具可任选一种使用,

19、推荐minicom(个人习惯)4,编译安装linux下的烧写工具dnw 安装libusb-dev sudo apt-get install libusb-dev 然后下载源码dnw_linux.tar.bz2,解压后得到目录dnw_linux 进入目录,找到dnw.c,修改60行的一句话 *(unsigned long*)file_buffer) = 0x30000000; 根据自己开发板的情况,改为合适的值,这里为0x30000000,意为 下载运行的地址 编译dnw.c gcc dnw.c -o dnw -lusb 将编译得到的dnw拷贝到/usr/sbin 然后进入secbulk目录 编

20、译并加载secbulk.c内核模块 cd secbulk make -c /lib/modules/uname -r/build m=pwd modules 编译成功后在当前目录下可以看到secbulk.ko 用insmod命令加载模块,这需要root权限 $sudo insmod ./secbulk.ko 加载后用dmesg命令可以看到模块已经成功加载238.007970secbulk:secbulk loaded238.009101usbcore:registered new interface driver secbulk运行实例: 首先将开发板和主机接上串口线,usb烧写线 加载sec

21、bulk模块 $sudo insmod ./secbulk.ko 启动minicom,并使开发板从norflash启动 输入d,运行download and run命令 在要烧写的文件目录下,运行命令 sudo dnw $你的文件即可完成烧写dnw 烧写程序可配合以上三个串口工具的任何一个完成烧写5,搭建nfs网络传输环境 网络文件系统(nfs)一、nfs简介1,nfs就是network filesystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share files)可以通过nfs挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它

22、看作一个文件服务器(file server)。2,nfs是通过网络进行数据传输,那么nfs使用哪些端口呢,答案是不知道,因为nfs传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用rpc。其实,nfs运行在sun的rpc(remote procedure call,远程过程调用)基础上,rpc定义了一种与系统无关的方法来实现进程间通信,由此,nfs server也可以看作是rpc server。正 因为nfs是一个rpc服务程序,所以在使用它之前,先要映射好端口通过portmap设定。比如:某个nfs client发起nfs

23、服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到portnumber注意:在启动rpc服务(比如nfs)之前,需要先启动portmap服务。3,nfs允许系统将其目录和文件共享给网络上的其他系统。通过nfs,用户和应用程序可以访问远程系统上的文件,就像它们是本地文件一样。那么nfs最值得注意的优点有:(1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。(2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在nfs服务器上设置并使其在整个网络上可用。(3)存储设备如软盘、光驱及usb设备可以被网络上其

24、它机器使用,这可能可以减少网络上移动设备的数量。二、与nfs相关的几个文件和命令1,/etc/exports对nfs服务的访问是由exports来批准,它枚举了若干有权访问nfs服务器上文件系统的主机名。2,/etc/default/portmap实际上,portmap负责映射所有的rpc服务端口,它的内容非常非常之简单。3,/etc/hosts.deny设定拒绝portmap服务的主机,即禁止访问的客户端ip列表。4,/etc/hosts.allow设定允许portmap服务的主机,即允许访问的客户端ip列表。三、nfs安装在主机上安装nfs服务软件,因为debian/ubuntu上默认是没

25、有安装的。1,安装端口映射器portmap(可选)$sudo apt-get install portmap2,在终端提示符后键入以下命令安装nfs服务器$ sudo apt-get install nfs-kernel-server3,安装nfs客户端(可选)$ sudo apt-get install nfs-common注意:nfs-kernel-server和nfs-common都依赖于portmap。另外,在一些文档中提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-serve

26、r时,apt会自动把它们安装好。这样,宿主机就相当于nfs server。同样地,目标系统作为nfs的客户端,需要安装nfs客户端程序。如果是debian/ubuntu系统,则需要安装nfs-common(第3步)。四、nfs配置1,配置portmap方法1:编辑/etc/default/portmap,将-i 去掉;方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对shouldportmap be bound to the loopback address?选择“否(no)”。2,配置sudo gedit

27、 /etc/hosts.deny禁止任何host(主机)能和你的nfs服务器进行nfs连接。在该文件中加入:# nfs daemonsportmap:alllockd:allmountd:allrquotad:allstatd:all3,配置sudo gedit /etc/hosts.allow允许那些你想要的主机和你的nfs服务器建立连接。下列步骤将允许任何ip地址以192.168.1开头的主机连接到nfs服务器上,具体要看你目标板的端口地址,也可以指定特定的ip地址。在该文件中加入:# nfs daemonsportmap: 192.168.1.lockd:192.168.1.rquota

28、d:192.168.1.mountd:192.168.1.statd: 192.168.1.通过/etc/hosts.deny和/etc/hosts.allow设置对portmap的访问,采用这两个配置文件有点类似mask的意思。先在/etc/hosts.deny中禁止所有用户对portmap的访问,再在/etc/hosts.allow中允许某些用户对portmap的访问。然后重启portmap daemon:$sudo /etc/init.d/portmap restart4,配置sudo gedit /etc/exports例如我要将/opt/friendlyarm/mini2440/ro

29、ot_nfs目录让用户的ip共享,则在该文件末尾添加下列语句:/opt/friendlyarm/mini2440/root_nfs *(rw,sync,no_root_squash)其中:/opt/friendlyarm/mini2440/root_nfs表示nfs共享目录,它可以作为开发板的根文件系统通过nfs挂接;* 表示所有的客户机都可以挂接此目录;rw 表示挂接此目录的客户机对该目录有读写的权力;sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份。注意:可以用主机名来代替*,尽量指定主机名以

30、便使那些不想其访问的系统不能访问nfs挂载的资源。另外,最好加上sync,否则$ sudo exportfs -r时会给出警告,sync是nfs的默认选项。(3)查看nfs server的exportlist:$ sudo showmount -e若更改了/etc/exports,运行以下命令进行更新:$ sudo exportfs -r然后重启nfs服务:$ sudo /etc/init.d/nfs-kernel-server restart五、启动和停止nfs服务1,启动nfs的方法和启动其他服务器的方法类似,首先需要启动portmap和nfs这两个服务,并且portmap服务一定要先于n

31、fs服务启动。$ sudo /etc/init.d/portmap start$ sudo /etc/init.d/nfs-kernel-server start2,停止nfs服务在停止nfs服务的时候,需要先停止nfs服务再停止portmap服务,如果系统中还有其他服务需要使用portmap服务,则可以不停止portmap服务。$ sudo /etc/init.d/nfs-kernel-server stop$ sudo /etc/init.d/portmap stop3,重新启动portmap和nfs服务$ sudo /etc/init.d/portmap restart$ sudo /e

32、tc/init.d/nfs-kernel-server restart4,检查portmap和nfs服务状态$ sudo /etc/init.d/portmap status$ sudo /etc/init.d/nfs-kernel-server status六、nfs客户端配置(nfs测试)2,手动挂载使用mount命令来挂载其他机器共享的nfs目录。格式:$ sudo mount server ip:/share dir local mount point例如:$ sudo mount -t nfs -o nolocklocalhost:/opt/friendlyarm/mini2440/

33、root_nfs /mnt/ 或$ sudo mount -t nfs -o nolock01:/opt/friendlyarm/mini2440/root_nfs /mnt/其中,localhost可以是具体的ip地址,同时挂载点/mnt/root_nfs目录必须已经存在,而且在开发板的/mnt/目录中没有文件或子目录。5、可以运行df命令查看是否挂载成功:$ sudo df取消挂载的命令如下:$ sudo umount /mnt/root_nfs七、目标板nfs配置操作主机ip:01目标板ip:30将usb转串口连接上,在终

34、端输入minicom与板子连起,作为“超级终端”使用。启动目标板并连通网络后,首先查看目标板kernel自身是否支持nfs,在minicom中输入cat /proc/filesystems命令查看其中是否有nfs一行,若没有则表示内核不支持nfs,就需要重新编译和烧写内核;有则ok,接下来就可以直接进行mount操作了。具体命令是:# mount -t nfs -o nolock01:/opt/friendlyarm/mini2440/root_nfs /mnt/无任何提示表示成功,这时可以进入/mnt/目录,对文件进行cp、mv等操作。八、注意事项1,挂载nfs系统,需

35、要开发板的ip和主机ip位于同一子网内,修改开发板的网络配置如下(mini2440为例): cd etc vi eth0-setting 修改文件内容,例如: ip=30 mask= gateway= dns= mac=08:90:90:90:90:90 可以根据自己的网络设置 然后 vi resolv.conf nameserver 2,挂载nfs系统 如果主机与开发板直接连接,需要主机为静态网络,否则将开发板与主机连接到同一个局域网内,配置主机静态网络如下:1. 删除 netw

36、ork manager(网络工具) ,你用”添加删除”删除它,也可以用”新立得”,或是用命令来删除,反正不管你用什么方法,首先把它干掉再说。2. 配置网络接口,这个时候就要运用命令了,关键时刻,命令值得信赖-打开终端执行下述命令:sudo leafpad /etc/network/interfaces#在弹出的文本中设置网卡接口,填入给eth0分配静态的ip的代码,如下面的范例:auto eth0 #开机首先自动激活网卡。iface eth0 inet staticaddress 23 netmask 3. 配置 dns(局域网上网和adsl上

37、网的设置有点不同)。打开终端执行下命令:sudo leafpad /etc/resolv.conf#在弹出的文本中填入dns名称服务器地址。nameserver #这里填入你所在地方的 dns 服务器的地址,直接填你在路由器中看到的8。nameserver #这里填入你所在地方的备用 dns 服务器的地址,直接填你在路由器中看到的。4. 重启。(有时你又装了networkmanage的话,可能连接是个x,不用管它,那是个表层的东西,能上网就行)四,搭建嵌入式调试环境嵌入式软件经过编译和链接后即进入调试阶段

38、,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别。 在通用软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。交叉调试(cross debug)又

39、常常被称为远程调试(remote debug),是一种允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。一般而言,远程调试过程的结构如图所示。软件调试 软件调试通常要在不同的层次上进行,有时可能需要对嵌入式操作系统的内核进行调试,而有时可能仅仅只需要调试嵌入式应用程序就可以了。在嵌入式系统的整个开发过程中,不同层次上的软件调试需要使用不同的调试方法。 嵌入式操作系统的内核调试相对来讲比较困难,这是因为在内核中不便于增加一个调试器程序,而只能通过远程调试的方法,通过串口和操作系统内置的调试桩 (debug

40、 stub)进行通信,共同完成调试过程。调试桩可以看成是一个调试服务器,它通过操作系统获得一些必要的调试信息,并且负责处理宿主机发送来的调试命令。具体到嵌入式linux系统内核,调试时可以先在linux内核中设置一个调试桩,用作调试过程中和宿主机之间的通信服务器,然后就可以在宿主机中通过调试器的串口与调试桩进行通信,并通过调试器控制目标机上linux内核的运行。 嵌入式应用软件的调试可以使用本地调试和远程调试两种方法,相对于操作系统的调试而言,这两种方式都比较简单。如果采用的是本地调试,首先要将所需的调试器移植到目标系统中,然后就可以直接在目标机上运行调试器来调试应用程序了;如果采用的是远程调

41、试,则需要移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试。在嵌入式linux系统的开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,两者相互配合共同完成调试过程。硬件调试 相对于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优秀的调试性能。硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是rom monitor、rom emulator、in-circuit emulator和in-circuit debugge

42、r。 采用rom monitor方式进行交叉调试需要在宿主机上运行调试器,在目标机上运行rom监视器(rom monitor)和被调试程序,宿主机通过调试器与目标机上的rom监视器建立通信连接,它们之间的通信遵循远程调试协议。rom监视器可以是一段运行在目标机rom上的可执行程序,也可以是一个专门的硬件调试设备,它负责监控目标机上被调试程序的运行情况,能够与宿主机端的调试器一同完成对应用程序的调试。在使用这种调试方式时,被调试程序首先通过rom监视器下载到目标机,然后在rom监视器的监控下完成调试,目前使用的绝大部分rom监视器能够完成设置断点、单步执行、查看寄存器、修改内存空间等各项调试功能

43、。 采用rom emulator方式进行交叉调试时需要使用rom仿真器,它通常被插入到目标机上的rom插槽中,专门用于仿真目标机上的rom芯片。在使用这种调试方式时,被调试程序首先下载到rom仿真器中,它等效于下载到目标机的rom芯片上,然后在rom仿真器中完成对目标程序的调试。rom emulator调试方式通过使用一个rom仿真器,虽然避免了每次修改程序后都必须重新烧写到目标机rom中这一费时费力的操作,但由于rom仿真器本身比较昂贵,功能相对来讲又比较单一,因此只适应于某些特定场合。 采用in-circuit emulator(ice)方式进行交叉调试时需要使用在线仿真器,它是仿照目标机

44、上的cpu而专门设计的硬件,可以完全仿真处理器芯片的行为,并且提供了非常丰富的调试功能。在使用在线仿真器进行调试的过程中,可以按顺序单步执行,也可以倒退执行,还可以实时查看所有需要的数据,从而给调试过程带来了很多的便利。嵌入式系统应用的一个显著特点是与现实世界中的硬件直接相关,存在各种异变和事先未知的变化,从而给微处理器的指令执行带来各种不确定因素,这种不确定性在目前情况下只有通过在线仿真器才有可能发现,因此尽管在线仿真器的价格非常昂贵,但仍然得到了非常广泛的应用。 采用in-circuit debugger(icd)方式进行交叉调试时需要使用在线调试器。由于ice的价格非常昂贵,并且每种cp

45、u都需要一种与之对应的ice,使得开发成本非常高,一个比较好的解决办法是让cpu直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程。目前 motorola公司提供的开发板上使用的是dbm调试端口,而arm公司提供的开发板上使用的则是jtag调试端口,使用合适的软件工具与这些调试端口进行连接,可以获得与ice类似的调试效果。1,搭建基于嵌入式的应用程序调试环境 一、基于非界面的调试环境的搭建 1,首先按上面步骤安装好交叉编译调试环境,nfs环境2,要进行gdbserver远程调试,还必须安装gdb远程调试工具:gdb的源代码包可以从网上下载,找到合

46、适的版本下载到某个目录,笔者下载到自己的用户目录:/home/vicky。下载完后,进入/home/vicky目录,配置编译步骤如下:#tar jxvf gdb-6.4-tar-bz2#cd gdb-6.4#./configure -target=arm-linux -prefix=/usr/local/arm-gdb v#make(这一步的时候可能会有问题,提示一个函数中(具体函数名不记得了)parse error,就是unsigned前边多了一个”,你用vi进入那一行把它删掉就行了。一般都不会出错的。)#make install#export path=$path:/usr/local/a

47、rm-gdb进入gdbserver目录:#./configure -target=arm-linux host=arm-linux#make cc=/usr/local/arm/bin/arm-linux-gcc(这一步要指定arm-linux-gcc的位置,可能跟你的不一样)没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。下面就可以用gdb+gdbserver调试我们开发板上的程序了。1,通过nfs挂载目标板(nandflash启动)mount

48、 -t nfs -o nolock01:/opt/friendlyarm/mini2440/root_nfs /mnt/这将pc机01上的共享目录/opt/friendlyarm/mini2440/root_nfs挂载到了开发板的/mnt/目录,然后将hello程序拷贝到共享目录下2,要进行gdb调试,首先要在目标板上启动gdbserver服务。在gdbserver所在目录下输入命令: (minicom下)#cd /mnt#./gdbserver 01:2345 hello(反正是到gdbserver目录下运行gdbserver

49、,这是在开发板上的操作,本例中,gdbserver在共享目录下)01为宿主机ip,在目标板的2345端口开启了一个调试进程,hello为要调试的程序。出现提示:process /mnt/hello created: pid=80listening on port 2345(另一个终端下,主机终端)#arm-linux-gdb hello(gdb) target remote 23:2345(23为开发板ip)出现提示:remote debugging using 23:2345new thread 80sw

50、itching to thread 800x40002a90 in ?()同时在minicom下提示:remote debugging from host 01(gdb)连接成功,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。注:在远程调试的这些步骤中nfs配置和安装交叉编译工具,以及安装gdb工具的没有什么顺序,只是主意再gdbserver远程连接前要配置好开发板的ip地址。二、基于eclipse界面的调试环境的搭建 如何使用eclipse进行嵌入式linux的开发习惯了在windows环境下开发的程序员在转到linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在linux上运行,界面和功能与windows上同类软件相似的开发平台eclipse。 eclipse本身只是一个框架平台,最初主要用于java语言的开发。但是众多插件的支持使得eclipse同样可以用来开发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论