Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58647
  • 博文数量: 11
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 15:19
文章分类
文章存档

2017年(2)

2011年(1)

2010年(1)

2009年(7)

我的朋友

分类:

2009-01-12 14:07:52

Redboot是启起来了,可是却只有一些内存操作的命令,基本上还没有什么“可玩”的。想想还是应该先加上一些驱动,这也是eCos在移植方面比较重要的一个环节啊。首先从网卡驱动开始吧,阳初的开发板上带的是一块cs8900的网卡芯片,而eCos的驱动包里面就有cs8900的驱动,所以这些移植工作应该是比较简单的。
在eCos的模板里找了一下,发现aeed2000的模板是带有网卡驱动的,于是照猫画虎,将ecos.db里面的LEO2410的模板(也就是我用于移植的SMDK2410模板)下增加以下几条(蓝色显示部分):
 

target leo2410 {
        alias { "Samsung ARM9/LEO2410 development board" leo2410 s3c2410x }
        packages { CYGPKG_HAL_ARM
                   CYGPKG_HAL_ARM_ARM9
                   CYGPKG_HAL_ARM_ARM9_LEO2410
                   CYGPKG_IO_SERIAL_ARM_LEO2410
                   CYGPKG_IO_ETH_DRIVERS
                   CYGPKG_DEVS_ETH_CL_CS8900A
                   CYGPKG_DEVS_ETH_ARM_LEO2410
                     
        }
        description "
        The LEO2410 target provides the packages needed to run eCos on Samsung S3c2410x (ARM920T) based development boards (LEO2410)."

}

然后在\devs\eth\arm\leo2410\current\目录下建立cdl、include目录,将相应的文件拷贝到这些目录下,主要涉及的是leo2410_eth_drivers.cdl和devs_eth_arm_leo2410.inl两个文件。将两个文件中的模板相关部分进行一些修改,然后编译、下载...很遗憾,没有找到cs8900!

仔细看了一下devs_eth_arm_leo2410.inl文件,才发现cs8900设置的基地址有问题。aeed2000模板的基地址设置的是0x10000000,而阳初的开发板cs8900是接在bank3上的,所以基地址应该是0x18000000。另外,和SMDK2410一样,采用A24脚作为cs8900工作模式的选择输入,所以当采用io模式时,基地址应该为0x19000000。修改后再编译、下载...还是无法找到...?????

又到web上找找,有人提到可能是bank3的设置有问题,因此按照他的说法将memcfg.h中的B3_BWSCON的设置改为(DW16|WAIT|UBLB),再编译、下载...仍然无法找到cs8900...真是郁闷啊!

在网上四处寻找、反复调试仍然无法解决!不过一直有一个问题引起我的注意,那就是在加入了cs8900的驱动后,在启动时总会出现一串乱码,然后才启动成功。这串乱码实际上应该是在发生异常时Redboot输出的信息,形如:$T050f:cc650100;0d:f8340200;#86。这个异常是什么引起的呢,我一直感觉还是访问cs8900的基址时引起的,难道基址仍然有问题吗?查阅了器件资料、网上的论坛以及电路图,这个基址应该是对的啊...???又是在一瞬间,突然想起了mmu,在Redboot启动时已经启动了mmu,而在mmu的映射表里面却还没有添加cs8900基址的映射啊...赶紧在hal_mmu_init函数里面加上下面这句代码,将cs8900的基址0x19000000映射为0x19000000。

X_ARM_MMU_SECTION(0x190, 0x190, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW);

重新编译、下载...总算找到cs8900了,Redboot里面也出现了ping、ip_address两个命令了。ping一下...不通...继续郁闷...

查看一下启动时的信息,发现cs8900带有ROM,但是从ROM读出的MAC地址却是FF:FF:FF:FF:FF:FF,这样当然是无法ping通的。相比应该是生产商并没有购买MAC地址,所以就没有设置了。不过没有关系,将leo2410_eth_drivers.cdl中的option进行修改就可以解决这个问题:

cdl_component CYGSEM_DEVS_ETH_ARM_LEO2410_ETH0_SET_ESA {
    display "Set the ethernet station address"
    flavor bool
    calculated 1
    description "Enabling this option will allow the ethernet
         station address to be forced to the value set by the
         configuration. This may be required if the hardware does
         not include a serial EEPROM for the ESA."

            
         cdl_option CYGDAT_DEVS_ETH_ARM_LEO2410_ETH0_ESA {
            display "The ethernet station address"
            flavor data
            default_value {"{0x08, 0x88, 0x12, 0x34, 0x56, 0x78}"}
            description "The ethernet station address"
            }
        }

即将其中的calculated选项的值改成1,即可设置cs8900的MAC地址了。修改后,编译、下载...终于通了,还可以直接采用tftp下载image,或者使用telnet作为终端来操作Redboot了。

 

阅读(1604) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

analog20062010-03-26 10:04:21

我的问题解决了。。在xxx_misc.c中修改一下port_init()和plf_hardware_init()中关于中断的设置,还有if_dm9000.c中的deliver中控制中断资源就搞定了。。想起你的mmu_init我就特想感谢你。。。。

analog20062010-03-24 09:01:55

帅哥。。我做的是DM9000的和s3c2440的移植。。redboot弄好了。。可是在应用程序中使用网络就不行。。可否指教指教。。谢谢。。

analog20062010-03-24 08:59:34

多谢你的虚拟向量表的提示。。谢谢。。十分感谢

fandaydai2010-01-02 15:27:06

谢谢啊 我转载了 呵呵

chinaunix网友2009-06-23 10:37:31

建立了一个QQ群,讨论eCos的,欢迎广大eCos爱好者加入! QQ群:62132911 google网上论坛:http://groups.google.com/group/ecos-chinese-user-group?hl=zh-CN