当前位置: 技术问答>linux和unix
DM9000驱动的疑问!!!急死人啊
来源: 互联网 发布时间:2017-03-10
本文导语: 问题1:网络驱动中下面的这个枚举类型是用来描述什么的! enum { NETIF_MSG_DRV = 0x0001, NETIF_MSG_PROBE = 0x0002, NETIF_MSG_LINK = 0x0004, NETIF_MSG_TIMER = 0x0008, NETIF_MSG_IFDOWN = 0x0010, NETIF_MSG_IFUP = 0x0020, NETIF_MSG_RX_ERR = 0x004...
问题1:网络驱动中下面的这个枚举类型是用来描述什么的!
enum {
NETIF_MSG_DRV = 0x0001,
NETIF_MSG_PROBE = 0x0002,
NETIF_MSG_LINK = 0x0004,
NETIF_MSG_TIMER = 0x0008,
NETIF_MSG_IFDOWN = 0x0010,
NETIF_MSG_IFUP = 0x0020,
NETIF_MSG_RX_ERR = 0x0040,
NETIF_MSG_TX_ERR = 0x0080,
NETIF_MSG_TX_QUEUED = 0x0100,
NETIF_MSG_INTR = 0x0200,
NETIF_MSG_TX_DONE = 0x0400,
NETIF_MSG_RX_STATUS = 0x0800,
NETIF_MSG_PKTDATA = 0x1000,
NETIF_MSG_HW = 0x2000,
NETIF_MSG_WOL = 0x4000,
};
问题二:dm9000的probe函数中 db = netdev_priv(ndev);这句什么意思啊!
求大牛回答一下啊。。帮帮我这个菜鸟啊!
enum {
NETIF_MSG_DRV = 0x0001,
NETIF_MSG_PROBE = 0x0002,
NETIF_MSG_LINK = 0x0004,
NETIF_MSG_TIMER = 0x0008,
NETIF_MSG_IFDOWN = 0x0010,
NETIF_MSG_IFUP = 0x0020,
NETIF_MSG_RX_ERR = 0x0040,
NETIF_MSG_TX_ERR = 0x0080,
NETIF_MSG_TX_QUEUED = 0x0100,
NETIF_MSG_INTR = 0x0200,
NETIF_MSG_TX_DONE = 0x0400,
NETIF_MSG_RX_STATUS = 0x0800,
NETIF_MSG_PKTDATA = 0x1000,
NETIF_MSG_HW = 0x2000,
NETIF_MSG_WOL = 0x4000,
};
问题二:dm9000的probe函数中 db = netdev_priv(ndev);这句什么意思啊!
求大牛回答一下啊。。帮帮我这个菜鸟啊!
|
问题1:
这些都是phy这一层能够探测到的事件。
如果你还不知道mac 和 phy的话,wiki之,这里就不科普了。
每一个网卡驱动,都有自己的数据结构。问题二会说。这个数据结构是特定厂商的程序员自己设计的,但是一般都含有msg_enable。
初始化的时候填充msg_enable ,决定哪些事件要上报。没有什么大意思
问题2:
这个比较重要和通用。linux下一个驱动可以同时支持多个相同的设备。这就要求驱动里关于设备的描述不允许使用全局变量,让各个物理设备只使用自己的数据结构。
所以驱动里
struct board_info *db; struct net_device *ndev;
都是局部变量。但是又需要board_info 和net_device 二者建立一一对应关系,而board_info 是一个自定义结构
,内核并不好用list之类的把他们联系起来。只要另外想办法。
创建net_device 时已经为board_info 留了空间:
ndev = alloc_etherdev(sizeof(struct board_info));
这样, 就把board_info 放入net_device 里,建立了联系。
db = netdev_priv(ndev) 就是把board_info 从net_device 里取出来而已。
这些都是phy这一层能够探测到的事件。
如果你还不知道mac 和 phy的话,wiki之,这里就不科普了。
每一个网卡驱动,都有自己的数据结构。问题二会说。这个数据结构是特定厂商的程序员自己设计的,但是一般都含有msg_enable。
初始化的时候填充msg_enable ,决定哪些事件要上报。没有什么大意思
问题2:
这个比较重要和通用。linux下一个驱动可以同时支持多个相同的设备。这就要求驱动里关于设备的描述不允许使用全局变量,让各个物理设备只使用自己的数据结构。
所以驱动里
struct board_info *db; struct net_device *ndev;
都是局部变量。但是又需要board_info 和net_device 二者建立一一对应关系,而board_info 是一个自定义结构
,内核并不好用list之类的把他们联系起来。只要另外想办法。
创建net_device 时已经为board_info 留了空间:
ndev = alloc_etherdev(sizeof(struct board_info));
这样, 就把board_info 放入net_device 里,建立了联系。
db = netdev_priv(ndev) 就是把board_info 从net_device 里取出来而已。
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。