snifer

[原创]ADSP-BF516网络功能实现

0
阅读(2964)

最近需要ADSP-BF516实现上网功能,深入研究了ADSP-BF516的Blackfin处理器。它集成了双MAC信号处理引擎,正交RISC类微处理器指令集以及单程指令多数据(SIMD). Blackfin处理器的频率高达400MHz,具有两个16位MAC,两个40位ALU,4个8位视频ALU以及40位移位寄存器,主要用在VoIP,工业控制,马达控制,微微蜂窝,网络音频和测试仪表。

在操作系统中,网络接口在文件系统中的角色就象被安装的块设备。一个块设备在blk_dev数组和其它核心结构中注册它的特征,接着按照要求通过它的request_fn函数“发送”和“接收”块。类似地,一个网络接口必须在特定的数据结构中注册自己,从而在与外部世界交换包时可以被调用。

安装的磁盘与包发送接口有几个重要的不同。首先,磁盘以一个结点的形式存在于/dev目录,而网络接口并不在文件系统中出现。不过两者之间最大的不同在于:磁盘是被请求向核心发送一个缓冲区,而网络接口则是请求向核心推送进来的包。

UcLinux的网络子系统被设计成完全协议无关的。这对网络协议(IP vs. IPX 或其它协议)和硬件协议(以太网vs.令牌环等)都是如此。网络驱动程序和核心之间的交互一次处理一个网络包;这允许协议可以干净地对驱动程序隐`藏起来,而物理传输则可以对协议隐藏起来。

本章描述网络接口如何与核心的其它部分紧密合作,并给出一个基于内存的模块化的网络接口,称之为(你可能已经猜到了)snull。为简化讨论,这个接口使用以太网硬件协议并传送IP包。通过snull获得的知识可以很好地应用于IP以外的协议,从以太网移到其它硬件协议只要求你对使用的物理协议有所了解。

snull的另一个限制是它不能在Linux1.2中编译。再说一遍,这样做只是为了保持代码简单,并避免在snull中加入一些另人厌倦的条件。

下面是几个可能的网络号码。一旦你把这几行写到/etc/networks,你就可以用名字来称呼这些网络。这些值是从保留私用的号码范围中选取的。

snullnet0 192.168.0.0

snullnet1 192.168.1.0

下面是写入/etc/hosts的可能的主机号码:

  • local0

192.168.0.99 remote0

192.168.1.99 local1

  • remote1

不过如果你的计算机已经连到了一个网络上,那么一定要注意。你选择的号码有可能是实际的Internet或intranet的号码,把它们分配给你的接口可能会妨碍与真正主机的通信。而且,尽管我给出的这些号码不是实际的Internet号,但也有可能被你的私用网所适用,如果它处于防火墙之后的话。

  • 不论你选择什么号码,你可以通过发出下面的命令来正确地设置接口:

    (代码304 #1)

    到此为止,接口的“远”端已经可以到达了。下面的屏幕快照显示了我的主机是如何通过snull到达remote0和remote1的。

    (代码304 #2)

    注意你不可能达到属于这两个网络的其它主机,因为在包的地址被改变并被接收到后,你的计算机会把它丢弃,在实际实现中,这一点一定要认真考虑。

Baidu
map