linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动

发布者:清新天空最新更新时间:2022-10-18 来源: csdn关键字:linux2  6  mini2440  平台移植  DM9000  网卡驱动 手机看文章 扫描二维码
随时随地手机看文章

1.1.1 设备资源初始化


Linux-2..6.32.2已经自带了完善的DM9000网卡驱动驱动(源代码位置:linux-2.6.32.2/ drivers/net/dm9000.c),它也是一个平台设备,因此在目标平台初始化代码中,只要填写好相应的结构表即可(在mach-mini2440.c里面),具体步骤如下:


首先添加驱动所需的头文件dm9000.h:


#include


再定义DM9000网卡设备的物理基地址,以便后面用到:


/* DM9000AEP 10/100 ethernet controller */


#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)


再填充该平台设备的资源设置,以便和DM9000网卡驱动接口配合起来,如下


static struct resource mini2440_dm9k_resource[] = {


        [0] = {


                .start = MACH_MINI2440_DM9K_BASE,


                .end   = MACH_MINI2440_DM9K_BASE + 3,


                .flags = IORESOURCE_MEM


        },


        [1] = {


                .start = MACH_MINI2440_DM9K_BASE + 4,


                .end   = MACH_MINI2440_DM9K_BASE + 7,


                .flags = IORESOURCE_MEM


        },


        [2] = {


                .start = IRQ_EINT7,


                .end   = IRQ_EINT7,


                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,


        }


};


/*


 *  *  * The DM9000 has no eeprom, and it's MAC address is set by


 *   *   * the bootloader before starting the kernel.


 *    *    */


static struct dm9000_plat_data mini2440_dm9k_pdata = {


        .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),


};


static struct platform_device mini2440_device_eth = {


        .name           = "dm9000",


        .id             = -1,


        .num_resources  = ARRAY_SIZE(mini2440_dm9k_resource),


        .resource       = mini2440_dm9k_resource,


        .dev            = {


                .platform_data  = &mini2440_dm9k_pdata,


        },


};


//同时在mini2440设备集中添加上面做好的网卡平台设备,如下红色部分


static struct platform_device *mini2440_devices[] __initdata = {


        &s3c_device_usb,


        &s3c_device_lcd,


        &s3c_device_wdt,


        &s3c_device_i2c0,


        &s3c_device_iis,


        &mini2440_device_eth,


        &s3c_device_nand,


};


这样,DM9000平台设备的接口就填完了。


1.1.2 调整DM9000所用的位宽寄存器


因为Linux-2.6.32.2的DM9000网卡驱动并不是专门为mini2440准备的,所以还要在其源代码中做一些移植工作,如下步骤。打开linux-2.6.32.2/ drivers/net/dm9000.c,头文件处添加2410相关的配置定义,如下


#include


#include


#include


#if defined(CONFIG_ARCH_S3C2410)


#include


#endif


#include "dm9000.h"


在dm9000设备的初始化函数中添加如下红色部分,这里是配置DM9000所用片选总线的时序,因为mini2440目前只有一个通过总线外扩的设备,在此设备驱动中直接修改相关的寄存器配置会更加容易理解一些,当然这部分也可以放到mach-mini2440.c中(注意将这部分放在mach-mini2440.c里会有几个常量需要自己找定义),你可以自行实验一下,在此不再赘述。


static int __init dm9000_init(void)


{


#if defined(CONFIG_ARCH_S3C2410)


        unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;


        unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;


        *((volatile unsigned int *)S3C2410_BWSCON) =


                        (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 |


S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;  


        *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;


#endif


        printk(KERN_INFO "%s Ethernet Driver, V%sn", CARDNAME, DRV_VERSION);


        return platform_driver_register(&dm9000_driver);


}


1.1.3 关于MAC地址


需要注意的是,本开发板所用的DM9000网卡并没有外接EEPROM用以存储MAC地址,因此系统中的MAC地址是一个“软”地址,也就是可以通过软件进行修改,可以随意改为其他值,在static int __devinit dm9000_probe(struct platform_device *pdev)函数中可以看出:


        /* try reading the node address from the attached EEPROM */


        //尝试从EEPROM读取MAC地址


        for (i = 0; i < 6; i += 2)


                dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);


        if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {


                mac_src = "platform data";


                memcpy(ndev->dev_addr, pdata->dev_addr, 6);


        }


        if (!is_valid_ether_addr(ndev->dev_addr)) {


                /* try reading from mac */


                mac_src = "chip";


                for (i = 0; i < 6; i++)


                        ndev->dev_addr[i] = ior(db, i+DM9000_PAR);


        }


       //使用“软”MAC地址: 08:90:90:90:90:90


        memcpy(ndev->dev_addr, "x08x90x90x90x90x90", 6);


        if (!is_valid_ether_addr(ndev->dev_addr))


                dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "


                         "set using ifconfign", ndev->name);


