[转]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循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(