QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 51331|回复: 44

SkyEye常见问题解答

  [复制链接]
发表于 2004-1-10 00:38:41 | 显示全部楼层 |阅读模式
----------------------------------------
166.111.68.183是国内教育网中的IP,主要用于放置内部测试软件和文档。如果允许出国访问,需要花钱,我们无法承受。
所以比较稳定的最新软件,demo和文档都放在 gro.clinux.org/projects/skyeye/下
主要的文档在
http://gro.clinux.org/frs/download.php/719/skyeyeinternal-0.6.8.pdf
http://gro.clinux.org/frs/download.php/789/SkyEyelcdtouchscreen4gro.pdf
http://gro.clinux.org/frs/download.php/835/hardwaredoc4skyeye.tar.bz2

也可以到
http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part1/index.shtml
等.

看比较新的skyeye 设计文档。

视频演示教程可到http://www.lumit.org/dn_video.htm
和 http://gro.clinux.org/frs/download.php/834/demovideo.tar.bz2 下载。
-----------------------------------------

Q:
请问skyeye中主要做了些什么工作?
  如果想要skyeye支持linux需要做些什么考虑?至少不应该再处理 skyeye.conf这个文件了吧?
  一直没搞明白gdb sim本身对linux或者uclinux支持到了什么地步?请大虾指 教,我在研究skyeye的源码,希望也能基于skyeye做出点东西来。万分感谢

A:
可以在源码中的目录
skyeye/sim/arm下
搜索字符串 chy yangye lyh wlm simonz 等
可看到主要的修改部分
重要的部分都有注释。

Q:
有许多不同版本的skyeye相关软件,到底如何选择?
A:
请下载文件 softwarerelations.txt 看看.位于:
ftp://166.111.68.184/pub/embed/skyeye/document/softwarerelations.txt

Q:
下载并编译了skyeye, 但在skyeye下执行命令:
(SkyEye) target sim
报错,提示说Undefined target command
如何解决?
A:
在编译skyeye之前,需要执行配置命令如下:
(不支持LCD仿真)
./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest
(支持LCD仿真)
./configure --target=arm-elf --prefix=/usr/local

然后再执行:
make
make install


Q:为何我运行SkyEye会占用100%的CPU利用率?
A:SkyEye需要一直模拟执行操作系统和应用程序的每一条指令,并且还要模拟外设的执行情况,它没有空闲时间。这导致它基本上会占用100%的CPU利用率。

Q:
如何在skyeye中的物理地址上设断点?请问能否在skyeye里单步调试汇编代码呢?
A:
设物理地址为 0x100000,可通过如下命令完成
break 0x100000
list 汇编文件的方法与list c文件的方法一样
单步执行汇编指令的命令是
si 或 ni

如果要在汇编中设断点,可以自己在该处加一个标号比如aaa: ,这不影响原来的程序,然后调试时用b aaa就可以在该处停下来,再用si或ni步进就可以了。
这个办法比对地址设断点要方便一些,供参考。

Q:
如何在uclinux中增加自己的用户程序?

Afrom liming)
一个 hello.c 的例子:
in file: hello.c
#include [stdio.h]

int main(void)

printf( "hello, world!
This is a test. My name is tm-linux
" );
return 1;
}

in file: makefile
all:
arm-elf-gcc -Os -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED - I/home/liming/mytest/uClinux-dist/lib/libc/include -I/home/liming/ mytest/uClinux-dist/lib/libm -I/home/liming/mytest/uClinux-dist - fno-builtin -nostartfiles -D__PIC__ -fpic -msingle-pic-base -I/ home/liming/mytest/uClinux-dist/linux-2.4.x/include -c -o hello.o hello.c

接上面的 makefile

