手上的開發板網絡默認是不通的,但是通過閱讀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()函數,進行全局的初始化;