毛克的BLOG

逢山开道,遇水搭桥!

用户操作
[即时聊天] [发私信] [加为好友]
毛克ID:maokor
43823次访问,排名2800,好友0人,关注者1人。
maokor的文章
原创 37 篇
翻译 0 篇
转载 2 篇
评论 24 篇
maokor的公告
有一种植物,叫向日葵。像人的笑脸,会寻找太阳的方向,生命力好强。无论太阳从那里升起,她都会以一张可爱的笑脸迎向那充满生机的方向。(向日葵——毛克) 每天进步一点点! 我们可能无法掌握风向, 但我们至少可以调整风帆; 我们可能无法掌握事情, 但我们至少可以调整心情!
最近评论
辉(QQ:378397769):
谭航:我认真的阅读了你的网络驱动移植和jaffs移植两篇杰作,本人很喜欢你的严整的风格,如果你不说你是初学linux的话,没人 相信你真的是初学的家伙!!
可以240576670联系,我很喜欢嵌入式和 linux
ifq:请问下你做这些程序的时候 调试都不用GDBSERVER的么?
那你是怎么调试的?
是用SIM么?
jht:不错不错
HeBQ:看了你的嵌入式监控系统的实现,觉得写得非常好,对许多没有做过嵌入式的开发人员是一个很大的帮助。你的监控系统是只负责实时观察,还是要同时负责把视频资料存盘以便检查。如果存储视频资料那需要的空间就大了,你是怎么解决的?谢谢!
文章分类
收藏
    相册
    Linux
    中国Linux公社
    国外站点
    arm.linux.org.uk
    embedded.com
    embedded-directory.com
    www.gnu.org/
    技术综合
    CSDN
    嵌入式
    21IC
    ARM开发网
    嵌入式研究网
    微码科技
    友情链接
    peterxin
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 没有硬件条件下来进行嵌入式系统的开发 收藏

    新一篇: 嵌入式研究-几种典型 Linux 内核配置方案  | 旧一篇: 自己动手打造嵌入式Linux软硬件开发环境

    作者:bobdos 时间 2004-8-24 14:55:49 序号:684
    学习使用SkyEye仿真

    SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。

    以下操作均在Fedora Core 1.0里通过。

    文档摘要:
    1、什么是SkyEye?
    2、SkyEye可以做什么事情?
    3、安装SkyEye
    4、安装arm-elf交叉编译器
    5、测试你的arm-elf-gcc编译器
    6、执行你的hello程序
    7、编译并运行uClinux-dist-20030909.tar.gz
    8、加入网络功能
    9、安装完成SkyEye后,下一步将做什么?


    1、什么是SkyEye?

    SkyEye是开源软件的一个项目,SkyEye的目标是在Linux和Windows操作系统里提供一个完全的仿真环境。SkyEye仿真环境相当于一个嵌入式计算机系统,你可以在SkyEye里运行一些嵌入式Linux操作系统,如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分析和调试它们的源代码。

    如果你想知道关于SkyEye和嵌入式系统更详细的信息,请访问下面的站点:
    www.SkyEye.org
    http://www.skyeye.org/index_cn.html

    通过SkyEye能仿真下面的硬件:
    CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScale
    CPU: Atmel AT91/X40, Cirrus CIRRUS LOGIC EP7312, Intel SA1100/SA1110, Intel XScale PXA 250/255, CS89712, samsung 4510B, samsung 44B0(还不全)
    内存: RAM, ROM, Flash
    周边设备: Timer, UART, ne2k网络芯片, LCD, 触摸屏等

    目前能在SkyEye上运行下面的操作系统和系统软件:
    uC/OSII-2.5.x(支持网络)
    uClinux(基于Linux2.4.x内核, 支持网络)
    ARM Linux 2.4.x/2.6.x
    lwIP on uC/OSII
    基于uC/OSII, uClinux, ARM Linux的应用程序


    2.SkyEye可以做什么事情?
    1. 通过SkyEye可以帮助促进嵌入式系统的学习,在不需要额外硬件的情况下学习和分析uclinux操作系统和其它嵌入式操作系统,如ucosII等。
    2. SkyEye可用于嵌入式系统的教学。
    3. 希望通过skyeye促进操作系统的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。
    4. 可以基于SkyEye进行仿真特定硬件模块的研究。
    5. SkyEye可以作为嵌入式集成开发环境开发嵌入式系统(当然需要对SkyEye做大量的工作)。
    注:引自陈渝《SkyEye Project FAQ》


    3、安装SkyEye

    到http://gro.clinux.org/projects/skyeye/下载skyeye-0.7.0.tar.bz2包:

    tar jxvf skyeye-v0.7.0.tar.bz2

    进入解压后的skyeye目录,如果SkyEye的版本低于0.6.0,则运行下面的命令:

    ./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest

    如果SkyEye的版本高于0.6.0,则运行下面的命令:

    ./configure --target=arm-elf --prefix=/usr/local

    接下来执行:

    make
    make install

    安装完成后执行skyeye

    注意:
    a.如果你使用的是Mandrake Linux发行版,那么你在编译SkyEye时遇到错误,并且错误与readline, ncurse, termcap等有关,你可以试试下面的方法:

    ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h

    接着再make和make install看能否成功!
    b.如果你的Linux发行版是Debian Linux,那么不要使用gcc 2.95或是gcc 3.0,请使用gcc 3.2+
    c.gcc的版本要在2.96或以上
    d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在Linux系统里安装GTK软件。


    4、安装arm-elf交叉编译器

    下载arm-elf-tools-20030314.sh
    ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm
    或到
    ftp://166.111.8.229/OS/Embeded

    执行:
    chmod a+x arm-elf-tools-20030314.sh
    然后:
    ./arm-elf-tools-20030314.sh

    ls /usr/local/bin/

    你应能看到以arm-elf开头的可执行文件,其中arm-elf-gcc就是用来编译你目标平台的编译器的,当然还有一些小工具,后面将一一讲来。


    5、测试你的arm-elf-gcc编译器

    先写一个小程序hello.c


    PHP源码:
    --------------------------------------------------------------------------------

    #include <stdio.h>

    int main(void)
    {
    int i;

    for(i = 0; i < 6; i++){

    printf("i = %d ",i);

    printf("Hello, embedded linux!\n");
    }

    return 0;
    }

    --------------------------------------------------------------------------------


    然后执行:

    arm-elf-gcc -Wl,-elf2flt -o hello hello.c

    -elf2flt参数是将elf文件格式转为flat文件格式,这个工具是在你安装交叉编译器产生的。

    或者你可以写个Makefile文件,执行:

    make

    这里是我的Makefile文件,仅供参考:

    PHP源码:
    --------------------------------------------------------------------------------

    # begin

    CC = arm-elf-gcc

    CFLAGS = -D__PIC__ -fpic -msingle-pic-base -O2 -pipe -Wall -g
    LDFLAGS = -Wl,-elf2flt

    LIBS =
    OBJS = hello.o

    all: hello

    hello: $(OBJS)
    $(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) $(LIBS)

    clean:
    rm -rf *.o *.elf *.gdb hello

    # end

    --------------------------------------------------------------------------------


    如果编译通过,就会产生hello可执行文件。用下面的命令:

    file hello

    你会发现,它是BFLT(binary FLAT),你目标平台所支持的文件格式。


    6、执行你的hello程序

    这里,我们将借助genromfs这个小工具来完成测试,这个工具就是你在安装交叉编译器时产生的,你可以直接使用它。

    到http://gro.clinux.org/projects/skye...0.4.tar.bz2包:

    tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2

    cd testsuits/at91/uclinux2(当然你还可以用别的)

    mkdir romfs(建一个目录,后面用)

    mount -o loop boot.rom /mnt/xxx

    cp -r /mnt/xxx/* romfs

    另外,把你编译好的可执行程序拷贝到/romfs/bin目录里,这里就是hello了!

    genromfs -f boot.rom -d romfs/

    注:可以用genromf -h来获得帮助!

    OK!执行下面的命令:

    skyeye linux

    (skyeye)target sim

    (skyeye)load

    (skyeye)run

    kernel start.....

    很熟悉了吧。。。

    cd /bin

    hello

    可以看到结果了吗?

    其实到了这一步,你就可以开发自己的程序了!


    7、编译并运行uClinux-dist-20030909.tar.gz

    到ftp://166.111.68.183/pub/embed/uclinux/soft/
    或到ftp://166.111.8.229/OS/Embeded/uclinux/pub/uClinux/dist下载
    uClinux-dist-20030909.tar.gz

    假设把它下载到/usr/src/目录下,然后依次执行下面的命令:

    tar zxvf uClinux-dist-20030909.tar.gz
    cd uClinux-dist/

    在图形方式下可用命令make xconfig

    在命令行方式下用命令make menuconfig

    vendor/product中选择GDB/ARMulator
    kernel版本选择2.4
    然后save and exit

    运行下面这两条命:
    make dep
    make

    此时在/usr/src/uClinux-dist/linux-2.4.x目录下会生成可执行文件linux
    在/usr/src/uClinux-dist/images/会生成romfs.img等文件

    在uClinux-dist目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:
    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000


    这个时候就可以用skyeye来调试运行kernel了,在/usr/src/uClinux-dist执行如下命令:

    skyeye linux-2.4.x/linux

    (skyeye)target sim

    (skyeye)load

    (skyeye)run

    kernel start.....

    注意:
    要在skyeye.conf所在目录下执行skyeye linux-2.4.x/linux


    8、加入网络功能
    a.用root用户进行操作。
    b.你要看你的/lib/modules/'uname -r'/kernel/drivers/net/目录里有没有tun.o
    如果没有的话你就需要编译你的linux内核来获得tun.o了。
    c.(1)运行tun设备模块:

    #insmod /lib/modules/'uname -r'/kernel/drivers/net/tun.o

    如果你没有该设备,那你就要用下面的命令来创建它:

    #mkdir /dev/net
    #mknod /dev/net/tun c 10 200

    (2)运行vnet(虚拟集线器)设备模块(这一步不是必需的):
    获取vnet的源码,然后创建设备:

    #mknod /dev/net/vnet c 10 201
    #chmod 666 /dev/net/vnet

    创建vnet.o
    #make vnet.o

    插入模块vnet.o
    #insmod vnet.o

    进入test目录,用test来测度vnet.o
    #cd test
    #make
    #./testvnet1

    d.配置skyeye.conf文件

    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
    # format: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    net: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1


    下面将对上面的一些参数作下说明:
    state=on/off意思是仿真的NIC(网络接口板)是有线的还是无线的;
    mac=仿真适配器的MAC地址;
    ethmod=tuntap/vnet在主机环境里使用的虚拟设备;
    hostip=意思是主机环境与keyeye交互用的IP
    格式: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd

    For example:
    #set nic info state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    net: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1

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

    注意:
    如果你想在同一时刻运行两个或更多的skyeye,那么请为每一个skyeye使用不同的skyeye.conf

    e.运行skyeye linux-2.4.x/linux

    9、安装完成SkyEye后,下一步将做什么?

    1、对于嵌入式操作系统的初学者和入门者和入门的学生而言,他们可以先看一些有关操作系统和嵌入式操作系统方面的教材和书籍,如与uC/OS、Minix、uClinux、Linux相关的书籍等。然后可以在Skyeye上开发一些简单的应用程序例子(如进程间通信、进程优先级、死锁情况、网络应用等),对某些操作系统功能(如进程调度、内存管理、网络子系统、文件子系统等)进行简单的修改和扩展,并通过Skyeye进行运行和调试,看看会发生什么情况。

    2、对于有一定经验的软件工程师而言,在SkyEye上完成一定的应用系统原型开发是值得一做的事情。比如移植或开发一个文件子系统或网络子系统到一个特定的操作系统中,相信比在一个真实的开发板上开发要容易一些。在Skyeye上进行一些操作系统的移植和开发(如移植RTLinux、RTAI等其它操作系统到Skyeye上)也是很有挑战性的工作。

    3、对于硬件工程师而言,对Skyeye进行扩充,设计新的硬件仿真(如USB、IDE硬盘等)使得Skyeye的硬件仿真功能更加强大,支持更多功能的软件,是很有意义的事情。

    参考:
    SkyEye项目站点里的一篇中文文档;
    陈渝《SkyEye Project FAQ》;
    skyeye-0.7.0中的README文档。

    后记:
    为了让大家能快速上手,进行实际的开发工作,我赶凑了一篇文档,很粗糙。但我坚信随着更多的有经验的人的加入;随着我们自己水平的提高,一定会出现更多、更好的文章来。就让我们快点行动起来吧!

    最后,我再次建议大家看一下《嵌入式Linux技术与应用》这本书。

    可以到http://www.skyeye.org/document.htm或是
    ftp://166.111.68.183/pub/embed/skyeye/document/或是
    http://www.huihoo.org/mirrors/skyeye/
    下载文档,可以获得更多有关skyeye和嵌入式Linux开发的知识和经验。

    发表于 @ 2004年11月27日 10:58:00|评论(loading...)|编辑

    新一篇: 嵌入式研究-几种典型 Linux 内核配置方案  | 旧一篇: 自己动手打造嵌入式Linux软硬件开发环境

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © maokor