基于ACR的硬件抽象层结构及关键技术研究
时间:08-30
来源:互联网
点击:
3.2 对多用户接口设备虚拟驱动的管理
为实现内核虚拟驱动模块与实际接口单元的一一对应,必须解决各驱动模块的命名原则问题。将每个实际接口单元在接入段拓扑中的位置设置为不同的参数,在内部通信中这些参数作为传输数据的报头信息出现,根据它们可以生成一个唯一的字符串作为对应该接口单元的虚拟驱动设备名称,而且根据设备名称亦可还原出实际接口单元的拓扑信息,以供内部通信使用。在内核中维护一个由各注册设备名称所组成的动态链表,每个链表节点维护一个收发报文的数据队列,虚拟驱动与其他模块的数据交互都通过该链表进行。
3.3 对虚拟设备数据读写过程
对数据的读写过程主要是在虚拟驱动模块、内部通信模块及上层控制软件之间进行。虚拟驱动模块运行在内核空间,而内部通信模块运行在用户空间,因此,主要解决用户空间与内核空间的数据传递问题。通过memcpy_tofs()及memcpy_fromfs()系统调用用户空间与内核空间的数据交互。
在内核中维护一个由各注册设备名称所组成的动态链表,每个链表节点维护一个收发报文的数据队列,虚拟驱动与其他模块的数据交互都通过该链表进行。接收报文过程:内部通信模块将从接口单元接收的报文通过ioctl()调用传给虚拟驱动。该函数通过struct net_device *dev结构找到对应的虚拟设备的dev_ioctl()功能函数,调用memcpy_fromfs()将数据拷贝至内核空间,经过处理后通过netif_rx()函数通知上层协议有数据传入。发送报文过程:虚拟驱动将从上层软件取出的数据放至自身维护的通过虚拟接口设备名称维护的数据队列中,内部通信模块通过ioctl()论询各接口设备数据队列是否有数据可读,如果有数据,虚拟驱动通过memcpy_tofs()调用将数据拷贝至用户空间提供的缓冲区中。
文中针对大规模用户接入方式的特性,讨论了一种基于ACR/Tbit路由器的硬件抽象层的通用性软件结构设计及实现方式,并研究了其关键技术,包括基于UDP传输方式的内部通信的可靠性实现及基于多用户的动态模块加载技术,适用于路由器承载业务量的扩展和多用户接入特性,并且在上层软件实现中,基本上可以不考虑底层硬件细节,增强了路由器的开放性及可扩展性。
为实现内核虚拟驱动模块与实际接口单元的一一对应,必须解决各驱动模块的命名原则问题。将每个实际接口单元在接入段拓扑中的位置设置为不同的参数,在内部通信中这些参数作为传输数据的报头信息出现,根据它们可以生成一个唯一的字符串作为对应该接口单元的虚拟驱动设备名称,而且根据设备名称亦可还原出实际接口单元的拓扑信息,以供内部通信使用。在内核中维护一个由各注册设备名称所组成的动态链表,每个链表节点维护一个收发报文的数据队列,虚拟驱动与其他模块的数据交互都通过该链表进行。
3.3 对虚拟设备数据读写过程
对数据的读写过程主要是在虚拟驱动模块、内部通信模块及上层控制软件之间进行。虚拟驱动模块运行在内核空间,而内部通信模块运行在用户空间,因此,主要解决用户空间与内核空间的数据传递问题。通过memcpy_tofs()及memcpy_fromfs()系统调用用户空间与内核空间的数据交互。
在内核中维护一个由各注册设备名称所组成的动态链表,每个链表节点维护一个收发报文的数据队列,虚拟驱动与其他模块的数据交互都通过该链表进行。接收报文过程:内部通信模块将从接口单元接收的报文通过ioctl()调用传给虚拟驱动。该函数通过struct net_device *dev结构找到对应的虚拟设备的dev_ioctl()功能函数,调用memcpy_fromfs()将数据拷贝至内核空间,经过处理后通过netif_rx()函数通知上层协议有数据传入。发送报文过程:虚拟驱动将从上层软件取出的数据放至自身维护的通过虚拟接口设备名称维护的数据队列中,内部通信模块通过ioctl()论询各接口设备数据队列是否有数据可读,如果有数据,虚拟驱动通过memcpy_tofs()调用将数据拷贝至用户空间提供的缓冲区中。
文中针对大规模用户接入方式的特性,讨论了一种基于ACR/Tbit路由器的硬件抽象层的通用性软件结构设计及实现方式,并研究了其关键技术,包括基于UDP传输方式的内部通信的可靠性实现及基于多用户的动态模块加载技术,适用于路由器承载业务量的扩展和多用户接入特性,并且在上层软件实现中,基本上可以不考虑底层硬件细节,增强了路由器的开放性及可扩展性。
Linux 相关文章:
- 在Linux下使用ADSL(01-26)
- 使用 ADSL 动态 IP 建置虚拟主机(01-26)
- 做个ADSL+LINUX软路由器(01-26)
- 在嵌入式Linux实现802.11b无线网关(03-02)
- 如何保证Linux操作系统下的密码安全 (04-28)
- 在Linux系统下优化Oracle具体步骤(05-01)