arm-elf-gcc -Os -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED - I/home/liming/mytest/uClinux-dist/lib/libc/include -I/home/liming/ mytest/uClinux-dist/lib/libm -I/home/liming/mytest/uClinux-dist - fno-builtin -nostartfiles -D__PIC__ -fpic -msingle-pic-base -I/ home/liming/mytest/uClinux-dist/linux-2.4.x/include -Wl,-elf2flt / home/liming/mytest/uClinux-dist/lib/libc/crt0.o -o hello hello.o - L/home/liming/mytest/uClinux-dist/lib/libc/. -L/home/liming/mytest/ uClinux-dist/lib/libc/lib -L/home/liming/mytest/uClinux-dist/lib/ libm -L/home/liming/mytest/uClinux-dist/lib/libnet -L/home/liming/ mytest/uClinux-dist/lib/libdes -L/home/liming/mytest/uClinux-dist/ lib/libpcap -L/home/liming/mytest/uClinux-dist/lib/libssl -lc


我是 用了比较取巧的办法,直接到
/home/liming/mytest/uClinux-dist/romfs/bin
下添加了上面 hello.c 和 makefile
然后直接重新 make ,不要 make clean
就可以了。
另外, 需要把上面相关的目录改为你自己主机上的目录。 试试?



Q:
试图在skyeye下运行自己的程序。发现:
李明说的方法是可以把程序加载进uclinux的,我的过程是:
1。将用arm- elf-gcc编译的程序(Makefile是从/user/ping下拷过来的)拷贝到/romfs/ bin
2。make romfs
3。make image
4。ln -s images/romfs.img boot.rom
然后运行skyeye,运行uclinux,这时程序进入了bin目录下,但是一执行, 就出错:
BINFMT_FLAT:bad magic/rev (0x1010161,need 0x4)
BINFMT_FLAT:bad magic/rev(0x1010161,need 0x4)
hello:Unknown error 8
不知道是什么原因,我会再试一试的。
如果按照陈渝所说的话,“helloworld如果是一个用户态的应用程序,则它 应该放在uclinux-dist.../user/目录下,
生成的执行文件在boot.rom磁盘镜像文件中。”如何让生成的执行文件在 boot.rom中,我在usr下编译以后,曾经把linux按照说明完全重新make了一 遍,但是没有成功,在uclinux下找不到这个程序,显然没有加进去,能否赐 教应该如何操作。

A: (from wlm)
:关于如何在user/目录下添加自己的程序的可以参考 uclinux根目录下的
Documentation/Adding-User-Apps-HOWTO
这个文件,讲解得很详细。
A: (from liming)
刚才跟踪了一下 uCLinux 的源码,希望能够回答你的问题,其实也是
我自己一直想弄明白的。

1. 最终生成的 /image/romfs.img 是通过 genromfs 程序生成的。
它的命令为 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
这个 makefile 在 vendors 目录下可以找到,例如 vendors/Atmel/AT91
这个 img 文件的来源就是 uClinus-dist/romfs 这个目录及其下所有文件。

2. 你所指的 user 目录应该是 uClinux-dist/user ,它下面的程序是在
make menuconfig 中选择了 Customize Vendor/User Setting 后,
将会添加编译进来的各种应用程序,例如 mount, route, fdisk 等等。
这些代码被编译之后的可执行文件会通过一个 romfs-inst.sh 的脚本程序,
被 copy 到 /uClinux-dist/romfs 目录下的各个相关部分。
这里 romfs 中的目录结构以及内容都是通过在 verdors 目录下面的 makefile
定义的,并且通过 romfs-inst.sh 脚本 copy 相关程序到 romfs 目录下。

例如:在 vendors/Atmel/AT91/Makefile 中就定义了 romfs 应该具有的 dirs
ROMFS_DIRS = bin dev etc home lib mnt proc usr var
除此之外,还有在 uClinux-dist/lib 和 uClinux-dist/user 下面的东东
都会被添加到 uClinux-dist/romfs 的目录树中。

