CopyRight owned by the original author.--(www.MegaEntry.com)
所以比较稳定的最新软件,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 下载。 -----------------------------------------CopyRight owned by the original author.--(www.MegaEntry.com)
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 看看.位于:MegaEntry - Social networking and discussion site!
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 然后再执行: makeMegaEntry - Social networking and discussion site!
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步进就可以了。MegaEntry - Social networking and discussion site!
这个办法比对地址设断点要方便一些,供参考。 Q: 如何在uclinux中增加自己的用户程序? A:(from 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;CopyRight owned by the original author.--(www.MegaEntry.com)
} 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 就可以了。CopyRight owned by the original author.--(www.MegaEntry.com)
另外, 需要把上面相关的目录改为你自己主机上的目录。 试试? 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 不知道是什么原因,我会再试一试的。CopyRight owned by the original author.--(www.MegaEntry.com)
如果按照陈渝所说的话,“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 这个目录及其下所有文件。MegaEntry - Social networking and discussion site!
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 下 面做,MegaEntry - Social networking and discussion site!
这样 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:CopyRight owned by the original author.--(www.MegaEntry.com)
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下编译。CopyRight owned by the original author.--(www.MegaEntry.com)
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 的体系结构,就会很容易明白,而且我觉得读代码的工作比读课本有趣的多。CopyRight owned by the original author.--(www.MegaEntry.com)
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 创建设备MegaEntry - Social networking and discussion site!
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看看