enc28j60 linux 驱动_Linux enc28j60网卡驱动移植(硬件spi和模拟spi)

本文档详细介绍了如何在Linux 2.6.22.6内核上移植enc28j60网卡驱动,包括硬件SPI和模拟SPI两种模式。当DM9000网卡驱动出现问题时,作者选择了enc28j60作为替代,并提供了移植过程中针对不同内核版本所需的代码修改,如屏蔽无关打印语句。移植工作主要涉及设置硬件资源,如SPI时钟、数据模式和中断处理。对于模拟SPI,需要创建spi_platform_dev.c文件,配置SPI设备和中断。而对于硬件SPI,使用了不同的资源和配置。最后,文中给出了加载驱动的步骤。
摘要由CSDN通过智能技术生成

本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因。刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动。

其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分配一些硬件资源即可。

由于我的内核版本老到掉牙,没有自带enc28j60的驱动,只能在网上找一个:

enc28j60.c

http://git.ti.com/ti-linux-kernel/ti-linux-kernel/blobs/7dac6f8df607929e51f4fd598d80bd009c45a9f8/drivers/net/enc28j60.c

enc28j60_hw.h

http://git.ti.com/ti-linux-kernel/ti-linux-kernel/blobs/7dac6f8df607929e51f4fd598d80bd009c45a9f8/drivers/net/enc28j60_hw.h

由于这个驱动是支持较新的内核,移植到2.6.22.6,只要改动3个地方好了。

... ...

static int enc28j60_set_hw_macaddr(struct net_device *ndev)

{

... ...

if (!priv->hw_enable) {

if (netif_msg_drv(priv)) {

/* [cgw]: 屏蔽一下几行 */

//DECLARE_MAC_BUF(mac);

//printk(KERN_INFO DRV_NAME

//    ": %s: Setting MAC address to %s\n",

//    ndev->name, print_mac(mac, ndev->dev_addr));

}

}

... ...

}

... ...

static void dump_packet(const char *msg, int len, const char *data)

{

printk(KERN_DEBUG DRV_NAME ": %s - packet len:%d\n", msg, len);

/* [cgw]: 屏蔽一下几行 */

//print_hex_dump(KERN_DEBUG, "pk data: ", DUMP_PREFIX_OFFSET, 16, 1,

//        data, len, true);

}

... ...

static int enc28j60_net_open(struct net_device *dev)

{

... ...

if (!is_valid_ether_addr(dev->dev_addr)) {

if (netif_msg_ifup(priv)) {

/* [cgw]: 屏蔽一下几行 */

//DECLARE_MAC_BUF(mac);

//dev_err(&dev->dev, "invalid MAC address %s\n",

//    print_mac(mac, dev->dev_addr));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值