2008年7月25日星期五

学习kernel网络体系结构(3)

尽管,现在开始学习内核,我感觉自己的基础还是很不好的,没有进行一些系统的学习,而且基础部分也是七零八散的。没有把过去学到运用起来。所以现在还是以学习基础为主,不要好高骛远了!
这次主要写的是关于net的也就是说很多函数在dirvers/net/下还有在net/core/下
除了字符设备和块设备,网络设备是Linux内核中的第三类适配器。他们在设备文件系统/dev/中没有表示,这就意味着不能通过简单的读写来操作来访问他们。网络适配器不能被邦定到单个进程,他们运行在内核中并且独立于各用户进程[RuCo01]。
顺便添加几本好的书哦![RuCo01] Alessandro Rubini and Jonathan Corbet. Linux Device Drivers. Sebastopol, CA: O'Reilly & Associates, 2d ed., 2001. Online version at http://www.oreilly.com/catalog/linuxdrive2/index.html. (Visited on January 10, 2004.)
[BBDK+01] Michael Beck, Harald Böhme, Mirko Dziadzka, Ulrich Kunitz et al. Linux Kernel Programming. Boston: Addison-Wesley, 3d ed., 2002.
[BoCe00] Daniel P. Bovet and Marco Cesati. Understanding the Linux Kernel. Beijing and Cambridge, MA: O'Reilly, 2000
有空要看看哦!
我在include/linux/netdevice.h 这个目录下看net_device结构,此结构是内核中的所有网络设备的基础数据结构。它不仅包含网络适配器的硬件信息(中断,端口,驱动程序函数等等),还包括面向更高层网络协议的网络设备配置数据(IP地址,子网掩码等)。其中包含了大量的函数指针,更高层协议通过它们的全局名称来调用它们,随后驱动程序的硬件相关方法被各网络设备调用。

我认为还是先大体浏览一边而后在进行,认识细致的读和理会,它们中的每一个数据结构的意思都要明白和了解。

现在,大体把其中的主要的部分列举,它们中有网络设备的通用字段;硬件相关字段;网络层上的字段。Linux内核中的所有网络设备都被一个线性表连接起来。
网络设备的注册与注销,哦,drivers/net/net_init.c这个文件竟然在2.6.26中没有找到。
MAC协议(FDDI,HIPPI),难道是媒体介质访问控制(Medium Access Control,MAC)协议,应该看看了。
网络设备的开启和关闭,相关代码在net/core/dev.c下,同样,创建和寻找网络设备的代码,还有为状态改变而设计的通知链,在网络设备上进行传输,网络设备中的初始化网络适配器。
分配系统资源的帮助者函数
request_region() , release_region() , check_region()在kernel/resource.c下
request_irq() , free_irq()在kernel/irq.c下
request_dma() , free_dma()在kernel/dma.c下
但是,打开和关闭网络适配器,传输数据,包传输过程的问题,运行配置,适配器相关的ioctl()命令,网络设备的统计信息,适配器层次的多播支持,的主要函数在drivers/net/isa_skeleton.c下

没有评论:

time