历史上的今天
返回首页

历史上的今天

今天是:2025年10月18日(星期六)

正在发生

2022年10月18日 | linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动

2022-10-18 来源:csdn

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,等号后面有数的话,就是和别的主机连接正常.


推荐阅读

史海拾趣

Emulation Technology Inc公司的发展小趣事

面对电子行业的快速发展和市场的不断变化,Emulation始终保持着对技术的持续创新。公司不断投入研发资源,推出了一系列具有领先性能的模拟和仿真产品,满足了客户对于高精度、高效率仿真工具的需求。这些产品不仅提高了工程师们的设计效率,还促进了整个电子行业的发展。

Aptos Technology公司的发展小趣事

为了加速发展,Aptos积极寻求与行业内外的合作伙伴建立合作关系。通过与微软、阿里云等知名公司的合作,Aptos获得了更多的技术支持和市场资源。这些合作伙伴关系的建立,不仅提升了Aptos的技术实力和市场竞争力,还为其未来的发展奠定了坚实的基础。

Digilent公司的发展小趣事

作为电子行业的领军企业之一,DIALIGHT始终将技术创新作为公司发展的核心驱动力。公司拥有一支高素质的研发团队和先进的研发设施,不断推出具有创新性和竞争力的LED产品。同时,DIALIGHT还积极与高校、科研机构等合作,共同推动LED照明技术的进步和应用。

HCC Industries公司的发展小趣事

随着国内市场的饱和,HCC Industries在2010年制定了国际化发展战略。公司首先选择在欧洲市场设立分支机构,利用其先进的制造工艺和技术优势,迅速打开了当地市场。随后,HCC又相继在亚洲和北美地区设立了多个办事处和生产基地,实现了全球范围内的生产和销售网络布局。这一战略不仅显著提升了HCC的品牌影响力,也为其带来了更加多元化的客户群体和更广阔的市场空间。

亿晶源(ekinglux)公司的发展小趣事

面对不断变化的市场环境和客户需求,亿晶源始终保持敏锐的市场洞察力和创新精神。公司将继续加大研发投入,推出更多具有竞争力的新产品;同时,加强与国际知名企业的合作与交流,提升公司的国际竞争力。展望未来,亿晶源将致力于成为全球领先的LED半导体制造商之一。

请注意,以上故事框架仅为示例,具体细节和事实可能需要根据实际情况进行调整和补充。

Comair Rotron公司的发展小趣事

面对日新月异的电子行业技术和市场变化,Comair Rotron始终坚持创新和服务升级。公司不断推出新型风扇和风机产品,以满足不同客户的个性化需求。同时,公司还加强了对售后服务的投入,建立了完善的客户服务体系,为客户提供更加便捷、高效的技术支持和维修服务。这些举措不仅增强了客户对Comair Rotron的信任和忠诚度,也为其在电子行业的持续发展提供了有力保障。

这些故事只是Comair Rotron在电子行业发展中可能的一部分,具体细节和准确性需要参考公司的官方资料或相关历史文献。Comair Rotron作为一个长期在电子行业发展的公司,其发展历程必定充满了挑战与机遇,也必定有着更多值得探讨和了解的故事。

问答坊 | AI 解惑

Linux的常见问题解答和管理技巧

一、 如何建立多用户   提醒大家一句,别一直使用root用户,因为root用户在系统中有着至高无上的权力,一不小心就可能破坏系统。比如我们想删除/temp目录下的文件却将命令不小心输成“rm / temp(在‘/’后多了一个空格)”,那么就极可能删去 ...…

查看全部问答>

单片机can总线论文求助

大家好,我的论文题目是《基于单片机AT89C52的CAN总线分布式测控系统的研制》,我们没有学过这个,所以我不知道如何入手写论文,希望高手能够指点我一下,给我一些材料,让我可以顺利写出论文。谢谢啊…

查看全部问答>

FPGA中pll使用的问题

altera cycloneIII的FPGA,在设置PLL时出现问题, 生成后的PLL模块共四个端口:areset,inclk0,c0,locked, 将晶振时钟输入引脚直接连入inclk0,并将某个PLL_CLKOUT连接到c0, 但是观察并没有任何时钟输出信号, 那么对于PLL输出引脚是必须要综合 ...…

查看全部问答>

短信发送的小程序,出了点问题

我在evc中写了个简单的短信发送程序    SMS_HANDLE smsHandle;         HRESULT hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smsHandle, NULL);         ASSERT(hr == ERROR_SUCCESS);/ ...…

查看全部问答>

2410小程序 如何烧写到NAND FLASH中?

写了个小的显示控制程序,怎样烧写到NAND flash中呢?是否要用什么boot呢?还是有什么更简单的方法?谢谢啦…

查看全部问答>

请教高手:我应该如何入门呢?

请问各位:我现在想要学做linux下驱动程序开发,,应该怎样做好呢??           有C基础,现正在学linux系统。。                     急需前辈的 ...…

查看全部问答>

stm32定时器比较输出问题,请高手解答

最近在调试stm32的timer的比较输出,发现当cnt寄存器的值大于通道一的比较寄存器后,我量对应的输出脚没有发现电平由低变为高,我对照一遍st公司给的比较输出例程基本差不多,不知道怎么回事,用的是万利的EKSTM3210B开发板,CPU为stm32f103vb ...…

查看全部问答>

【求助】初学者关于低功耗得理解

各位大侠 我是430的出学者对于低功耗的理解有些不太明白,希望给予指点 1。进入低功耗的4种模式,都是关闭cpu,是不是说,就是不能有程序再运行了啊,知道有中断唤醒才能有程序运行。 2。是不是只要cpu工作就是活动模式,就需要很高的时钟啊 3 ...…

查看全部问答>

系统断电时FPGA数据保护方法

     从消费电子设备到工业控制设备,越来越多的系统都在使用FPGA。这些应用通常需要设备在断电时存储一些数据,比如校准信息、用户设置、辨认标签等。如果设备使用了微处理器,则还需要存储微处理器的代码。 对于那些 ...…

查看全部问答>

高手给个MAX188驱动程序,跪求!!!

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 高手来个MAX188 C语言的驱动程序, 救火啊~~~  …

查看全部问答>