请教专家--关于仿真器

内核编译和嵌入式产品的设计与开发
回复
peter81015
帖子: 16
注册时间: 2008-01-19 19:33

请教专家--关于仿真器

#1

帖子 peter81015 » 2008-07-06 10:32

受单片机仿真器开发模式的影响,本人有些想法请专家回答,谢谢:

我的ARM开发板带有一个Muti-ICE仿真器,它可以配合ADS在windows环境下调试一些简单程序,比如LED走马灯之类的,这种情况下是不用到嵌入式linux操作系统的,和单片机的开发模式很象。

我有一个比较天真的想法,试问:
如果把linux内核的源代码加入ADS的工程中,能否由ADS来编译linux-kernel,当然这里还有内核的配置问题,不知道是否可行?

我听说调试基于嵌入式linux的程序,都是由Printf打印出调试信息,然后再去修改源码;这样把Muti-ICE仿真器丢在一边不用,挺可惜的。如果在ubuntu环境下可以通过并口控制Muti-ICE仿真器来调试程序,那么在开发驱动方面是不是可以事半功倍??

不知道在开发linux驱动的前辈,你们用什么方法来调试程序的? :?: :?:
头像
Beetle
帖子: 1637
注册时间: 2005-10-14 16:55
系统: OS X
来自: 江苏
联系:

#2

帖子 Beetle » 2008-07-06 17:59

仿真器,买不起,我调板子都是J-TAG的。04年的时候周公公配的J-TAG调试还是块单片机,现在就几根排线,驱动部分全部交给一个JTAG-Driver来完成,记得是一个杭州的哥们写的,for windows,问过他能不能顺带搞个*NIX的,可是人家根本不bird me。
头像
microtiger
帖子: 27
注册时间: 2006-09-14 10:57
来自: http://szmicrotiger.blogspot.com/

#3

帖子 microtiger » 2008-07-07 10:48

关键是---我不是专家!!!无语
chengying
帖子: 19
注册时间: 2008-04-01 21:20
联系:

#4

帖子 chengying » 2008-07-09 1:43

其实仿真器是很容易制作的,特别是在Linux下。
可以看一下OpenOCD项目,了解OpenOCD的仿真器驱动实现方法的话,很简单就可以自己做个JTAG接口仿真器,并且可以使用任何自己熟悉的PC接口。当然,USB接口在使用上是最方便的

LS可能是ZLG的"受害者",到现在还在用ADS。ADS应该不可以编译Linux内核的,MDK可能可以,因为MDK ms可以指定使用的编译器

Linux内核其实确实非常难调试的,估计绝大部分都是使用printf来调试的。
如果因为需要调试而终止处理器的话,系统的底层服务都无法运行,即使能够正常调试,之后进入运行状态的话,系统都可能出错。
peter81015
帖子: 16
注册时间: 2008-01-19 19:33

#5

帖子 peter81015 » 2008-07-16 16:53

chengying 写了:其实仿真器是很容易制作的,特别是在Linux下。

LS可能是ZLG的"受害者",到现在还在用ADS。ADS应该不可以编译Linux内核的,MDK可能可以,因为MDK ms可以指定使用的编译器

Linux内核其实确实非常难调试的,估计绝大部分都是使用printf来调试的。
如果因为需要调试而终止处理器的话,系统的底层服务都无法运行,即使能够正常调试,之后进入运行状态的话,系统都可能出错。
谢谢,你的意思是说只要能指定编译器,即使在windows下面,只要能用GCC来编译就可以是吗?

还有最后提到用JTAG调试,到了设置的断点停下来,CPU肯定是要暂停空转的。你说的“系统的底层服务都无法运行”是指哪一部分?底层软件?硬件都暂停运行了,软件肯定也暂停了,你说的“可能出错是”我不太明白???除非是系统正和外部进行实时通信。
peter81015
帖子: 16
注册时间: 2008-01-19 19:33

这几天看到ADS的使用说明,是这么写的

#6

帖子 peter81015 » 2008-08-19 13:15

The ADS Version 1.2 product includes the following fully supported debuggers:
• ARM eXtended Debugger (AXD, both Windows and UNIX versions)
• ARM Debugger for Windows (ADW)
• ARM Debugger for UNIX (ADU).

If you are using the Multi-ICE DLL on a UNIX workstation, you must connect that
workstation to the Windows workstation running the server using a TCP/IP network.

There are two distinct software components in Multi-ICE:
• the Multi-ICE server, that must be run on the computer the interface unit is
attached to
• the Multi-ICE DLL, that can be run on another computer.

也就是说AXD是通过Multi-ICE DLL和Multi-ICE server通信,以便将步进、执行、运行等调试命令转换成JTAG指令,而Multi-ICE server只能在windows下运行,而Multi-ICE DLL可以在Linux下运行。
因此在linux下使用ADS调试是可以的,不过还是离不开windows的支持;
至于内核能否编译,初步估计是不行,具体原因??
驱动调试方法也待进一步了解??
eht25g
帖子: 5
注册时间: 2008-08-01 17:28

Re: 请教专家--关于仿真器

#7

帖子 eht25g » 2008-10-05 22:45

linux内核是一定要用gcc编译器才能编译的。因为gcc扩展了很多c 特性,而内核中大量的用到了这些特性。驱动开发用得最多的还是printk啦,类似于应用层开发的printf。
其次trace,kgdb。
上次由 eht25g 在 2008-10-05 22:52,总共编辑 1 次。
eht25g
帖子: 5
注册时间: 2008-08-01 17:28

Re: 请教专家--关于仿真器

#8

帖子 eht25g » 2008-10-05 22:50

恩,就算MDK里可以选择编译器为gcc,估计也不一定可行,它提供的link不一定能解析内核的lds文件。
allankliu
帖子: 2
注册时间: 2008-10-23 8:56

Re: 请教专家--关于仿真器

#9

帖子 allankliu » 2008-10-23 9:03

JTAG只用在调试最底层的如Bootloader之类的,其实连调试都有问题。基本上用来写Bootloader差不多。而且JTAG的速度决定了它是无法支持高速CPU的全速运行的,它只能够有限地(极其有限地)做一些事情。但是在单片机的领域,确实做了不少事情。想LPC21xx等ARM7TDMI/Cortex-M3之类的可以用JTAG来调试程序。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 请教专家--关于仿真器

#10

帖子 eexpress » 2008-10-23 9:08

很多老式的编程器啊,都是自己写串口控制寄存器的呢。很没标准的。
jtag只是一个过渡的手段,除开芯片本身支持一些特性,才有用,比如硬件双断点。
arm的还没玩过。小牛牛记得是搞过这个的。
● 鸣学
回复