如何在linux中注册设备

时间:2011-05-24 09:46:05

标签: linux linux-kernel linux-device-driver

我需要在linux中注册一个新设备但是我注意到在内核2.6.34中没有导出函数device_register ...哪个可能是解决方案?

3 个答案:

答案 0 :(得分:2)

我认为您应该使用register_blkdevregister_chrdev,具体取决于设备类型。

答案 1 :(得分:1)

在linux-2.6.32.28 / drivers / base

core.c:EXPORT_SYMBOL_GPL(device_register);

2.6.38的ANd也在同一个文件中 - 这让我在2.6.34中得出结论它应该在同一个文件中?

但如果您正在谈论mdio,则会发现以下符号(通过nm vmlinux):

ffffffff81b66fae t fixed_mdio_bus_exit
ffffffff81af4468 t fixed_mdio_bus_init
ffffffff813977f0 t fixed_mdio_read
ffffffff81397610 t fixed_mdio_write
ffffffff81a68760 d mdio_bus_class
ffffffff813971b0 T mdio_bus_exit
ffffffff81af4425 T mdio_bus_init
ffffffff81396fd0 t mdio_bus_match
ffffffff81a687e0 d mdio_bus_pm_ops
ffffffff81396ff0 t mdio_bus_restore
ffffffff81397050 t mdio_bus_resume
ffffffff81397100 t mdio_bus_suspend
ffffffff81a686e0 D mdio_bus_type
ffffffff813975d0 T mdiobus_alloc
ffffffff81397380 T mdiobus_free
ffffffff813972a0 T mdiobus_read
ffffffff81397430 T mdiobus_register
ffffffff813971e0 t mdiobus_release
ffffffff81397330 T mdiobus_scan
ffffffff813973c0 T mdiobus_unregister
ffffffff81397210 T mdiobus_write

和mii:

ffffffff81507a20 T dsa_slave_mii_bus_init
ffffffff81395b60 T phy_mii_ioctl

对于EXPORT_SYMBOL声明:

./drivers/of/of_mdio.c:
EXPORT_SYMBOL(of_mdiobus_register);

./drivers/net/phy/mdio-bitbang.c:
EXPORT_SYMBOL(alloc_mdio_bitbang);
EXPORT_SYMBOL(free_mdio_bitbang);

./drivers/net/phy/mdio_bus.c:
EXPORT_SYMBOL(mdiobus_alloc);
EXPORT_SYMBOL(mdiobus_register);
EXPORT_SYMBOL(mdiobus_unregister);
EXPORT_SYMBOL(mdiobus_free);
EXPORT_SYMBOL(mdiobus_scan);
EXPORT_SYMBOL(mdiobus_read);
EXPORT_SYMBOL(mdiobus_write);
EXPORT_SYMBOL(mdio_bus_type);

./drivers/net/phy/mdio-octeon.c:
EXPORT_SYMBOL(octeon_mdiobus_force_mod_depencency);

./drivers/net/fec_mpc52xx_phy.c:
EXPORT_SYMBOL_GPL(mpc52xx_fec_mdio_driver);

./drivers/net/mdio.c:
EXPORT_SYMBOL(mdio45_probe);
EXPORT_SYMBOL(mdio_set_flag);
EXPORT_SYMBOL(mdio45_links_ok);
EXPORT_SYMBOL(mdio45_nway_restart);
EXPORT_SYMBOL(mdio45_ethtool_gset_npage);
EXPORT_SYMBOL(mdio45_ethtool_spauseparam_an);
EXPORT_SYMBOL(mdio_mii_ioctl);

./drivers/net/fsl_pq_mdio.c:
EXPORT_SYMBOL_GPL(fsl_pq_mdio_bus_name);

./drivers/s390/net/qeth_core_main.c:
EXPORT_SYMBOL_GPL(qeth_mdio_read);

不确定这些是否有帮助?

您的类似问题发布在:

http://www.linuxforums.org/forum/kernel/178782-how-control-switch-marvel-88e6097-mdio-bus-mpc8306-processor.html

更清楚。有关MPC8306(硬件,Linux内核特定等)的更多信息,请访问:

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC830xKIT

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC8306

并根据这个:

http://patchwork.ozlabs.org/patch/21828/

详细阐述了MDIO的补丁并进行了一些解释。

在这里:

http://www.mail-archive.com/eldk@lists.denx.de/msg00235.html

还提到MPC8306的ELDK不需要更改支持。

无论如何,硬件信息可以在这里找到:

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC8306&fpsp=1&tab=Documentation_Tab

答案 2 :(得分:0)

O'Reilly这本关于设备驱动程序的好书可以在这里免费获得O'reilly。有点过时,但很好的参考。不是你要求的,而是一个很好的参考......