mini2440移植之DM9000驱动
来源:互联网 发布:怎么入驻淘宝商城 编辑:程序博客网 时间:2024/05/16 17:50
1.设备资源初始化
linux2.6.32.2已经自带完善的DM9000网卡驱动(drivers/net/dm9000.c),平台设备。
在mach-mini2440.c中填写相应结构表
添加驱动所需头文件dm9000.h
#include <linux/dm9000.h>
定义DM9000网卡设备的物理基地址
/* DM9000AEP 10/100 ethernet controller */
#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
填充该平台设备资源设置
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所用的位宽寄存器
打开 linux-2.6.32.2/ drivers/net/dm9000.c,头文件处添加2410 相关的配置定义
#include <asm/delay.h>
#include <asm/irq.h>
#include <asm/io.h>
#if defined(CONFIG_ARCH_S3C2410)#include <mach/regs-mem.h>#endif#include "dm9000.h"
在dm9000 设备的初始化函数中添加如下红色部分,这里是配置DM9000 所用片选总
线的时序,因为mini2440 目前只有一个通过总线外扩的设备,这部分也可以放到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%s\n", CARDNAME, DRV_VERSION);
return platform_driver_register(&dm9000_driver);
}
2.关于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:90memcpy(ndev->dev_addr, "\x08\x90\x90\x90\x90\x90", 6);if (!is_valid_ether_addr(ndev->dev_addr))dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please ""set using ifconfig\n", ndev->name);
- mini2440移植之DM9000驱动
- mini2440 DM9000 网卡驱动移植
- mini2440 dm9000网卡驱动移植
- Mini2440 dm9000的网卡驱动移植
- linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动
- linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动
- dm9000驱动移植 之二
- mini2440网卡驱动DM9000之dm9000_start_xmit
- MINI2440+DM9000网络驱动分析之二
- MINI2440+DM9000网络驱动分析之三
- MINI2440+DM9000网络驱动分析之四
- MINI2440+DM9000网络驱动分析之五
- MINI2440+DM9000网络驱动分析之六
- mini2440 DM9000网卡移植
- DM9000驱动在MINI2440上的移植学习笔记
- Redboot 的DM9000 网卡驱动在 MINI2440平台的移植
- DM9000驱动在MINI2440上的移植学习笔记
- DM9000网卡驱动移植(linux-2.6.29mini2440)
- linux的less命令
- gdb太牛X了
- 直接插入排序 c语言描述
- HTML自定义对象练习
- Android常用知识点总汇
- mini2440移植之DM9000驱动
- 鼠标滑过图片出现大图片提示层效果js代码
- 2012年11月python工程师招聘
- poj1258
- windows读二进制文件要用rb,linux无所谓
- Ubuntu 12.04-12.10 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
- CF190A:Vasya and the Bus(易错题)
- 第十九节 java学习 类
- ASP.NET Web开发框架之 数据库文档方法