u-boot-2016.05移植:(5)、支持DM9000网卡

时间:2022-06-21 02:04:46

1、在u-boot-2016.05\include\configs\smdk2440.h中修改

/*
* Hardware drivers
*/

#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

/*
* Hardware drivers
*/

#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
#endif

特别提示:CONFIG_CMD_NET在自动配置文件include/config/auto.conf中被设置为y:

CONFIG_CMD_NET=y

编译u-boot时将自动配置,所以,CONFIG_CMD_NET是宏定义了的。
2、设置MAC地址:
在u-boot-2016.05\include\configs\smdk2440.h中添加

#define CONFIG_ETHADDR      00:0c:29:4d:e4:f4

在u-boot-2016.05\include\env_default.h文件中的default_environment数组中添加:

#ifdef CONFIG_ETHADDR
"ethaddr=" __stringify(CONFIG_ETHADDR) "\0"
#endif

3、在u-boot-2016.05\board\samsung\smdk2440\smdk2440.c:board_eth_init函数中添加

#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif

然后编译并烧写就可以识别到DM9000网卡了。
4、测试:
设置ip地址,然后ping主机来验证是否真的支持了DM9000。
注意:此时还不能用save命令保存设置的参数,因为还未设置参数保存的地址,如果使用可能会破坏nand上的重要数据。
5、分析过程:

u-boot-2016.05\common\board_r:board_init_r函数中的初始化序列init_sequence_r中的:
initr_net
eth_initialize(u-boot-2016.05\net\eth_legacy.c)
board_eth_init(u-boot-2016.05\board\samsung\smdk2440\smdk2440.c)
dm9000_initialize(u-boot-2016.05\drivers\net\dm9000x.c)