嵌入式开发环境的搭建

上传人:痛*** 文档编号:148911722 上传时间:2022-09-06 格式:DOC 页数:55 大小:5.18MB
收藏 版权申诉 举报 下载
嵌入式开发环境的搭建_第1页
第1页 / 共55页
嵌入式开发环境的搭建_第2页
第2页 / 共55页
嵌入式开发环境的搭建_第3页
第3页 / 共55页
资源描述:

《嵌入式开发环境的搭建》由会员分享,可在线阅读,更多相关《嵌入式开发环境的搭建(55页珍藏版)》请在装配图网上搜索。

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 jaunty main restricted universe multiversedeb jaunty-

6、backports main restricted universe multiversedeb jaunty-proposed main restricted universe multiversedeb jaunty-security main restricted universe multiversedeb jaunty-updates main restricted universe multiversedeb-src main restricted universe multiversedeb-src main restricted universe multiversedeb-s

7、rc main restricted universe multiversedeb-src main restricted universe multiversedeb-src main restricted universe multiverse软件源的第一个用途就是更新系统,依次输入下面两行命令,第一次更新系统可能需要花费略长的时间sudo apt-get updatesudo apt-get dist-upgrade然后就可以安装各种软件二,安装交叉编译工具链1,使用制作好的工具链刚开始学习时,建议使用已经制作好的工具链,可以从网上下载制作好的工具链,比如arm-linux-gcc-3.

8、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目录然后设置环境变量PATH,可以使用命令,如下: $export PATH=$PATH:/opt/ gcc-3.4.5-glibc-2.3.6/bin或者在/etc/environment文件修改PATH的值:sudo gedit /etc/environment在文件中修

9、改后的内容如下: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是一个能提供功能键定义,屏幕绘制,以及基于文本终端的图形互动功能的动态库,如果没有它,执行make menuconfig会出错,Ubuntu下安装比较简单:sudo apt-get install ncurses2,自己制作工具链用户可以自己制作工具链,如果要基于gcc和glibc来制作工具链,可以使用crosstool

10、来进行编译从网上下载crosstool-0.43.tar.gz工具来编译工具链,它运行时,会自动从网上下载源码,然后编译,也可以先自己下载源码,再运行crosstool,这些源码包括:binutils-2.15.tar.bz2 gcc-3.4.5.tar.bz2glibc-2.3.6.tar.bz2glibc-linuxthreads-2.3.6.tar.bz2, linux-2.6.8.tar.bz2linux-libc-headers-2.6.12.0.tar.bz2假设将这些源码放到目录/opt/src_gcc_glibc/下 下面分步讲解:(1)修改crosstool脚本执行以下解压命

11、令: 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-info.h_err.patchcrosstool-0.43/patchs/glibc-2.3.6/需要修改demo-arm-softfloat.sh ,arm-softfloat.dat,all.sh1修改demo-arm-softfloat.sh,修改内容如下:

12、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,修改内容如下:70 PREFIX=$PREFIX-RESULT_TOP/$TOOLCOMBO/$TARGET 改为70 PREFIX=$PREFIX-RESULT_TOP/$TOOLCOMBO存放的结果目录将由/opt/gcc-glibc/arm-linux/变为/

13、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-gcc v 测试是否安装正确三,安装烧写工具,文件传输工具1,安装与配置minicom串口工具 安装minicom sudo apt-get install minicom sudo apt-get install lrzsz 安装后可以使用Zmodem传输协

14、议传输文件 配置minicom 终端下输入命令minicom -s 得到下图:首先选择文件名与路径,得到下图: 上传目录是指pc机向开发板传输文件的默认目录,可以将要传输的文件放到此目录中 下载目录是指开发板向pc机传输文件的存放目录 然后选择文件传输协议,这里使用Zmodem协议: 然后选择串口设置,得到下图,可按下图配置: 如果你使用USB转串口,则串口设备为/dev/ttyUSB0 然后选择设置保存为dfl,保存刚才的设置 运行实例: 启动minicom #minicom 然后打开开发板,从norflash启动 得到下图: minicom常用命令可以输入ctrl+A-Z得到 ctrl+A

