设为首页 加入收藏

TOP

Linux2.6.39下DM9K驱动源码分析(四)
2014-11-24 13:59:59 来源: 作者: 【 】 浏览:4
Tags:Linux2.6.39 DM9K 驱动 源码 分析
**************************************************************************************************************************************


*到此为止总结下prob究竟做了些什么事,那些结构里面多了什么


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、获得dm9k所使用的平台资源并将其保存在board_info变量db中。关键系统函数:netdev_priv(), platform_get_resource()


4、根据资源信息分配内存,申请中断等等, 并将申请后的资源信息也保存到db中,并且填充ndev中的参数。 关键系统函数:request_mem_region(), ioremap()。


resource_size(),自定义函数:dm9000_set_io(db, iosize);


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号


***************************************************************************************************************************************/


return 0;


/*****************************************************************************************************************************************


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


7、 读一下芯片类型。


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


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


9、手动初始化ndev的ops和db的mii部分。


10、(如果有的话)从EEPROM中读取节点地址。这里可以看到mini2440这个板子上没有为DM9000外挂EEPROM,所以读取出来的全部是0xff。见函数dm9000_read_eeprom。 关于外挂EEPROM,可以参考datasheet上的7.EEPROM Format一节。


11、很显然ndev是我们在probe函数中定义的局部变量,如果我想在其他地方使用它怎么办呢? 这就需要把它保存起来。内核提供了这个方法,使用函数platform_set_drvdata()可以将ndev保存成平台总线设备的私有数据。以后再要使用它时只需调用platform_get_drvdata()就可以了。


12、使用register_netdev()注册ndev。


首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux2.6.39在S3C2440上的移植 下一篇Java 如何创建/删除/修改/复制目..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: