QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eCos linux goAhead
搜索
发新帖

43

主题

2

听众

503

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2013-4-14
威望
0
金钱
423
贡献
0
注册时间
2012-5-1
积分
503
帖子
75
主题
43
精华
1
UID
2
发表于 4 天前 |显示全部楼层
更多
本帖最后由 reille 于 2013-4-10 15:18 编辑

  1. RedBoot_init
  2. RedBoot_init(_do_flash_init, RedBoot_INIT_FIRST);
  3. RedBoot_init(load_flash_config, RedBoot_INIT_FIRST);
  4. RedBoot_init(ide_init, RedBoot_INIT_FIRST);
  5. RedBoot_init(_zlib_init, RedBoot_INIT_FIRST);
  6. RedBoot_init(net_init, RedBoot_INIT_LAST);

  7. void
  8. net_init(void)
  9. {
  10.     ......
  11. // Initialize all network devices
  12.     for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) {
  13.         if (t->init(t)) {       // 我的ep9312开发板对应ep93xx_init[luther.gliethttp]
  14.             t->status = CYG_NETDEVTAB_STATUS_AVAIL;
  15.         } else {
  16.             // What to do if device init fails?
  17.             t->status = 0;  // Device not [currently] available
  18.         }
  19.     }
  20. }
  21. CYG_HAL_TABLE_BEGIN( __NETDEVTAB__, netdev );
  22. #define NETDEVTAB_ENTRY(_l,_name,_init,_instance)  \
  23. static bool _init(struct cyg_netdevtab_entry *tab);                  \
  24. cyg_netdevtab_entry_t _l CYG_HAL_TABLE_ENTRY(netdev) = {             \
  25.    _name,                                                            \
  26.    _init,                                                            \
  27.    _instance                                                         \
  28. };
  29. ecos-2.0/packages/devs/eth/arm/ep93xx/v2_0/src/if_ep93xx.c|166| NETDEVTAB_ENTRY(ep93xx_netdev,
  30. NETDEVTAB_ENTRY(ep93xx_netdev,
  31.                 "ep93xx",
  32.                 ep93xx_init,
  33.                 &ep93xx_sc);

  34. ecos-2.0/packages/devs/eth/arm/ep93xx/v2_0/src/if_ep93xx.c|74| ep93xx_esa,
  35. ecos-2.0/packages/devs/eth/arm/ep93xx/v2_0/src/if_ep93xx.c|82| "ep93xx_esa",
  36. ecos-2.0/packages/redboot/v2_0/src/flash.c|1913| diag_printf("Request for config value '%s' - wrong type\n", key);
复制代码

后来在启动时发现一个错误提示:

+ep93xx_init
... Scan for PHY units
PHY ID[1] = 15/f441, stat = 782d, control = 3000
After scan, phys_found 00000002, phys_good 00000002
Request for config value 'ep93xx_esa' - wrong type      // 从这里看未找到ep93xx_esa定义
EP93xx - no EEPROM, static ESA, or RedBoot config option.

从代码中查看到ep93xx_esa定义,因为flash_get_config向config中追加内容的函数,只在2个地方对我们用户提供了接口,
一个是alias命令,另一个就是fconfig -i命令中config_init函数,
config_init函数会将__CONFIG_options_TAB_END__中的所有built-in的config追加到config中,

CYG_HAL_TABLE_BEGIN( __CONFIG_options_TAB__, RedBoot_config_options);
  1. #define RedBoot_config_option(_t_,_n_,_e_,_ie_,_type_,_dflt_)        \
  2. struct config_option _config_option_##_n_                               \
  3. CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_config_options,_n_) =             \
  4.    {#_n_,_t_,_e_,_ie_,_type_,(unsigned long)_dflt_};

  5. ecos-2.0/packages/devs/eth/arm/ep93xx/v2_0/src/if_ep93xx.c
  6. RedBoot_config_option("Set eth0 network hardware address [MAC]",
  7.                       ep93xx_esa,
  8.                       ALWAYS_ENABLED,
  9.                       true,
  10.                       CONFIG_BOOL,
  11.                       false
  12.     );
  13. RedBoot_config_option("eth0 network hardware address [MAC]",
  14.                       ep93xx_esa_data,
  15.                       "ep93xx_esa",
  16.                       true,
  17.                       CONFIG_ESA,
  18.                       0
  19.     );
复制代码
另外还有如下文件定义了RedBoot_config_option函数:
packages/redboot/v2_0/src/flash.c
packages/redboot/v2_0/src/net/net_io.c

我们可以使用:
RedBoot> fconfig ep93xx_esa
来查看系统中定义了的config key值。

所以我们来重新初始化一次

RedBoot> fconfig -i
Initialize non-volatile configuration - continue (y/n)? y
Run script at boot: true
Boot script:
Enter script, terminate with empty line
>> fis load ramdisk
>> fis load zImage
>> exec -r 0x800000 -s 0x600000
>>
Boot script timeout (1000ms resolution): 3
Use BOOTP for network configuration: false
Gateway IP address: 192.168.1.1
Local IP address: 192.168.1.150
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.1.101

现在看到下面2个配置都出现了,这下正常了,呵呵[luther.gliethttp]
RedBoot> fconfig ep93xx_esa
ep93xx_esa: true
RedBoot> fconfig ep93xx_esa_data
ep93xx_esa_data: 0x00:0x00:0x00:0x00:0x30:0x3A
RedBoot>

好了现在,eth需要的2个变量都已经有了,来ping一个试试了[luther.gliethttp]
RedBoot> ping -h 192.168.1.1 -v
Network PING - from 192.168.1.150 to 192.168.1.1
seq: 1, time: 1 (ticks)
seq: 2, time: 1 (ticks)
seq: 3, time: 1 (ticks)
seq: 4, time: 1 (ticks)
seq: 5, time: 1 (ticks)
seq: 6, time: 1 (ticks)
seq: 7, time: 1 (ticks)
seq: 8, time: 1 (ticks)
seq: 9, time: 1 (ticks)
seq: 10, time: 1 (ticks)
PING - received 10 of 10 expected

本文转自: http://blog.chinaunix.net/uid-20564848-id-73896.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

无觅相关文章插件

申请友链|手机版|关于本站|eCos技术网 ( 粤ICP备12094833号-1 )   

GMT+8, 2013-4-14 13:50 , Processed in 0.068463 second(s), 32 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部