驱动开发之 DM9000 (for mini2440)

2020-06-28来源: eefocus关键字:驱动开发  DM9000  mini2440

内核版本:linux-2.6.32.2

实验平台:mini2440


1. 添加平台设备支持

首先需要在mach-mini2440.c中包含头文件,dm9000平台设备定义如下:


/* DM9000AEP 10/100 ethernet controller */


#define MACH_MINI2440_DM9000_BASE (S3C2410_CS4 + 0x300)


static struct resource mini2440_dm9000_resource[] = {

[0] = {

.start  = MACH_MINI2440_DM9000_BASE,

.end    = MACH_MINI2440_DM9000_BASE + 3,

.flags  = IORESOURCE_MEM,

},

[1] = {

.start  = MACH_MINI2440_DM9000_BASE + 4,

.end    = MACH_MINI2440_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 mini2440_dm9000_platdata = {

.flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),

};


static struct platform_device mini2440_device_eth = {

.name           = "dm9000",

.id             = -1,

.num_resources  = ARRAY_SIZE(mini2440_dm9000_resource),

.resource       = mini2440_dm9000_resource,

.dev            = {

.platform_data = &mini2440_dm9000_platdata,

},

};


38

最后需要将dm9000这个平台设备添加到mini2440_devices这个平台设备数组里面,这样才能完成平台设备的注册。

static struct platform_device *mini2440_devices[] __initdata = {

        /* ... */

        &mini2440_device_eth,

};


2. dm9000驱动修改

drivers/net/dm9000.c这个驱动并不是为mini2440做准备的,需要做一些修改。

包含相关头文件:


#if defined(CONFIG_ARCH_S3C2410)

#include

#endif


修改dm9000片选总线时序:

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

/* ... */

}


在dm9000_probe函数中还需要给dm9000设置一个mac地址。


static int __devinit

dm9000_probe(struct platform_device *pdev)

{

/* ... */

        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);

/* ... */

}


3. 配置内核

    Device Drivers  --->

[*] Network device support  --->

[*]   Ethernet (10 or 100Mbit)  --->

<*>   DM9000 support

(4)     DM9000 maximum debug level


4. 编译下载,启动开发板

在这里插入图片描述

5. 启动网络设备

内核配置好之后,需要手动启动网络设备,使用如下命令:

ifconfig eth0 172.20.11.41 netmask 255.255.255.0 up


如下图所示:

在这里插入图片描述

或者将上面的命令写入到启动脚本中,还可以使用ifconfig命令来停止网络设备:


ifconfig eth0 down


关键字:驱动开发  DM9000  mini2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501356.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:mini2440从NFS启动文件系统
下一篇:以模块的方式加载DM9000驱动 (for mini2440)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

驱动开发之 HelloWorld (for mini2440)
_module.o4、配置内核在 linux-2.6.32.2 目录位置运行一下 make menuconfig在 DeviceDrivers -> Character devices 菜单中看到刚才所添加的选项了,我们选择选项意为把该驱动编译成模块。5、编译模块到 linux-2.6.32.2 源代码根目录位置,执行 make modules。编译成功在mini2440_hello_module.c同一目录下可以看到mini2440_hello_module.ko文件,此文件即是我们需要的模块。6、安装模块U盘安装:Linux内核配置对U盘的支持及挂载将mini2440_hello_module.ko模块拷贝到U盘,插入开发
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 HelloWorld (for mini2440)
驱动开发之 LED(for mini2440)
_leds.c同一目录下可以看到mini2440_leds.ko文件,此文件即是我们需要的模块。6、安装模块U盘安装:Linux内核配置对U盘的支持及挂载将mini2440_leds.ko模块拷贝到U盘,插入开发板。挂载驱动:#cd /mnt/udisk#insmod  /mnt/udisk/mini2440_leds.ko卸载驱动:#rmmod  mini2440_leds7、编写应用测试LED驱动led_kz.c源码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 LED(for mini2440)
罗姆与汽车零部件制造商Vitesco合作开发SiC电动汽车驱动
罗姆已与Vitesco Technologies签订了开发碳化硅电动汽车驱动器的协议。Vitesco副总裁Thomas Stierle说:“能源效率在电动汽车中至关重要,由于电池是车辆中唯一的能源,因此必须把因功率转换引起的任何损失降至最低。因此,我们正在模块化电力电子系统中开发SiC组件,为了从电力电子设备和电动机中获得最大效率,我们将使用合作伙伴提供的SiC功率器件,所以我们选择罗姆。”Vitesco已经在开发和测试800V SiC逆变器,旨在同时优化逆变器开关策略和电动机,通过更高的频率和更陡的开关斜率提供更高的开关效率,并减少电动机的谐波损耗。此外,公司还正在研究800V SiC车载电池充电器。 Vitesco表示
发表于 2020-06-09
内核裁剪,arm_mini2440开发板中增删自己写的驱动
1、把编译通过的buttons1711.c文件放入/home/mini2440/linux-2.6.32.2/drivers/char/2、修改Makefile在同一个目录下(第1步中放入.c文件的目录/home/mini2440/linux-2.6.32.2/drivers/char/)打开Makefile:(法1)(不推荐):在obj-y       += 后面加上buttons1711.o然后重新在/home/mini2440/linux-2.6.32.2/中make zImage,再把生成的zImage烧写进开发板就可以用了。(法2)在底下添加(可找原来类似的位置)obj
发表于 2020-05-22
linux-2.6.32在mini2440开发板上移植(17)之按键驱动程序移植
"},{IRQ_EINT19, S3C2410_GPG(11), S3C2410_GPG11_EINT19, 5, "KEY5"},};/*开发板上按键的状态变量,注意这里是’0’,对应的ASCII 码为30*/static volatile char key_values [] = {'0', '0', '0', '0', '0', '0'};/*因为本驱动是基于中断方式的,在此创建一个等待队列,以配合中断函数使用;当有按键按下并读取到键值时,将会唤醒此队列,并设置中断标志,以便能通过 read 函数判断和读取键值
发表于 2020-05-17
linux-2.6.32在mini2440<font color='red'>开发</font>板上移植(17)之按键<font color='red'>驱动</font>程序移植
以模块的方式加载DM9000驱动 (for mini2440)
注意事项:确保开发板内核中不存在DM9000(内核在编译时选择以模块方式编译DM9000)如果在已经把DM9000编译进内核的开发板安装,会提示DM9000已安装。报错如下:dm9000: module is already loaded insmod: cannot insert 'dm9000.ko': invalid_parameter.1、把dm9000.ko模块拷贝到开发板中U盘拷贝2、启动Linux后,加载模块:[root@H3-Studio=W]#insmod dm9000.ko
发表于 2020-06-28
以模块的方式加载<font color='red'>DM9000</font>驱动 (for mini2440)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved