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()函数,进行全局的初始化;