uboot网卡驱动移植

定义相应的宏,使能uboot的网卡

官方的uboot默认是不使能网卡相关的代码的,既在配置头文件中CONFIG_CMD_NET默认是没有被定义的
在这里插入图片描述
要使能网卡相关代码就要在配置头文件中添加CONFIG_CMD_NET这个宏,切记还要去掉#undef CONFIG_CMD_NET这个定义
在这里插入图片描述
在这里插入图片描述

添加ping和tftp命令

ping命令在官方uboot中也没有使能,所以需要在配置头文件中添加对应的宏
在这里插入图片描述
tftp命令在官方的uboot中是默认被使能的,不依赖于其他的宏
在这里插入图片描述

移植网口初始化代码

在三星的uboot中网卡的初始化在bord_init函数中进行,所以我们将三星的网卡初始化移植到uboot官方的uboot中的bord_init函数中

三星uboot:在对于我的开发板用的是SMC911X的网卡所以,所以board_init()函数调用smsc9220_ore_init()函数初始化网卡,我们需要将smsc9220_ore_init()移植到我们的uboot中,smsc9220_ore_init函数以及于其相关的宏都在s5pc11x.c中定义。
在这里插入图片描述
在board_init()函数中调用smsc9220_ore_init()函数,并将smsc9220_ore_init()函数移植到goni.c文件中。
移植后的uboot官方的uboot:
在这里插入图片描述

注册网卡

开启网络相关的宏后,重新编译uboot并上电,板子打印如下信息
在这里插入图片描述
这两句错误在初始化网卡时eth_initialize函数中打印
在这里插入图片描述
在这里插入图片描述
eth_initialize()函数调用board_eth_init()或cpu_eth_init()函数来注册网卡设备,但官方的uboot中board_eth_init()函数是空函数,而cpu_eth_init()函数根本没有定义。所以需要将三星uboot中注册网卡的函数移植到这里
在这里插入图片描述
三星的uboot在eth_initialize()函数中通过smc911x_initialize()函数中注册网卡设备
在这里插入图片描述
smc911x_initialize()这个函数给网卡结构体的init、halt、send、recv等函数赋值,并通过eth_register()这个函数将该结构体注册到网卡设备的列表中,从而完成网卡的注册。在后面uboot使用网络相关的命令是会同过这个结构体中成员变量对网卡进行操作。
与smc911x网卡相关的函数都在smc911.c中驱动文件中(包括smc11x_initialize这个函数),这是uboot自带的驱动文件,不需要移植直接调用其中的函数就行。
在这里插入图片描述
只需要在board_eth_init()这个空函数中声明并调用smc11x_initialize函数就能完成网卡的注册了
在这里插入图片描述

### U-Boot环境下双网卡移植方法及配置 #### 1. 准备工作 为了实现U-Boot环境下的双网卡移植,首先要确认所使用的开发板及其硬件特性。对于多网卡的支持,通常需要确保U-Boot源码树中已经包含了目标CPU架构以及对应网络控制器驱动程序的相关文件[^2]。 #### 2. 配置内核选项 进入U-Boot源代码目录后,可以通过`make menuconfig`命令来打开图形化配置界面,在这里可以找到并启用多个以太网接口支持的选项。具体路径可能是 `Device Drivers -> Network device support -> Ethernet driver options (MII)` 下面勾选所有适用的目标设备型号对应的子项[^1]。 ```bash $ make menuconfig ``` #### 3. 修改Board文件 针对特定平台(如STM32系列),还需要编辑位于`board/<vendor>/<board>/`中的C语言源文件,调整初始化过程中对两个不同MAC地址和PHY ID的操作逻辑,保证两者都能被正确识别与设置。这一步骤涉及到修改或增加如下函数: - `ethernet_init()`: 初始化第一个以太网端口; - `ethernet1_init()`: 如果存在第二个独立于主控芯片之外管理的物理层,则需单独定义此函数完成次级网口激活; 这些改动应当基于现有单网卡工作的基础上扩展而来,并保持原有功能不变。 #### 4. 更新配置脚本 最后要更新顶层Makefile以及其他任何涉及编译参数设定的地方,使得新加入的部分能够顺利参与到整个构建流程当中去。特别是当引入外部库或者更改了某些全局变量时更要注意这一点。此外还需注意检查`.config`文件里有关网络部分的宏定义是否恰当设置了所需的资源分配情况,例如IRQ中断号、内存映射区域等。 #### 5. 测试验证 完成上述步骤之后就可以尝试编译生成新的固件镜像,并将其刷入到实际硬件上进行测试。此时应该能看到控制台输出显示出了两组不同的MAC地址信息,分别代表各自的工作状态良好。也可以利用ping命令或其他工具进一步检验连通性和性能表现如何。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值