s3c2440 dm9000网卡驱动移植

本文详细介绍了如何为FL2440开发板配置网卡驱动,包括检查内核、修改内核源码及使能网卡的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文出自http://blog.youkuaiyun.com/edroid1530/article/details/63683344。


1.检查内核是否有网卡驱动

使用 ifconfig -a 命令可以看到内核当中没有网卡驱动,接下来我们就在内核中添加网卡的配置。


2.修改内核源码,添加网卡驱动编译


2-1.在mach-smdk2440.c文件中添加如下代码

  1. [lwn@localhost linux-lwn-3.0.1]&nbsp;vim&nbsp;./arch/arm/mach-s3c2440/mach-smdk2440.c&nbsp;&nbsp;</span></span></li><li><span><span class="preprocessor">#include&nbsp;&lt;linux/dm9000.h&gt;&nbsp;&nbsp;//添加DM9000网卡的头文件&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="comment">/*&nbsp;add&nbsp;DM9000&nbsp;ethernet&nbsp;drivers&nbsp;,whitch&nbsp;is&nbsp;bodify&nbsp;by&nbsp;liuchengdeng&nbsp;*/</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li><span><span class="preprocessor">#define&nbsp;DM9000_BASE&nbsp;&nbsp;&nbsp;&nbsp;(S3C2410_CS4&nbsp;+&nbsp;0x300)&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;resource&nbsp;s3c_dm9000_resource[]&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0]&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.start&nbsp;=&nbsp;DM9000_BASE,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.end&nbsp;&nbsp;&nbsp;=&nbsp;DM9000_BASE&nbsp;+&nbsp;3,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flags&nbsp;=&nbsp;IORESOURCE_MEM&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.start&nbsp;=&nbsp;DM9000_BASE&nbsp;+&nbsp;4,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.end&nbsp;&nbsp;&nbsp;=&nbsp;DM9000_BASE&nbsp;+&nbsp;7,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flags&nbsp;=&nbsp;IORESOURCE_MEM&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;[2]&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.start&nbsp;=&nbsp;IRQ_EINT7,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.end&nbsp;&nbsp;&nbsp;=&nbsp;IRQ_EINT7,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flags&nbsp;=&nbsp;IORESOURCE_IRQ&nbsp;|&nbsp;IORESOURCE_IRQ_HIGHEDGE,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>};&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span><span class="comment">/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">&nbsp;*&nbsp;The&nbsp;DM9000&nbsp;has&nbsp;no&nbsp;eeprom,&nbsp;and&nbsp;it's&nbsp;MAC&nbsp;address&nbsp;is&nbsp;set&nbsp;by&nbsp;&nbsp;</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;*&nbsp;the&nbsp;bootloader&nbsp;before&nbsp;starting&nbsp;the&nbsp;kernel.&nbsp;&nbsp;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;dm9000_plat_data&nbsp;s3c_dm9000_pdata&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(DM9000_PLATF_16BITONLY&nbsp;|&nbsp;DM9000_PLATF_NO_EEPROM),&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>};&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;platform_device&nbsp;s3c_device_dm9000&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;<span class="string">"dm9000"</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;-1,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;.num_resources&nbsp;&nbsp;=&nbsp;ARRAY_SIZE(s3c_dm9000_resource),&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.resource&nbsp;&nbsp;&nbsp;=&nbsp;s3c_dm9000_resource,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;.dev&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.platform_data&nbsp;&nbsp;=&nbsp;&amp;s3c_dm9000_pdata,&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>};&nbsp;&nbsp;&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;" target="_blank"><img src="http://static.blog.youkuaiyun.com/images/save_snippets.png"></a></div></div><pre class="cpp" style="display: none;" name="code" snippet_file_name="blog_20170319_1_9710561" code_snippet_id="2274372">[lwn@localhost linux-lwn-3.0.1] vim ./arch/arm/mach-s3c2440/mach-smdk2440.c

#include <linux/dm9000.h> //添加DM9000网卡的头文件 /* add DM9000 ethernet drivers ,whitch is bodify by liuchengdeng */ #define DM9000_BASE (S3C2410_CS4 + 0x300) static struct resource s3c_dm9000_resource[] = { [0] = { .start = DM9000_BASE, .end = DM9000_BASE + 3, .flags = IORESOURCE_MEM }, [1] = { .start = DM9000_BASE + 4, .end = DM9000_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 s3c_dm9000_pdata = { .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), }; static struct platform_device s3c_device_dm9000 = { .name = “dm9000”, .id = -1, .num_resources = ARRAY_SIZE(s3c_dm9000_resource), .resource = s3c_dm9000_resource, .dev = { .platform_data = &s3c_dm9000_pdata, }, };


2-2.添加成员变量

在mach-smdk2440.c文件中的结构体platform_device *smdk2440_devices[] __initdata中添加如下成员变量。

  1. static struct platform_device *smdk2440_devices[] __initdata = {  
  2.     &s3c_device_ohci,  
  3.     &s3c_device_lcd,  
  4.     &s3c_device_wdt,  
  5.     &s3c_device_i2c0,  
  6.     &s3c_device_iis,  
  7.     &s3c_device_dm9000,//添加dm9000成员变量  
  8. };  
static struct platform_device *smdk2440_devices[] __initdata = {
    &s3c_device_ohci,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c0,
    &s3c_device_iis,
    &s3c_device_dm9000,//添加dm9000成员变量
};

2-3.添加头文件

在 dm9000.h中添加如下头文件

  1. vim include/linux/dm9000.h  
  2. #ifndef __DM9000_PLATFORM_DATA  
  3. #define __DM9000_PLATFORM_DATA __FILE__  
  4. #include <linux/io.h>  //添加 linux/io.h 头文件  
  5. /* IO control flags */  
vim include/linux/dm9000.h




#ifndef __DM9000_PLATFORM_DATA #define __DM9000_PLATFORM_DATA __FILE__ #include <linux/io.h> //添加 linux/io.h 头文件 /* IO control flags */


3.网卡使能 

使用make命令重新编译内核并烧录到开发板上,再使用ifconfig -a命令已经可以网卡驱动已经添加上了,但是此刻依然不能与主机通信,因为还没有配置ip,即网卡没有使能。

          


3-1.暂时使能

    下面 使用ifconfig命令将网卡使能。使能之后我们可以看到已经可以和主机进行通信了。


               



3-2.永久使能

注意这个时候我们只是暂时性的使能了网卡,开发板下次启动的时候需要重新使能。如果我们想要网卡使能长期有效,修改开发板上的配置文件



  1. >: vim etc/init.d/S01_network  
  2. #!/bin/bash  
  3. ifconfig eth0 192.168.1.199 netmask 255.255.255.0  
>: vim etc/init.d/S01_network




#!/bin/bash ifconfig eth0 192.168.1.199 netmask 255.255.255.0


到此,fl2440开发板的整个网卡驱动配置就已经完成了。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值