TQ210的自带网卡是DM9000AE,u-boot已经自带了 DM9000A 的驱动,我们需要做的就是讲该驱动添加到我们的设备当中。
一、网卡启动分析
在board_init_r调用的init_sequence_r函数数组中找到网卡net信息
这里看出网卡信息是用宏CONFIG_CMD_NET来管理是否添加到uboot,所以需要在tq210.h中定义宏
接着看eth_initialize(),发现这个函数在net/eth_legacy.c中,其中主要执行的初始化为board_eth_init函数,发现在这个函数在tq210.c中
因为我们的网卡为DM9000,在DM9000的驱动找到相似的初始化,将其替换为DM9000的初始化。
二、添加DM9000驱动
由上面知道我们的网卡是DM9000,所以需要我们把其驱动添加到编译程序中,查看drivers/net/Makefile
网卡由宏CONFIG_DRIVER_DM9000来控制,所以在include/configs/tq210.h中添加宏:
u-boot-2016.09$ vim include/configs/tq210.h
将tq210.c中board_init的smc9115_pre_init改为dm9000的初始化:
u-boot-2016.09$ vim board/samsung/tq210/tq210.c
同时添加dm9000的硬件初始化:
编译,发现CONFIG_DM9000_BASE、DM9000_IO、DM9000_IO没有定义,在tq210.c中增加宏:
再次编译,产生u-boot.bin。
烧录、启动开发板,发现能够读取到dm9000网卡,到这里网卡移植完成。
三、测试网卡
我们需要添加一些测试命令来检查网络是否畅通,如ping、tftp。首先进入include/config_cmd_all.h我们的uboot支持哪些命令
另外在smdkv210.h中包含了头文件config_cmd_default.h,里面定义了一些命令,这是u-boot默认 配置的命令,我们看下里面有没有我们需要配置的,如果没有,我们就需要自己配置,发现里面没有PING命令,我们就在include/configs/tq210.h中添加PING
#define CONFIG_CMD_PING
在uboot中设置ip等信息,在include/configs/tq210.h添加宏:
IPADDR为开发板IP
NETWORK为开发板子网掩码
SERVERIP为我们配置了tftp的电脑IP,这里是我的办公电脑IP
ETHADDR为开发板MAC地址
再次编译,生成u-boot.bin,烧录到SD卡,启动开发板,进入uboot,使用ping命令来PING自己的电脑,ping通,则说明网卡移植完成,否则在仔细debug,查找问题。