实际上到此为止DM9000就已经移植结束了。


1.1.4 配置内核加入DM9000,并编译运行测试


此时会带内核源代码目录,执行:


#make  menuconfig


开始在内核中配置网卡驱动,依次选择如下菜单项


Device Drivers  --->Network device support  ---> Ethernet (10 or 100Mbit)  --->


即可找到DM9000的配置项,可以看到DM9000已经被选中,这是因为Linux-2.6.32.2默认的内核配置已经加入了DM9000的支持。


然后执行:


#make zImage


最后生成  arch/arm/boot/zImage 文件,使用"k"命令把它烧写到开发板,并使用默认的文件系统启动,在命令行终端运行 ifconfig 命令可以看到如下所示。


[root@FriendlyARM /]# ifconfig


eth0      Link encap:Ethernet  HWaddr 08:90:90:90:90:90


          inet addr:192.168.1.230  Bcast:192.168.1.255  Mask:255.255.255.0


          UP BROADCAST MULTICAST  MTU:1500  Metric:1


          RX packets:0 errors:0 dropped:0 overruns:0 frame:0


          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0


          collisions:0 txqueuelen:1000


          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


          Interrupt:51 Base address:0x300


lo        Link encap:Local Loopback


          inet addr:127.0.0.1  Mask:255.0.0.0


          UP LOOPBACK RUNNING  MTU:16436  Metric:1


          RX packets:0 errors:0 dropped:0 overruns:0 frame:0


          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0


          collisions:0 txqueuelen:0


          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


测试网络:ping 127.0.0.1,等号后面有数的话,就是网卡正常ping 网关地址,等号后面有数的话,就是和网关连接正常ping 别的主机的IP,等号后面有数的话,就是和别的主机连接正常.


关键字:linux2  6  mini2440  平台移植  DM9000  网卡驱动 引用地址:linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动

上一篇:linux2.6.32.2 mini2440平台移植-- 激活 RTC 驱动
下一篇:linux 2.6.32.2 mini2440平台移植--内核移植、yaffs2文件系统移植

推荐阅读最新更新时间:2024-11-11 22:35

三星明年为iPhone供应2亿块OLED面板 价值220亿美元
  北京时间12月20日晚间消息,据韩国媒体报道, 三星 旗下显示面板制造商Samsung Display明年将为苹果公司(以下简称“苹果”)iPhone手机供应1.8亿块至2亿块柔性 OLED 面板。下面就随手机便携小编一起来了解一下相关内容吧。   今年, 三星 为iPhone X供应的 OLED 面板数量约为5000万块,这意味着明年年的供应量将是今年的4倍左右。基于调研公司IHS Market预计的每块110美元(包括覆盖玻璃和触摸传感器),这些显示面板价值198亿美元至220亿美元。   业内人士称, 三星 之所以能大幅提高 OLED 面板供应量,主要是因为其A3面板生产线的良品率显著提高。今年年初,三星A3面板生产线
[手机便携]
STM32学习003_STM32F10X的时钟配置
一、在STM32中,有5个时钟源,为HSI,HSE,LSI,LSE,PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz; ②HSE--高速外部时钟,可接石英或者陶瓷谐振器,或者外部时钟源,频率范围4MHz--15MHz. ③LSI--低速内部时钟,RC 振荡器,频率为40kHz. ④LSE--低速外部时钟,接频率为32.768KHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2,HSE或者HSE/2,倍频可选择为2--16倍,但是其输出频率最大不得超过72MHz. 下图为STM32的时钟树。(图1) 图1 AHB
[单片机]
STM<font color='red'>32</font>学习003_STM<font color='red'>32</font>F10X的时钟配置
iPhone 6c配置和5s相近 4寸屏基本确定
    最近,有不少报道称苹果将会推出搭载4英寸显示屏的iPhone 6c,甚至就连某著名分析师也认为这种小屏幕iPhone将在明年亮相,但就目前来看,iPhone 6c在诸多方面仍存在很大变数。但如果iPhone 6c真如传言中所说的为一款小尺寸智能手机,那么其配置应该与iPhone 5s比较相近,同时既然被归为“第六代”,整体设计似乎也会更靠近iPhone 6与iPhone 6s。 iPhone 6c概念图   有消息称iPhone 6c的4英寸显示屏仍将延续旧款iPhone 1136×640的分辨率,而在iPhone 6s和iPhone 6s Plus上出现的3D Touch压感触控将会缺席,但Touch ID应该是少不了
[手机便携]
STM32F7xx —— 96位唯一ID
// 配置单片机型号 对外只有这个宏CONFIG_SYSTEM_HARDWARE_TYPE #define CONFIG_SYSTEM_HARDWARE_TYPE SOC_TYPE_STM32F7 // SOC类型 typedef enum { SOC_TYPE_STM32F0, SOC_TYPE_STM32F1, SOC_TYPE_STM32F2, SOC_TYPE_STM32F3, SOC_TYPE_STM32F4, SOC_TYPE_STM32F7, SOC_TYPE_STM32L0, SOC_TYPE_STM32L1, SOC_TYPE_STM32L4, SOC_TYPE_STM32H7, } so
[单片机]
S232与RS485谁才是UART中的高速公路
  RS232与RS485谁才是UART中的高速公路   串口通讯是电子工程师面对的最基本的一个通讯方式,RS-232是其中最简单的一种。然而,很多初学者往往搞不清楚UART和RS-232、RS-422、RS-485的联系和区别,本文将谈谈我对这几个概念的理解,帮助大家理清它们之间的关系。   通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,那么谁才是
[嵌入式]
STM32 BOOT模式配置以及作用
一、三种BOOT模式介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 Main Flash memory 是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 System memory 从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一
[单片机]
STM<font color='red'>32</font> BOOT模式配置以及作用
MLCC供不应求,村田投新厂2019年Q2量产
集微网消息, 根据《日本经济新闻》报导,全球最大的 MLCC 制造商──日本村田制作所(Murata)将投资 100 亿日圆兴建新的 MLCC 产线,以因应目前市场对 MLCC 的需求。 在市场上,当前积层陶瓷电容器(MLCC)供应不足,部分产品还将延续缺货到 2018 年。 报导指出,村田制作所新的 MLCC 厂房预计将设置在日本冈山县濑户内市,预计 2018 年第 4 季完成。 目前,村田制作所已有一座 MLCC 生产工厂。 随着市场需求增加,产能已不能满足需求。 村田制作所计划未来藉由新工厂,透过添加矿物冶金粉末材料的技术,生产有超强导电性的 MLCC 产品。 MLCC 可透过转移储存于电子产品的电能到其他电子产品的零组件,
[手机便携]
一起学mini2440裸机开发(九)--ARM中断控制系统
ARM处理器程序的执行流程种类 ●正常执行:每执行一条ARM指令,程序计数器PC的值自动加4。这一过程描述了应用程序顺序执行的状态。 ●跳转执行:通过B、BL跳转执行,实现程序在一定范围内的跳转执行。这一过程描述了ARM处理器程序执行过程中的过程调用。 ●中断处理:在应用程序执行过程中,发生中断后,ARM处理器在执行完当前指令后,跳转到上述中断对应的中断处理程序处去执行,执行完中断处理程序后,再返回到发生中断的指令的下一条执行处接着执行。这一过程描述了ARM处理器对异常中断的响应情况。 S3C2440中断系统概述 在ARM处理器运行过程中,需要与系统的各类外部设备进行通信,包括发出控制信息、读取外部设备的状态信
[单片机]
一起学<font color='red'>mini2440</font>裸机开发(九)--ARM中断控制系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved