当前位置: 技术问答>linux和unix
Linux2.6.36,Fec驱动(模型)问题请教
来源: 互联网 发布时间:2016-11-08
本文导语: 本帖最后由 suyangwei 于 2011-02-17 10:25:24 编辑 rtl8201网口芯片。将内核从Linux2.6.19.2升级到Linux2.6.36。 我在arch中增加了fec对应的platform_device定义,并注册到了bus(mdio_bus)中。 Linux2.6.36驱动代码fec.c文件中, fec_enet_module_ini...
我在arch中增加了fec对应的platform_device定义,并注册到了bus(mdio_bus)中。
Linux2.6.36驱动代码fec.c文件中,
fec_enet_module_init(void)函数,经过一些列调用,在phy_connect函数里调用失败。
我目前的理解是:Linux2.6.36中Fec驱动有platform_device 、net_device、device、phy_device这几个概念。
device,我并没有在内核中添加,所以phy_connect函数在调用bus_find_device_by_name就返回失败了。
但我不知道device在该驱动模型中,究竟是个什么逻辑概念,应该怎样添加并将其注册到bus中?
includelinuxplatform_device.h文件platform_device定义中,
struct device dev是做什么用的呢?
struct platform_device {
const char * name;
int id;
struct device dev;
};
struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
void (*handler)(struct net_device *), u32 flags,
phy_interface_t interface)
{
struct phy_device *phydev;
struct device *d;
int rc;
/* Search the list of PHY devices on the mdio bus for the
* PHY with the requested name */
d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
if (!d) {
pr_err("PHY %s not foundn", bus_id);
return ERR_PTR(-ENODEV);
}
phydev = to_phy_device(d);
rc = phy_connect_direct(dev, phydev, handler, flags, interface);
if (rc)
return ERR_PTR(rc);
return phydev;
}
|
没弄过网络驱动模型,帮顶