kahou

导航

s5p6818开发板uboot网络开通

手上的开发板网络默认是不通的,但是通过阅读uboot源码,发现uboot源码中,是有对这个网络的初始化的实现的函数的,只不过是没有调用而已,所以,要手动调用这个函数,把板子的网络调通:

首先是遇到了这个定义:

1 static int __def_eth_init(bd_t *bis)
2 {
3     return -1;
4 }
5 int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init"))); 
6 int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
__attribute__这个东西是gnu的产物来的,是特有的语法,上述语句可以了解为:
  weak是弱定义的意思,alias是给某些东西起一个别名
  意思是如果cpu_eth_init(bd_t *bis)没有进行定义,这个函数就是实现后面这个__def_eth_init(bd_t *bis)的函数;
通过阅读源码可以知道,cpu_eth_init(bd_t *bis)可以定义,调用已经有的函数:
  
 1 int GEC6818_board_eth_init(bd_t *bis)
 2 {
 3 #if defined(CONFIG_DESIGNWARE_ETH)
 4     u32 interface;
 5     int num = 0;
 6     nxpmac_init();
 7     interface = PHY_INTERFACE_MODE_RGMII;
 8 
 9     if (designware_initialize(CONFIG_DWCGMAC_BASE, interface) >= 0)
10         num++;
11 
12     return num;
13 #endif  /* CONFIG_DESIGNWARE_ETH */
14 }

这个是对板子的eth进行初始化

1 #include <netdev.h>
2 int board_eth_init(bd_t *bis)
3 {
4     int ret = 0;
5     ret  =  GEC6818_board_eth_init(bis);
6     eth_init(bis);
7 }

这个先是进行这个函数GEC6818_board_eth_init();进行网络的登记,然后再进去eth_init()函数,进行全局的初始化;

posted on 2018-03-28 16:55  kahou  阅读(1400)  评论(1编辑  收藏  举报