3. 所以想要添加自己的 hello 程序, 标准的做法就是 walimis 说的上面的那篇文档。
也就是把你自己的应用加入到 uClinux-dist/user 并修改 makefile 。
但这样做我个人觉得有点麻烦,一个取巧的办法就是直接在 romfs/user 下 面做,
这样 make romfs 的时候就会自动添加进入 romfs.img ,原因见 1 的说 明。
不过这个办法也有点不足,就是 make clean 的时候 romfs/* 都会被 rm 掉。

建议看一下 uClinux-dist/Makefile
uClinux-dist/vendors/Atmel/AT91/Makefile
uClinux-dist/lib/Makefile
uClinux-dist/user/Makefile
里面和 romfs 相关的部分,就比较清楚了。 :)


Q:
串口输出:long * paddr = (long*)0xfffd001c,*paddr = ch; //ucos-ii printf
是不是就这样某个数就被自动通过串口发出去了?硬件会自动干那么多事情 吗?
A: 发送是这样的。

Q:
uclinux在skyeye 下的输入是怎么被模拟输入at91的,是不是有个模拟的 串口传输过程在里面?
A:
uclinux通过uart中断(2号中断)实现输入的。你可以用skyeye调试 找到中断处理程序。也可看ucosii4skyeye中的sample ucos_serial


Q:
我如果想做一个网络驱动,在skyeye下怎样去监视连接和数据包的发送呢?
A:
可host上的tcpdump, 或者直接在uclinux中的driver上设断点看和 print。

Q:
我观察linux-2.4.x/linux有28M,而当uclinux启动过程中显示只有4M内 存,code8百多k,加上data等共1M多
这两者有什么联系没?
如果想重新编译uclinux、ucosii是不是必须到纯linux下?
A:
24M主要是调试信息。 目前ucosii可在cygwin下编译。其他要在 linux下编译。


Q:
我不太清楚您所提到的ARMulator和ADS1.2中使用的ARMulator是不是 同一个。在ADS1.2中也可以进行软件仿真,包括 Timer、MMU、PU、LCD、Interrup、Keyboard、Screen等等,甚至你可以利用 它提供的一些函数编写自己的仿真环境。不知道Skyeye和它相比,有那些优点吗?难道只是平台不一样吗?
A:
ADS的armulator是一个功能强大的仿真软件,不过我没有 试过是否可以在它上面执行uclinux或ucos
我提到的armulator是基于GDB的一个仿真软件,可执行uclinux。
skyeye基于armulator和GDB,可以执行ucos和uclinux,目前正在进行网络仿 真的实现,这样在skyeye上执行的ucos和uclinux就可以与外界进行网络互联 了。
至于二者的优缺点,我觉得不太好比较,它们的不同可能就像windows和 linux之间的不同一样。
一个是商业软件,
一个是自由软件。

A(from liming):
我觉得我们做这个事情的目的主要是两方面的,一个是通 过在仿真环境下调试OS的内核,学习OS的组织,数据结构,调度机制等等, 这是一方面,在ADS中其实也可以做到。 另一个方面,通过调试和修改这个 具有源代码的仿真器 SkyEye, 也可以学习硬件的工作原理,比如 ARM 的体 系结构,寄存器,流水线等等,现在我们做网络仿真,同样又会需要了解网 卡的工作原理,这些原理性的东西如果看到了实实在在的代码实现,会是另 一种感觉。
就比如原来对 sp_irq, sp_svc 不是很明白, 但是在调试过程中,发现 cpu mode 切换之后,sp 就会变得不一样,然后再去看 SkyEye 的代码,发现它 会在mode变化之后,使用另一个变量来表示 sp,联系 ARM 的体系结构,就 会很容易明白,而且我觉得读代码的工作比读课本有趣的多。


Q:
小弟在执行skyeye + uclinux时,每当输入命令ifconfig eth0 10.0.0.2 时skyeye就会退出,然后整个终端死掉(不更新),只能盲输入exit退出。
我已经建立了本机的/dev/net目录和下面的tun节点,系统启动时加载了tun.o模块,uclinux启动时显示已经找到网络设备eth0,但是还是有这个毛病。
请各位大虾指点.
我用skyeye和uclinux的binary版本for redhat7.2 执行,提示我没有加入vnet.o模块或/dev/net下没有vnet节点,让我看README。
可是我在README中看到需要的是tun.o模块和/dev/net/tun节点,这些我都已经有了。
vnet和tun是什么关系,望老大告知。

A:
vnet.o是我写的一个模拟hub的驱动程序.
tun.o是linux内核带的一个模拟网络点到点的虚拟网络设备.

目前用tun.o比较可靠一点.

1 创建设备
mknod /dev/net/tun c 10 200
2 加载tun.o内核模块
insmod /lib/modules/2.4.x/kernel/drivers/net/tun.o

3. 如果你用的是skyeye0.2.6
在你要执行skyeye的当前目录下,修改 skeye.config文件内容
net: state=on, mac=0:4:3:2:1:f, ethmod=vnet, hostip=10.0.0.1

net: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1

然后执行uclinux看看
发表于 2004-9-21 18:05:13 | 显示全部楼层
我键入配置命令之后,就是./configure.....,还是会有Undefined target command 的提示,是不是gtk库不全的问题?有谁知道吗?
回复

使用道具 举报

 楼主| 发表于 2004-9-23 22:36:41 | 显示全部楼层
请告诉我你配置和安装运行skyeye的详细过程和显示信息。
回复

使用道具 举报

发表于 2004-10-10 19:29:48 | 显示全部楼层
我下载了VNET,按照说明make vnet.o的时候:
.........
.........
.........若干行警告
vnet.c:1452: warning: `vnet_hub_grabnuts' defined but not used
vnet.c:1509: warning: `vnet_isbridged' defined but not used
vnet.c:1525: warning: `vnet_boltschanged' defined but not used
vnet.c:1532: warning: `vnet_nut_free' defined but not used
make: *** [vnet.o] Error 1

现在将 skyeye.conf 中的ethnod=vnet,改为tun后,就没问题了,请问以后也不需要vnet了吗?
回复

使用道具 举报

发表于 2004-11-26 14:01:50 | 显示全部楼层
我正在看skyeye的源码,其中有一处不知是否有问题,请解答:
  当执行load命令时,首先调用gdbsim_load();它又调用sim_load_file(),此函处最后调用sim_write();而sim_write()调用了ARMul_WriteByte(),后者又调用PutByte();最后PutByte()调用mmu.c中的mmu_write_byte()。
而mmu_write_byte()会根据不同的机器对MMU的配置来决定执行什么样的写操作。
!令我疑惑的是:如果配置文件选择的arm7tdmi和at91,且这是一个没有MMU/cache的,可是对这种情况调用的mmu_write_byte所代表的函数我没有找到。
我想问一下,如果没有MMU/cache的情况下load命令是怎样找到实际写操作函数的,它在哪里?
回复

使用道具 举报

发表于 2004-11-26 20:14:00 | 显示全部楼层
上面的问题,我想是使用arm7100的函数吧。

还有一个问题,上面的调用中,当进行到sim_load()时,它在调用完sim_load_file()后,执行PC的赋值工作。其代码如下:
if (prog_bfd == NULL)
    return SIM_RC_FAIL;
   /* Check if there is a bootrom */
  if ((abfd != NULL) && (state->mem.rom[0] == NULL)) {
    ARMul_SetPC (state, bfd_get_start_address (prog_bfd));
  } else {
    /* Run the bootrom at zero */
    ARMul_SetPC (state, 0);
  }
  if (abfd == NULL)
    bfd_close (prog_bfd);
因为只要skyeye.conf设置了memery bank,rom[0]就不会为NULL,即只有在没有设置memery bank时才会PC值才会按prog_bfd取,而只要设置了memery bank,rom[0]就绝不会空!这时PC值就取0。
那么当没有memery bank时,PC按prog_bfd取值,PC指向的地址空间是什么意思?
当设置了memery bank时,PC取0,但是这时PC指向的地址好象是不一定有指令吧?因为用load命令装入的代码不一定要装入片内存储器呀!
回复

使用道具 举报

发表于 2004-12-10 11:58:09 | 显示全部楼层
请使用skyeye的大侠具体解释一下skyeye.conf的内容好吗




我的skyeye.conf内容如下:
第1)行和第4)行是cpu核和cpu类型。这里就有一个问题,我在uclinux的时候选用的是GDB/ARMULATOR,这里使用at91,为什么还能用?
第6)到第13)行是7个内存段的定义,大侠能帮忙详细解释一下每行具体指向哪一段内存吗?ROM?RAM?为什么需要7行定义,而有的skyeye.conf里面只有两行?这个是主要不明白的地方,多谢多谢!

1)#skyeye config file sample
2)cpu: arm7tdmi
3)
4)mach: at91
5)
6)mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
7)mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=M, type=RW, addr=0x01400000, size=0x00400000,file=./boot.rom
9)mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
10)mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
11)mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
12)mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
13)net: state=on, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1
回复

使用道具 举报

发表于 2004-12-16 20:04:42 | 显示全部楼层
偶使用./configure --target=arm-elf --prefix=/usr/local 时出错怎么办?屏幕显示有错误。后面再MAKE也没成功?
回复

使用道具 举报

 楼主| 发表于 2004-12-17 09:01:24 | 显示全部楼层
这类问题可另外开一个新贴,然后把configure的输出写出来。我再看看。
回复

使用道具 举报

发表于 2004-12-17 19:18:00 | 显示全部楼层
谢斑斑,原因偶找到了,是没安GTK,不过偶有新问题了,已经发贴求助了~
回复

使用道具 举报

发表于 2004-12-17 21:46:35 | 显示全部楼层
大家好,我想请问一下romfs.img的作用
我从http://159.226.40.150/lumit/resources/uClinux/skyeye-demo/skyeye-demo- 0.0.1.rar下载了一个demo,发现其中并没有romfs.img,但是照样能够运行,并且照样有文件系统/bin /sbin /tmp等目录的存在
但是当我在自己编译的uclinux中不是用romfs.img时,就会报错
Kernel panic: VFS: Unable to mount root fs on 1f:00
请问这是什么原因?romfs.img的具体作用是什么?什么时候可以不用这个文件?什么时候一定得有?
多谢多谢!
回复

使用道具 举报

发表于 2004-12-26 21:27:32 | 显示全部楼层
我装skyeye装了好几次,都没有装成功,先是./configure时就出错.今天我在这里看贴时找到答案,但是现在却在make命令时出错了.大虾们帮我看看是怎么回事吧,下面是错误的提示:

elf32-target.h:699: initializer element is not constant
elf32-target.h:699: (near initialization for `bfd_elf32_littlearm_vec._bfd_write_contents')
elf32-target.h:724: warning: missing initializer
elf32-target.h:724: warning: (near initialization for `bfd_elf32_littlearm_vec.section_flags')
make[3]: *** [elfarm-nabi.lo] Error 1
make[3]: Leaving directory `/user/skyeye_cdrom/SkyEye/skyeye/skyeye/bfd'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/user/skyeye_cdrom/SkyEye/skyeye/skyeye/bfd'
make[1]: *** [all-recursive-am] Error 2
make[1]: Leaving directory `/user/skyeye_cdrom/SkyEye/skyeye/skyeye/bfd'
make: *** [all-bfd] Error 2
回复

使用道具 举报

发表于 2005-6-4 19:36:07 | 显示全部楼层
是不是只有SkyEye的开发人员才能用CVS进入项目? 我想用CVS来查看SkyEye的最新进展,可不知如何进入??
回复

使用道具 举报

 楼主| 发表于 2005-6-13 17:14:53 | 显示全部楼层
gro.clinux.org 可以通过web CVS看到源码.
回复

使用道具 举报

发表于 2005-6-23 12:11:31 | 显示全部楼层
辛苦了,斑竹!   :D
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-21 23:14 , Processed in 0.247117 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表