15、-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/ttyS0 /如果为USB转串口,为/dev/ttyUSB0 set speed 115200 /设置波特率 set carrier-watch off set handshake none set flow-control none robust set fi

16、le 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 kermit -c 打开开发板,从norflash启动,如下图: 3,安装与配置cutecom串口工具 安装cutecom sudo apt-get install cutecom 运行cutecom sudo cutecom 这个和xp下的超级终端一样,是个图

17、形界面,可按下图配置cutecom: 如果直接使用串口,使用/dev/ttyS0,如果是USB转串口,则为/dev/ttyUSB0使用实例: 首先在终端下运行cutecom sudo cutecom 配置好后,点击open device 然后打开mini2440开发板,比如从NORFLASH启动,如下图 上述三个串口工具可任选一种使用,推荐minicom(个人习惯)4,编译安装linux下的烧写工具dnw 安装libusb-dev sudo apt-get install libusb-dev 然后下载源码dnw_linux.tar.bz2,解压后得到目录dnw_linux 进入目录,找到dn

18、w.c,修改60行的一句话 *(unsigned long*)file_buffer) = 0x30000000; 根据自己开发板的情况,改为合适的值,这里为0x30000000,意为 下载运行的地址 编译dnw.c gcc dnw.c -o dnw -lusb 将编译得到的dnw拷贝到/usr/sbin 然后进入secbulk目录 编译并加载secbulk.c内核模块 cd secbulk make -C /lib/modules/uname -r/build M=pwd modules 编译成功后在当前目录下可以看到secbulk.ko 用insmod命令加载模块,这需要root权限 $s

19、udo insmod ./secbulk.ko 加载后用dmesg命令可以看到模块已经成功加载238.007970secbulk:secbulk loaded238.009101usbcore:registered new interface driver secbulk运行实例: 首先将开发板和主机接上串口线,USB烧写线 加载secbulk模块 $sudo insmod ./secbulk.ko 启动minicom,并使开发板从norflash启动 输入d,运行download and run命令 在要烧写的文件目录下,运行命令 sudo dnw $你的文件即可完成烧写dnw 烧写程序可配

20、合以上三个串口工具的任何一个完成烧写5,搭建NFS网络传输环境 网络文件系统(NFS)一、NFS简介1,NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share files)可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看作一个文件服务器(File Server)。2,NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。其实

21、,NFS运行在SUN的RPC(Remote Procedure Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS Server也可以看作是RPC Server。正 因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口通过portmap设定。比如:某个NFS Client发起NFS服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到portnumber注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。3,NFS允许系统将其目录和文件共享给网络上的其他系统。通过NFS,用户和应用程序可以访问远程

22、系统上的文件,就像它们是本地文件一样。那么NFS最值得注意的优点有:(1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。(2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在NFS服务器上设置并使其在整个网络上可用。(3)存储设备如软盘、光驱及USB设备可以被网络上其它机器使用,这可能可以减少网络上移动设备的数量。二、与NFS相关的几个文件和命令1,/etc/exports对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。2,/etc/default/portmap实际上,por

23、tmap负责映射所有的RPC服务端口,它的内容非常非常之简单。3,/etc/hosts.deny设定拒绝portmap服务的主机,即禁止访问的客户端IP列表。4,/etc/hosts.allow设定允许portmap服务的主机,即允许访问的客户端IP列表。三、NFS安装在主机上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。1,安装端口映射器portmap(可选)$sudo apt-get install portmap2,在终端提示符后键入以下命令安装NFS服务器$ sudo apt-get install nfs-kernel-server3,安装NFS客户端(可选)

24、$ sudo apt-get install nfs-common注意:nfs-kernel-server和nfs-common都依赖于portmap。另外,在一些文档中提出还需要使用apt-get来手动安装NFS的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动把它们安装好。这样,宿主机就相当于NFS Server。同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs-common(第3步)。四、NFS配置1,配置portmap方法1:编

25、辑/etc/default/portmap,将-i 127.0.0.1去掉;方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对Shouldportmap be bound to the loopback address?选择“否(No)”。2,配置sudo gedit /etc/hosts.deny禁止任何host(主机)能和你的NFS服务器进行NFS连接。在该文件中加入:# NFS DAEMONSportmap:ALLlockd:ALLmountd:ALLrquotad:ALLstatd:ALL3,配置sudo gedit

26、 /etc/hosts.allow允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.1开头的主机连接到NFS服务器上,具体要看你目标板的端口地址,也可以指定特定的IP地址。在该文件中加入:# NFS DAEMONSportmap: 192.168.1.lockd:192.168.1.rquotad:192.168.1.mountd:192.168.1.statd: 192.168.1.通过/etc/hosts.deny和/etc/hosts.allow设置对portmap的访问,采用这两个配置文件有点类似mask的意思。先在/etc/hosts.den

27、y中禁止所有用户对portmap的访问,再在/etc/hosts.allow中允许某些用户对portmap的访问。然后重启portmap daemon:$sudo /etc/init.d/portmap restart4,配置sudo gedit /etc/exports例如我要将/opt/FriendlyARM/mini2440/root_nfs目录让用户的IP共享,则在该文件末尾添加下列语句:/opt/FriendlyARM/mini2440/root_nfs *(rw,sync,no_root_squash)其中:/opt/FriendlyARM/mini2440/root_nfs表示N

28、FS共享目录,它可以作为开发板的根文件系统通过NFS挂接;* 表示所有的客户机都可以挂接此目录;rw 表示挂接此目录的客户机对该目录有读写的权力;sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份。注意:可以用主机名来代替*,尽量指定主机名以便使那些不想其访问的系统不能访问NFS挂载的资源。另外,最好加上sync,否则$ sudo exportfs -r时会给出警告,sync是NFS的默认选项。(3)查看NFS Server的exportlist:$ sudo showmount -e若更改了/et

29、c/exports,运行以下命令进行更新:$ sudo exportfs -r然后重启NFS服务:$ sudo /etc/init.d/nfs-kernel-server restart五、启动和停止NFS服务1,启动NFS的方法和启动其他服务器的方法类似,首先需要启动portmap和NFS这两个服务,并且portmap服务一定要先于NFS服务启动。$ sudo /etc/init.d/portmap start$ sudo /etc/init.d/nfs-kernel-server start2,停止NFS服务在停止NFS服务的时候,需要先停止NFS服务再停止portmap服务,如果系统中还

30、有其他服务需要使用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 /etc/init.d/nfs-kernel-server restart4,检查portmap和NFS服务状态$ sudo /etc/init.d/portmap status$ sudo /etc/init.d/nfs-kernel-server status六

31、、NFS客户端配置(NFS测试)2,手动挂载使用mount命令来挂载其他机器共享的NFS目录。格式:$ sudo mount Server IP:/share dir local mount point例如:$ sudo mount -t nfs -o nolocklocalhost:/opt/FriendlyARM/mini2440/root_nfs /mnt/ 或$ sudo mount -t nfs -o nolock192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/其中,localhost可以是具体的IP地址,同时挂载点/mnt

32、/root_nfs目录必须已经存在,而且在开发板的/mnt/目录中没有文件或子目录。5、可以运行df命令查看是否挂载成功:$ sudo df取消挂载的命令如下:$ sudo umount /mnt/root_nfs七、目标板NFS配置操作主机IP:192.168.1.101目标板IP:192.168.1.230将USB转串口连接上,在终端输入minicom与板子连起,作为“超级终端”使用。启动目标板并连通网络后,首先查看目标板kernel自身是否支持NFS,在minicom中输入cat /proc/filesystems命令查看其中是否有NFS一行,若没有则表示内核不支持NFS,就需要重新编译

33、和烧写内核;有则OK,接下来就可以直接进行mount操作了。具体命令是:# mount -t nfs -o nolock192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/无任何提示表示成功,这时可以进入/mnt/目录,对文件进行cp、mv等操作。八、注意事项1,挂载NFS系统,需要开发板的ip和主机ip位于同一子网内,修改开发板的网络配置如下(mini2440为例): cd etc vi eth0-setting 修改文件内容,例如: IP=192.168.1.230 Mask=255.255.255.0 Gateway=192.168

34、.1.1 DNS=192.168.1.1 MAC=08:90:90:90:90:90 可以根据自己的网络设置 然后 vi resolv.conf nameserver 192.168.1.12,挂载NFS系统 如果主机与开发板直接连接,需要主机为静态网络,否则将开发板与主机连接到同一个局域网内,配置主机静态网络如下:1. 删除 Network Manager(网络工具) ,你用”添加删除”删除它,也可以用”新立得”,或是用命令来删除,反正不管你用什么方法,首先把它干掉再说。2. 配置网络接口,这个时候就要运用命令了,关键时刻,命令值得信赖-打开终端执行下述命令:sudo leafpad /et

35、c/network/interfaces#在弹出的文本中设置网卡接口,填入给eth0分配静态的IP的代码,如下面的范例:auto eth0 #开机首先自动激活网卡。iface eth0 inet staticaddress 222.30.45.123 netmask 255.255.255.0 3. 配置 DNS(局域网上网和ADSL上网的设置有点不同)。打开终端执行下命令:sudo leafpad /etc/resolv.conf#在弹出的文本中填入DNS名称服务器地址。nameserver 222.30.45.1 #这里填入你所在地方的 DNS 服务器的地址,直接填你在路由器中看到的202

36、.96.64.68。Nameserver 222.30.45.1 #这里填入你所在地方的备用 DNS 服务器的地址,直接填你在路由器中看到的211.98.4.1。4. 重启。(有时你又装了NetworkManage的话,可能连接是个X,不用管它,那是个表层的东西,能上网就行)四,搭建嵌入式调试环境嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别。 在通用软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。而在嵌

37、入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。交叉调试(Cross Debug)又常常被称为远程调试(Remote Debug),是一种允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。一般而言,远程调试过程的结构如图所示。软件调试 软件调试通常要在不

38、同的层次上进行,有时可能需要对嵌入式操作系统的内核进行调试,而有时可能仅仅只需要调试嵌入式应用程序就可以了。在嵌入式系统的整个开发过程中,不同层次上的软件调试需要使用不同的调试方法。 嵌入式操作系统的内核调试相对来讲比较困难,这是因为在内核中不便于增加一个调试器程序,而只能通过远程调试的方法,通过串口和操作系统内置的调试桩 (debug stub)进行通信,共同完成调试过程。调试桩可以看成是一个调试服务器,它通过操作系统获得一些必要的调试信息,并且负责处理宿主机发送来的调试命令。具体到嵌入式Linux系统内核,调试时可以先在Linux内核中设置一个调试桩,用作调试过程中和宿主机之间的通信服务器

39、,然后就可以在宿主机中通过调试器的串口与调试桩进行通信,并通过调试器控制目标机上Linux内核的运行。 嵌入式应用软件的调试可以使用本地调试和远程调试两种方法,相对于操作系统的调试而言,这两种方式都比较简单。如果采用的是本地调试,首先要将所需的调试器移植到目标系统中,然后就可以直接在目标机上运行调试器来调试应用程序了;如果采用的是远程调试,则需要移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试。在嵌入式Linux系统的开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,两者相互配合共同完成调试过程。硬件调试 相对

40、于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优秀的调试性能。硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是ROM Monitor、ROM Emulator、In-Circuit Emulator和In-Circuit Debugger。 采用ROM Monitor方式进行交叉调试需要在宿主机上运行调试器,在目标机上运行ROM监视器(ROM Monitor)和被调试程序,宿主机通过调试器与目标机上的ROM监视器建立通信连接,它们之间的通信遵循远程调试协议。ROM监视器可以是一段运行在目标机R

41、OM上的可执行程序,也可以是一个专门的硬件调试设备,它负责监控目标机上被调试程序的运行情况,能够与宿主机端的调试器一同完成对应用程序的调试。在使用这种调试方式时,被调试程序首先通过ROM监视器下载到目标机,然后在ROM监视器的监控下完成调试,目前使用的绝大部分ROM监视器能够完成设置断点、单步执行、查看寄存器、修改内存空间等各项调试功能。 采用ROM Emulator方式进行交叉调试时需要使用ROM仿真器,它通常被插入到目标机上的ROM插槽中,专门用于仿真目标机上的ROM芯片。在使用这种调试方式时,被调试程序首先下载到ROM仿真器中,它等效于下载到目标机的ROM芯片上,然后在ROM仿真器中完成

42、对目标程序的调试。ROM Emulator调试方式通过使用一个ROM仿真器,虽然避免了每次修改程序后都必须重新烧写到目标机ROM中这一费时费力的操作,但由于ROM仿真器本身比较昂贵,功能相对来讲又比较单一,因此只适应于某些特定场合。 采用In-Circuit Emulator(ICE)方式进行交叉调试时需要使用在线仿真器,它是仿照目标机上的CPU而专门设计的硬件,可以完全仿真处理器芯片的行为,并且提供了非常丰富的调试功能。在使用在线仿真器进行调试的过程中,可以按顺序单步执行,也可以倒退执行,还可以实时查看所有需要的数据,从而给调试过程带来了很多的便利。嵌入式系统应用的一个显著特点是与现实世界中

43、的硬件直接相关,存在各种异变和事先未知的变化,从而给微处理器的指令执行带来各种不确定因素,这种不确定性在目前情况下只有通过在线仿真器才有可能发现,因此尽管在线仿真器的价格非常昂贵,但仍然得到了非常广泛的应用。 采用In-Circuit Debugger(ICD)方式进行交叉调试时需要使用在线调试器。由于ICE的价格非常昂贵,并且每种CPU都需要一种与之对应的ICE,使得开发成本非常高,一个比较好的解决办法是让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程。目前 Motorola公司提供的开发板上使用的是DBM调试端口,而ARM公司提供的

44、开发板上使用的则是JTAG调试端口,使用合适的软件工具与这些调试端口进行连接,可以获得与ICE类似的调试效果。1,搭建基于嵌入式的应用程序调试环境 一、基于非界面的调试环境的搭建 1,首先按上面步骤安装好交叉编译调试环境,NFS环境2,要进行gdbserver远程调试,还必须安装gdb远程调试工具:gdb的源代码包可以从网上下载,找到合适的版本下载到某个目录,笔者下载到自己的用户目录:/home/vicky。下载完后,进入/home/vicky目录,配置编译步骤如下:#tar jxvf gdb-6.4-tar-bz2#cd gdb-6.4#./configure -target=arm-lin

45、ux -prefix=/usr/local/arm-gdb v#make(这一步的时候可能会有问题,提示一个函数中(具体函数名不记得了)parse error,就是unsigned前边多了一个”,你用vi进入那一行把它删掉就行了。一般都不会出错的。)#make install#export PATH=$PATH:/usr/local/arm-gdb进入gdbserver目录:#./configure -target=arm-linux host=arm-linux#make CC=/usr/local/arm/bin/arm-linux-gcc(这一步要指定arm-linux-gcc的位置,可

46、能跟你的不一样)没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。下面就可以用gdb+gdbserver调试我们开发板上的程序了。1,通过NFS挂载目标板(NandFlash启动)mount -t nfs -o nolock192.168.2.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/这将PC机192.168.2.101上的共享目录/opt/FriendlyARM/mini2440/root_nfs挂载

47、到了开发板的/mnt/目录,然后将hello程序拷贝到共享目录下2,要进行gdb调试,首先要在目标板上启动gdbserver服务。在gdbserver所在目录下输入命令: (minicom下)#cd /mnt#./gdbserver 192.168.2.101:2345 hello(反正是到gdbserver目录下运行gdbserver,这是在开发板上的操作,本例中,gdbserver在共享目录下)192.168.2.101为宿主机IP,在目标板的2345端口开启了一个调试进程,hello为要调试的程序。出现提示:Process /mnt/hello created: pid=80Listen

48、ing on port 2345(另一个终端下,主机终端)#arm-linux-gdb hello(gdb) target remote 192.168.2.223:2345(192.168.2.223为开发板IP)出现提示:Remote debugging using 192.168.2.223:2345New thread 80Switching to thread 800x40002a90 in ?()同时在minicom下提示:Remote debugging from host 192.168.2.101(gdb)连接成功,这时候就可以输入各种gdb命令如list、run、next、

49、step、break等进行程序调试了。注:在远程调试的这些步骤中nfs配置和安装交叉编译工具,以及安装gdb工具的没有什么顺序,只是主意再gdbserver远程连接前要配置好开发板的ip地址。二、基于Eclipse界面的调试环境的搭建 如何使用eclipse进行嵌入式Linux的开发习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在Linu

50、x上运行,界面和功能与windows上同类软件相似的开发平台eclipse。 eclipse本身只是一个框架平台,最初主要用于java语言的开发。但是众多插件的支持使得eclipse同样可以用来开发其他的语言,如 c/c+、c#、perl、cobol的等等。 cdt(c/c+ development toolkit)就是支持c/c+开发的插件。许多软件开发商也以eclipse为框架推出了自己的集成开发环境。由于eclipse平台用java实现,所以运行时需要jre(java runtime environment)的支持。下面我们以ubuntu(linux发行版的一种)为例,介绍如何在linu

51、x上使用 eclipse+cdt来进行嵌入式Linux应用程序的开发。一、安装软件1、安装jdk(通过apt安装)2、安装eclipse和cdt 从eclipse网站上下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip # cd /opt # tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz / 解压生成eclipse目录 # export PATH=/opt/eclipse:$PATH # mkdir -p /opt/cdt # cd /opt/cdt # unzip cdt-master-

52、5.0.0.zip # cp -r plugins/* /opt/eclipse/plugins/ # cp -r features/* /opt/eclipse/features/二、创建c/c+工程 假设我们已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c+工程。为了更直观的说明,我们截取了相关的图片 进入eclipse安装路径后,运行eclipse eclipse运行界面 创建c 工程 使用缺省的Linux GCC工具链 进入c/c+ 界面 添加源代码文件1 添加源代码文件2 编辑代码 设置工程属性,指定交叉工具链1 设置工程属性,指定交叉工具链2 设置

53、工程属性,指定交叉工具链3 编译工程 已生成arm平台可执行代码 配置调试选项 设置Debugger和 GDB debugger选项 设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突) 在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致 点击Debug,进入调试界面 执行到断点 eclipse的调试界面和操作和在windows下开发类似,相信到了这一步,大家已经可以很方便来进行应用程序的开发了。2,搭

54、建硬件调试环境(以下环境搭建需要光盘支持) 一、OpenJTAG+OpenOCD+Eclipse调试环境的搭建(均为光盘自带) 在嵌入式开发中,有很多优秀的调试、仿真工具,比如 Keil、IAR、Rowley Associates 等。 它们的安装、使用都很便利,功能强大,但是价格昂贵(几百美元甚至更多);还要购买相应的硬件,比如 J-Link、U-Link 等 USB 到 JTAG 的转换盒,这也是一笔不小的开支。 对于学生,或者是开发预算有限的工程师来说,完全可以使用免费的开发工具 Eclipse、OpenOCD,然后通过一些便宜的 JTAG 转接器(比如并口 JTAG 等)就可以达到接近、甚至超越上述商业软件的效果。 并 口 JTAG 速 率 太 低 , 一 般 很 少 使 用 。 本 教 程 使 用 OpenJTAG 转 换 器 , 配 合Eclipse,OpenOCD 等开源软件,就可以完成下载、烧写、调试等任务。硬件、软件安装 修改 udev 规则,使得识别 OpenJTAG 后自动加载驱动 把光盘文件 Ubuntu/install/50-ftdi.rules 复制到/etc/udev/rules.d/目录下: $ sudo cp /media/cdrom0/Ubuntu/install/50-ftdi.rules /etc/udev/rules.d/

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!