linux设备驱动-DM9000移植
来源:互联网 发布:艺术家 知乎 编辑:程序博客网 时间:2024/05/18 00:02
一、开发环境
1、内核:Linux 2.6.22.6;
2、JZ2440
3、ubuntu9.10
二、移植过程
1、添加头文件在内核目录下的/arch/arm/plat-s3c24xx/commom-smdk.c文件中添加
#if defined (CONFIG_DM9000) || defined (CONFIG_DM9000_MODULE)
#include <linux/dm9000.h>
#endif
2、添加DM9000平台设备结构。内核目录下的/arch/arm/plat-s3c24xx/commom-smdk.c文件中添加
/* DM9000 Device */
#if defined (CONFIG_DM9000) || defined (CONFIG_DM9000_MODULE)
static struct resource s3c_dm9k_resource[] = {
[0] = {
.start = S3C2410_CS4,
.end = S3C2410_CS4+0x3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS4+0x4,
.end = S3C2410_CS4+0x4+0x3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ,
}
};
static struct dm9000_plat_data s3c_m9k_platdata={
.flags = DM9000_PLATF_16BITONLY,
};
struct platform_device s3c_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
.resource = s3c_dm9k_resource,
.dev ={
.platform_data = &s3c_dm9k_platdata,
},
};
EXPORT_SYMBOL(s3c_device_dm9k);
#endif /* DM9000 Device */
3、加入内核设备列表。
static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
#if defined (CONFIG_DM9000) || defined (CONFIG_DM9000_MODULE)
&s3c_device_dm9k,
#endif
};
4、修改源码/drivers/net/dm9000.c。
(1)添加头文件
#if defined(CONFIG_ARCH_S3C2410)
#include <asm/arch-s3c2410/regs-mem.h>
#endif
(2)修改/drivers/net/dm9000.c。设置存储控制器使BANK4可用。
在dm9000_probe()函数中,添加
u32 id_val;
#if defined(CONFIG_ARCH_S3C2410)
unsigned int oldval_bwscon;
unsigned int oldval_bankcon4;
#endif
/* Init network device */
ndev = alloc_etherdev(sizeof (struct board_info));
PRINTK2("dm9000_probe()");
#if defined(CONFIG_ARCH_S3C2410)
oldval_bwscon = *((volatile unsigned int *)S3C2410_BWSCON);
*((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 |\
S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
oldval_bankcon4 = *((volatile unsigned int *)S3C2410_BANKCON4);
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif
printk("%s: not found (%d).\n", CARDNAME, ret);
#if defined(CONFIG_ARCH_S3C2410)
*((volatile unsigned int *)S3C2410_BWSCON) = oldval_bwscon;
*((volatile unsigned int *)S3C2410_BANKCON4) = oldval_bankcon4;
#endif
PRINTK2("entering dm9000_open\n");
#if defined(CONFIG_ARCH_S3C2410)
if (request_irq(dev->irq, &dm9000_interrupt, IRQF_SHARED|IRQF_TRIGGER_RISING, dev->name, dev))
#else
if (request_irq(dev->irq, &dm9000_interrupt, IRQF_SHARED, dev->name, dev))
#endif
return -EAGAIN;
if (!is_valid_ether_addr(ndev->dev_addr)){
printk("%s: Invalid ethernet MAC address. Please "
"set using ifconfig\n", ndev->name);
#if defined(CONFIG_ARCH_S3C2410)
printk("Now use the default MAC address: 08:90:90:90:90:90 \n");
ndev->dev_addr[0] = 0x08;
ndev->dev_addr[1] = 0x90;
ndev->dev_addr[2] = 0x90;
ndev->dev_addr[3] = 0x90;
ndev->dev_addr[4] = 0x90;
ndev->dev_addr[5] = 0x90;
#endif
printk("%s: not found (%d).\n", CARDNAME, ret);
#if defined(CONFIG_ARCH_S3C2410)
*((volatile unsigned int *)S3C2410_BWSCON) = oldval_bwscon;
*((volatile unsigned int *)S3C2410_BANKCON4) = oldval_bankcon4;
#endif
5、配置内核支持DM9000。
在内核目录下执行make menuconfig。依次选Device Drives-->Network device support-->[*]Network device support --> Ethernet (10 or 100Mbit)--><*>DM9000 support。如图
6、在内核目录下执行make uImage。在arch/arm/boot/下生成支持DM9000的uImage。
可惜这样能够识别出DM9000,也能设置IP,但并不能ping通。查看资料才知道,jz2440V3使用的是DM9000C,不能直接使用内核里带的DM9000.c,需要
使用厂家提供的dm9dev9000c.c移植,见《linux内核移植-DM9000C移植笔记》。这个第二期视频里有讲解。权做了解过程吧。
- linux设备驱动-DM9000移植
- linux设备驱动之——dm9000移植
- ARM-Linux驱动移植--DM9000网卡驱动移植
- s3c2440 DM9000驱动移植
- DM9000网卡驱动移植
- s3c2440 DM9000驱动移植
- dm9000驱动移植
- DM9000网卡驱动移植
- DM9000 驱动移植
- DM9000网驱动移植
- 移植网卡驱动DM9000
- Linux设备驱动简析--dm9000网卡驱动
- S3c6410 linux内核移植(2)--- 添加dm9000网卡驱动
- DM9000网卡驱动移植(linux-2.6.29mini2440)
- 内核linux-3.0移植到fl2440-----添加DM9000网卡驱动
- Arm9+linux fl2440 dm9000网卡 驱动移植和分析
- Linux 设备驱动的移植
- DM9000网卡驱动的移植
- 理解本真的REST架构风格
- 项目成本管理 考纲与考试要点
- CentOS_7安装之后无网络,VMWare虚拟机
- cocos2dx TTF字体渲染流程
- PDF417码的二维码校正以及译码
- linux设备驱动-DM9000移植
- leetcode419
- HDU 1114 Piggy-Bank(完全背包)
- Unity3D协程介绍 以及 使用
- 补码、原码、反码
- ROS使用USB摄像头运行pi_face_tracker,进行人脸识别
- redis常用命令收集
- Flying to the Mars hdu1800 trie
- 148. Sort List(快排、归并)