Redboot 的DM9000 网卡驱动在 MINI2440平台的移植

2023-10-06 22:08

本文主要是介绍Redboot 的DM9000 网卡驱动在 MINI2440平台的移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DM9000网卡是一个目前性价比比较高的网络芯片

在MINI2440的QEMU平台就带有这个芯片,下面主要简单讲述一下我的移植经历。

 

(原创文章,欢迎转载,请注明出处,谢谢。)


1. 选择模板


这个比较简单,但是也是最重要的。

我是这样做的,在ecos.db中搜索DM9000,通过搜索结果就能大体的了解ecos网络设备的构建方法。

因为本人一直做Linux开发,所以比较喜欢架构清晰的东西,不罗嗦了,看下面的结果,我们一起分析一下。

 

第一,是DM9000的芯片驱动

看到这里,要做的第一件事情就是打开这个文件去看看它是做什么的。

看到以后,就不难发现,结果和我们想象的一样,这个是芯片驱动包含了对DM9000的寄存器设置和对协议层的挂接,

驱动支持PULL和INT两种方式。

但是,请不要沾沾自喜,因为只有芯片驱动是不能和你的CPU配合工作的,那么我们要怎么做呢?

 

package CYGPKG_DEVS_ETH_DAVICOM_DM9000 {

        alias           { "Davicom DM9000 ethernet driver" dm9000_eth_driver }

        hardware

        directory       devs/eth/davicom/dm9000

        script          davicom_dm9000_eth_drivers.cdl

        description     "Ethernet driver for Davicom DM9000 controller."

}

 

第二,看到这里就有点明白了,这个是FRV的board, 继续打开看源码就发现这个是一个负责把芯片驱动和
具体的CPU连接的接口驱动程序,这个东西也正式我们要新编写的。

 

 

package CYGPKG_DEVS_ETH_FRV_CB70 {

        alias           { "Fujitsu FR-V 405 with DM9000 ethernet driver"

                           devs_eth_frv_cb70 cb70_eth_driver }

        hardware

        directory       devs/eth/frv/cb70

        script          cb70_eth_driver.cdl

        description     "Ethernet driver for Fujitsu FR-V 405 CB70 CPU card with

                         Davicom DM9000 ethernet interface."

}

第三,这是一个具体的应用实例,里面可以看到放入了DM9000和接口驱动。
target mb93091 {
alias { "Fujitsu MB93091 development board (FR-V 4xx,5xx)" MB93091 }
packages { CYGPKG_HAL_FRV
CYGPKG_HAL_FRV_MB93091
CYGPKG_IO_PCI
CYGPKG_DEVS_ETH_FRV_FRV400
CYGPKG_DEVS_ETH_NS_DP83902A
CYGPKG_DEVS_ETH_FRV_CB70
                   CYGPKG_DEVS_ETH_DAVICOM_DM9000
CYGPKG_DEVS_FLASH_FRV_FRV400
CYGPKG_DEVS_FLASH_AMD_AM29XXXXX
}
description "
The MB93091 target provides the packages needed to run eCos on a Fujitsu
MB93091 development board (FR-V 400 etc.)."
}
看到这里,我们应该知道我们的模板找到了,不是她还能是谁。
2. 按照模板创建如下模块(ecos里面的PKG等名字太多了,我们都叫模块吧)
package CYGPKG_DEVS_ETH_ARM_MINI2440 {
alias           { "Samsung MINI2440 with DM9000 ethernet driver"
devs_eth_arm_mini2440 mini2440_eth_driver }
hardware
directory       devs/eth/arm/mini2440
script          mini2440_eth_driver.cdl
description     "Ethernet driver for Samsung MINI2440 with
Davicom DM9000 ethernet interface."
}
target mini2440 {
alias { "Samsung ARM9/MINI2440 development board" s3c2440x }
packages { CYGPKG_HAL_ARM
CYGPKG_HAL_ARM_ARM9
CYGPKG_HAL_ARM_ARM9_MINI2440
CYGPKG_ERROR
CYGPKG_IO
CYGPKG_IO_SERIAL
CYGPKG_IO_SERIAL_ARM_SMDK2410
CYGPKG_IO_ETH_DRIVERS
CYGPKG_DEVS_ETH_ARM_MINI2440
                   CYGPKG_DEVS_ETH_DAVICOM_DM9000
CYGPKG_DEVS_FLASH_ARM_MINI2440
CYGPKG_DEVS_FLASH_SST_39VFXXX
}
description "
The MINI2440 target provides the packages needed to run eCos on
Samsung S3c2440x (ARM920T) based development boards (MINI2440)."
}
3.探究一下技术细节
总结下来有三点需要注意:
1)QEMU 没有DM9000的eeprom的接口,要创建一个静态的mac address
2)设置正确的DM9000的地址
cdl_component CYGSEM_DEVS_ETH_ARM_MINI2440_ETH0_SET_ESA {
display       "Set the ethernet station address"
flavor        bool
 calculated    1
description   "Enabling this option will allow the ethernet
station address to be forced to the value set by the
configuration.  This may be required if the hardware does
not include a serial EEPROM for the ESA."
cdl_option CYGDAT_DEVS_ETH_ARM_MINI2440_ETH0_ESA {
                display       "The ethernet station address"
                flavor        data
                default_value {"{0x08, 0x88, 0x12, 0x34, 0x56, 0x78}"}
                description   "The ethernet station address"
            }
}
}
static struct dm9000 dm9000_eth0_priv_data = {
#if defined(CYGPKG_REDBOOT) && defined(CYGVAR_ETH_DM9000_REDBOOT_HOLDS_ESA_ETH0)
mac_address: CYGDAT_DEVS_ETH_ARM_MINI2440_ETH0_DEFAULT_ESA,
#elif defined(CYGVAR_ETH_DM9000_REDBOOT_HOLDS_ESA_ETH0)
mac_address: CYGDAT_DEVS_ETH_ARM_MINI2440_ETH0_ESA,
#endif
io_addr: (volatile unsigned char *)0x20000300,
    io_data: (volatile unsigned char *)0x20000304
};
3)加入MMU映射表
X_ARM_MMU_SECTION(0x200,  0x200,    1,  ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); // DM9000
4)填入DM9000 present函数
其实这个函数本来没有特别的意义,只是用来判断这个板子是不是有DM9000的这个芯片,不过因为 某种特殊原因
QEMU需要在DM9000初始化的地方留有足够的延时,所以我就直接放在这里了。
虽然没有意义,但是保证了DM9000驱动的层次机构,使得我们的DM9000芯片驱动不再需要修改了。
// Is DM9000 present?
int cyg_hal_dm9000_present(void) {
CYGACC_CALL_IF_DELAY_US(500);
return 1;
}
4.展示一下成果
这部分是本博客,一定要做的,:-)。
除了说明的确是原创,还给大家增加真实感。
说明一下:
error:dm9000_mii_read:Bad register的意思是QEMU没有dm9000 eeprom的接口,
为了保证qemu用的和实际板子是一个驱动,代码不另作更改。
warning:NIC collision bu detected的意思是,找不到dhcp的主机的时候重启一下chip,这个都是目前ecos 3.0以上版本自带
DM9000驱动本身的行为。

 

这篇关于Redboot 的DM9000 网卡驱动在 MINI2440平台的移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二