[转]u-boot-2010.12移植到2440(三,DM9000网卡驱动移植)

2024-01-07 02:08

本文主要是介绍[转]u-boot-2010.12移植到2440(三,DM9000网卡驱动移植),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[转]u-boot-2010.12移植到2440(三,DM9000网卡驱动移植)

转自

http://my.chinaunix.net/space.php?uid=24319701&do=blog&id=132091

 

在这一篇中,我们让开发板实现对DM9000X网卡的支持,后续的移植及调试均依赖网络的支持。

u- boot的新版本已经对CS8900和DM9000X网卡有比较完善的代码支持(代码在drivers/net/目录下),而且在 S3C24XX系列中默认对CS8900网卡进行配置使用。只是在个别地方要根据开发板的具体网卡片选进行设置,就可以对S3C24XX系列中 CS8900网卡的支持使用。

由于我们的目标板采用的是dm9000网卡,我们通过drivers/net/目录下有关DM9000的代码,发现dm9000x.h中对CONFIG_DRIVER_DM9000宏的依 赖,dm9000x.c中对CONFIG_DM9000_BASE宏、DM9000_IO宏、DM9000_DATA等宏的依赖,所以我们修改代码如下:

#define CONFIG_NET_MULTI        1

/* * Hardware drivers */  屏蔽掉u-boot默认对CS8900网卡的支持
//#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
//#define CS8900_BASE          0x19000300
//#define CS8900_BUS16         1 /* the Linux driver does accesses as shorts */

//添加u-boot对DM9000X网卡的支持

#define CONFIG_CMD_NET

#define CONFIG_DRIVER_DM9000    1 
#define CONFIG_DM9000_NO_SROM   1
#define CONFIG_DM9000_BASE      0x18400300
//网卡片选地址,需要根据具体目标板修改
#define DM9000_IO               CONFIG_DM9000_BASE
#define DM9000_DATA             (CONFIG_DM9000_BASE + 4)   
//网卡数据地址

//给u-boot加上ping命令,用来测试网络通不通

#define CONFIG_CMD_PING  

 

//恢复被注释掉的网卡MAC地址和修改你合适的开发板IP地址

#define CONFIG_ETHADDR   08:00:3e:26:0a:5b  //开发板MAC地址
#define CONFIG_NETMASK   255.255.255.0
#define CONFIG_IPADDR    192.168.0.110      
//开发板IP地址

#define CONFIG_SERVERIP  192.168.0.7      //Linux主机IP地址

board/samsung/smdk2440/smdk2440.添加板载DM9000网卡初始化代码,如下:

#include <net.h>
#include <netdev.h>

#ifdef CONFIG_CMD_NET

int board_eth_init(bd_t *bis)

{

    int rc = 0;

#ifdef CONFIG_CS8900

    cs8900_initialize(0, CONFIG_CS8900_BASE);

#endif

 

#ifdef CONFIG_DRIVER_DM9000

    rc = dm9000_initialize(bis);

#endif

    return rc;

}

#endif

编译之后加载到内存运行,可以ping通,但是串口出现大量“raise:signal # 8 caught”.找到打印该语句的地方, arch/arm/lib/eabi_compat.c,

int raise (int signum)

{

    /*printf("raise: Signal # %d caught/n", signum);*/

    return 0;

}

直接删除掉该打印(比较简单粗暴,但是验证证实确实可以的,目前未发现什么问题。)

然后下载运行ping命令,发现不通,出现“could not establish link”的错误,参考网友的处理方法:修改drivers/net/dm9000x.c

#if 0  //屏蔽掉dm9000_init函数中的这一部分,不然使用网卡的时候会报“could not establish link”的错误
    i = 0;
    while (!(phy_read(1) & 0x20)) {    /* autonegation complete bit */
        udelay(1000);
        i++;
        if (i == 10000) {
            printf("could not establish link ");
            return 0;
        }
    }
#endif

/*
  Stop the interface.
  The interface is stopped when it is brought.
*///屏蔽掉dm9000_halt函数中的内容
static void dm9000_halt(struct eth_device *netdev)

{

#if 0

      DM9000_DBG("%s/n", __func__);

      /* RESET devie */

      phy_write(0, 0x8000);      /* PHY RESET */

      DM9000_iow(DM9000_GPR, 0x01);   /* Power-Down PHY */

      DM9000_iow(DM9000_IMR, 0x80);   /* Disable all interrupt */

      DM9000_iow(DM9000_RCR, 0x00);  /* Disable RX */

#endif

}

然后再次完全重新编译,测试ping和tftp命令,均正常,至此dm9000的驱动移植完成可以正常工作。至于“raise:signal # 8 caught”的错误,后续可以再仔细研究,目前怀疑是新版本的BUG。

这篇关于[转]u-boot-2010.12移植到2440(三,DM9000网卡驱动移植)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578376

相关文章

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Spring Boot Actuator使用说明

《SpringBootActuator使用说明》SpringBootActuator是一个用于监控和管理SpringBoot应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,... 目录项目里引入下面这个依赖使用场景总结说明:本文介绍Spring Boot Actuator的使用,关于Spri

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed