驱动函数,请问系统是在哪里调用了驱动程序里的函数,什么时候调用?比如dm9000_open,dm9000_ioctl,
dm9000_phy_read,dm9000_phy_write等函数我想用它,怎么调用?
请高手指点
9 个解决方案
#1
有没有人能指点一下?帖子快沉了...
#2
#3
在用用程序编程的时候添加头文件 然后就可以使用了
#4
多谢指点,我看见网络应用程序编程都是用socket,没见有直接调用的,系统肯定调用了这些函数,不知道在哪里调用了?
#5
底层驱动封装已经封装好了
#6
我很想知道系统里面那个文件调用了这其中的一些函数,因为系统启动后就对硬件进行了初始化
ndev->open = &dm9000_open;
ndev->hard_start_xmit = &dm9000_start_xmit;
ndev->tx_timeout = &dm9000_timeout;
ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
ndev->stop = &dm9000_stop;
ndev->set_multicast_list = &dm9000_hash_table;
ndev->ethtool_ops = &dm9000_ethtool_ops;
ndev->do_ioctl = &dm9000_ioctl;
#ifdef CONFIG_NET_POLL_CONTROLLER
ndev->poll_controller = &dm9000_poll_controller;
#endif
db->msg_enable = NETIF_MSG_LINK;
db->mii.phy_id_mask = 0x1f;
db->mii.reg_num_mask = 0x1f;
db->mii.force_media = 0;
db->mii.full_duplex = 0;
db->mii.dev = ndev;
db->mii.mdio_read = dm9000_phy_read;
db->mii.mdio_write = dm9000_phy_write;
ndev->open = &dm9000_open;
ndev->hard_start_xmit = &dm9000_start_xmit;
ndev->tx_timeout = &dm9000_timeout;
ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
ndev->stop = &dm9000_stop;
ndev->set_multicast_list = &dm9000_hash_table;
ndev->ethtool_ops = &dm9000_ethtool_ops;
ndev->do_ioctl = &dm9000_ioctl;
#ifdef CONFIG_NET_POLL_CONTROLLER
ndev->poll_controller = &dm9000_poll_controller;
#endif
db->msg_enable = NETIF_MSG_LINK;
db->mii.phy_id_mask = 0x1f;
db->mii.reg_num_mask = 0x1f;
db->mii.force_media = 0;
db->mii.full_duplex = 0;
db->mii.dev = ndev;
db->mii.mdio_read = dm9000_phy_read;
db->mii.mdio_write = dm9000_phy_write;
#7
驱动属于设备层的,与块和字符设备属于同级别,但的确没有这些设备的这样上层函数,这是个主要区别。
如果能使网卡,系统会自动调用这些函数,包括事件的处理。 至于socket网络层函数属于上层函数,可以认为没有直接的控制关系,只有是在查找路由等时候,才要查找相应的设备接口和调用收发函数。
如果能使网卡,系统会自动调用这些函数,包括事件的处理。 至于socket网络层函数属于上层函数,可以认为没有直接的控制关系,只有是在查找路由等时候,才要查找相应的设备接口和调用收发函数。
#8
多谢各位分析解答,这些问题确实让我困惑,字符和块设备驱动都比较好理解,因为在应用程序里直接调用file_operations结构体成员函数,像open、read、write、close等函数,知道底层硬件什么时候做了什么事情,而网络应用程序socket编程只看到了连接建立、数据传输等操作,不清楚系统何时何处调用了驱动里面的函数,比如说如果对驱动进行了一些改动,改变了一些对硬件的操作,不知道这些操作什么时候被执行了呢?如果我想应用程序执行到一定阶段对dm9000寄存器和它PHY寄存器进行读写,该怎样去实现呢?是添加头文件直接调用底层驱动函数吗?
#9
socket发送数据,会查找相应的interface,并调用发送函数,当然不是socket直接调,要用过tcp/ip协议栈去调。
接收函数是自动发送给tcp/ip栈,然后socket可以读。 至于初始化和配置函数,是网卡自动加载时候进行的,属于设备自身的管理,跟socket没关
接收函数是自动发送给tcp/ip栈,然后socket可以读。 至于初始化和配置函数,是网卡自动加载时候进行的,属于设备自身的管理,跟socket没关
#1
有没有人能指点一下?帖子快沉了...
#2
#3
在用用程序编程的时候添加头文件 然后就可以使用了
#4
多谢指点,我看见网络应用程序编程都是用socket,没见有直接调用的,系统肯定调用了这些函数,不知道在哪里调用了?
#5
底层驱动封装已经封装好了
#6
我很想知道系统里面那个文件调用了这其中的一些函数,因为系统启动后就对硬件进行了初始化
ndev->open = &dm9000_open;
ndev->hard_start_xmit = &dm9000_start_xmit;
ndev->tx_timeout = &dm9000_timeout;
ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
ndev->stop = &dm9000_stop;
ndev->set_multicast_list = &dm9000_hash_table;
ndev->ethtool_ops = &dm9000_ethtool_ops;
ndev->do_ioctl = &dm9000_ioctl;
#ifdef CONFIG_NET_POLL_CONTROLLER
ndev->poll_controller = &dm9000_poll_controller;
#endif
db->msg_enable = NETIF_MSG_LINK;
db->mii.phy_id_mask = 0x1f;
db->mii.reg_num_mask = 0x1f;
db->mii.force_media = 0;
db->mii.full_duplex = 0;
db->mii.dev = ndev;
db->mii.mdio_read = dm9000_phy_read;
db->mii.mdio_write = dm9000_phy_write;
ndev->open = &dm9000_open;
ndev->hard_start_xmit = &dm9000_start_xmit;
ndev->tx_timeout = &dm9000_timeout;
ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
ndev->stop = &dm9000_stop;
ndev->set_multicast_list = &dm9000_hash_table;
ndev->ethtool_ops = &dm9000_ethtool_ops;
ndev->do_ioctl = &dm9000_ioctl;
#ifdef CONFIG_NET_POLL_CONTROLLER
ndev->poll_controller = &dm9000_poll_controller;
#endif
db->msg_enable = NETIF_MSG_LINK;
db->mii.phy_id_mask = 0x1f;
db->mii.reg_num_mask = 0x1f;
db->mii.force_media = 0;
db->mii.full_duplex = 0;
db->mii.dev = ndev;
db->mii.mdio_read = dm9000_phy_read;
db->mii.mdio_write = dm9000_phy_write;
#7
驱动属于设备层的,与块和字符设备属于同级别,但的确没有这些设备的这样上层函数,这是个主要区别。
如果能使网卡,系统会自动调用这些函数,包括事件的处理。 至于socket网络层函数属于上层函数,可以认为没有直接的控制关系,只有是在查找路由等时候,才要查找相应的设备接口和调用收发函数。
如果能使网卡,系统会自动调用这些函数,包括事件的处理。 至于socket网络层函数属于上层函数,可以认为没有直接的控制关系,只有是在查找路由等时候,才要查找相应的设备接口和调用收发函数。
#8
多谢各位分析解答,这些问题确实让我困惑,字符和块设备驱动都比较好理解,因为在应用程序里直接调用file_operations结构体成员函数,像open、read、write、close等函数,知道底层硬件什么时候做了什么事情,而网络应用程序socket编程只看到了连接建立、数据传输等操作,不清楚系统何时何处调用了驱动里面的函数,比如说如果对驱动进行了一些改动,改变了一些对硬件的操作,不知道这些操作什么时候被执行了呢?如果我想应用程序执行到一定阶段对dm9000寄存器和它PHY寄存器进行读写,该怎样去实现呢?是添加头文件直接调用底层驱动函数吗?
#9
socket发送数据,会查找相应的interface,并调用发送函数,当然不是socket直接调,要用过tcp/ip协议栈去调。
接收函数是自动发送给tcp/ip栈,然后socket可以读。 至于初始化和配置函数,是网卡自动加载时候进行的,属于设备自身的管理,跟socket没关
接收函数是自动发送给tcp/ip栈,然后socket可以读。 至于初始化和配置函数,是网卡自动加载时候进行的,属于设备自身的管理,跟socket没关