S3C2440驱动简析——DM9000网卡驱动(3)

     书接上回,在介绍dm9000_driver三条支线中的两条.driver 和.remove之后,接下来的两篇博文主要介绍.probe。不是吧,前面说什么还有朋友不知所云?请先看回本系列第一篇博文,熟悉这个网卡驱动程序的构成框架再说。(http://blog.csdn.net/jarvis_xian/archive/2011/06/10/6537446.aspx

 

先贴出.probe函数如下

主要完成的任务是:探测设备获得并保存资源信息,根据这些信息申请内存和中断,最后调用register_netdev注册这个网络设备。

1) 首先定义了几个局部变量:

    struct dm9000_plat_data *pdata = pdev->dev.platform_data;
    struct board_info *db; /* Point a board information structure */
    struct net_device *ndev;

2) 初始化一个网络设备。关键系统函数:alloc_etherdev()

3) 获得资源信息并将其保存在board_info变量db中。关键系统函数:netdev_priv(), 

    platform_get_resource()

4) 根据资源信息分配内存,申请中断等等, 并将申请后的资源信息也保存到db中,并且填充ndev中的参

    数。 关键系统函数:request_mem_region(),  ioremap()。 自定义函数:dm9000_set_io()

5) 完成了第4步以后,回顾一下db和ndev中都有了什么:

    struct board_info *db:

                 addr_res -- 地址资源

                 data_res -- 数据资源

                 irq_res    -- 中断资源

                 addr_req -- 分配的地址内存资源

                 io_addr   -- 寄存器I/O基地址

                 data_req -- 分配的数据内存资源

                 io_data   -- 数据I/O基地址

                 dumpblk  -- IO模式

                 outblk     -- IO模式

                 inblk        -- IO模式

                 lock         -- 自旋锁(已经被初始化)

                 addr_lock -- 互斥锁(已经被初始化)

     struct net_device *ndev:

                 base_addr  -- 设备IO地址

                 irq              -- 设备IRQ号

6) 设备复位。硬件操作函数dm9000_reset()

7) 读一下生产商和制造商的ID,应该是0x9000 0A46。 关键函数:ior()

8) 读一下芯片类型。

========以上步骤结束后我们可以认为已经找到了DM9000========

9) 借助ether_setup()函数来部分初始化ndev。因为对以太网设备来讲,很多操作与属性是固定的,内

    核可以帮助完成。

10) 手动初始化ndev的ops和db的mii部分。

11) (如果有的话)从EEPROM中读取节点地址。这里可以看到mini2440这个板子上没有为DM9000外

     挂EEPROM,所以读取出来的全部是0xff。见函数dm9000_read_eeprom。 关于外挂EEPROM,

     可以参考datasheet上的7.EEPROM Format一节。

12) 很显然ndev是我们在probe函数中定义的局部变量,如果我想在其他地方使用它怎么办呢? 这就需

     要把它保存起来。内核提供了这个方法,使用函数platform_set_drvdata()可以将ndev保存成平台

     总线设备的私有数据。以后再要使用它时只需调用platform_get_drvdata()就可以了。

13) 使用register_netdev()注册ndev。

(以上13点总结摘抄自ypoflyer大哥的文章)

 

注意到代码中最后两个重要的结构体dm9000_netdev_ops 和dm9000_ethtod_ops,将在之后的博文逐一介绍,时间关系,在此打住。

本系列课程链接地址

DM9000网卡驱动(1)http://blog.csdn.net/jarvis_xian/archive/2011/06/10/6537446.aspx
DM9000网卡驱动(2)http://blog.csdn.net/jarvis_xian/archive/2011/06/12/6539931.aspx
DM9000网卡驱动(3)http://blog.csdn.net/jarvis_xian/archive/2011/06/13/6542411.aspx
DM9000网卡驱动(4)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6545109.aspx
DM9000网卡驱动(5)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6547203.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值