[juliantec_list] Re: 询问

  • From: "Yihe Chen" <yihect@xxxxxxxxxxxxxx>
  • To: "sd-bz-wd" <sd-bz-wd@xxxxxxx>, <run-linux-on-arm@xxxxxxxxxxxxxx>
  • Date: Thu, 28 Jul 2011 22:07:03 +0800

如果将来想要从事嵌入式驱动编程或
者嵌入式系统移植方面的工作,需要
对linux编程的网络编程学的很精通吗

你是说socket应用层的编程吧?对于做
系统程序研发(系统程序移植,驱动程序
开发)的人来说,可能更重要的是明白
TCP/IP 协议栈的分层以及封装和解包
的工作原理之类的知识。这些知识比
单纯掌握 socket 的应用层开发要相对
困难一些。

为什么说更重要的要明白这些知识?
因为在linux内核里面完成网络传输
功能的是一个被称为协议栈的软件
模块。这个模块需要依赖于特定的
网络驱动程序来工作。所以如果
你开发的驱动是某个网络芯片的驱
动程序,比方CS8900或者DM9000
之类的,那你就必须对整个协议栈
的操作原理有些了解才好。

实际上,在我们看来,这个协议栈
是集成在 linux 内核 中的用于提供
网络传输功能的中间件。那在嵌入
式产品中,有很多采用的操作系统
并非 linux ,而是像 ucos 这样简单
的多任务调度器。在ucos 中是不包
含协议栈的,所以假如产品要求使用
网络功能的话,那就必须再另外移植
一个像 lwIP 这样的协议栈才行,这
要求移植者必须非常了解 TCP/IP
协议栈的工作原理才行。

另外,在嵌入式产品研发中,有的场合
使用 TCP/IP 有线以太网来传输是不大
合适的。比方有很多场合需要使用像
蓝牙,zigbee 之类的无线传输技术。
这些无限传输技术所需要的协议栈,
有的已经集成在 linux 内核代码树中
了,如 bluetooth; 也有的尚还没有
集成到内核树里面去,比方zigbee
就没有。所以这时候,需要你自己
根据 Linux 内核里面对现有其他类
型的协议栈的实现方式来实做一个
全新的协议栈或者移植进去一个。
这就要求你比较了解协议栈的实现
原理。


?因为我以前没有接触过关于网络方
面的事情,所以学起来感觉比较费劲
,我想如果 我想要将来从事的工作不
需要非常好的网络编程方面的知识的
话,我想只是了解一下 linux的网络编
程方面的知识。
  谢谢!


实际上,掌握 socket 网络编程还是不太
困难的。关键还是在于明白下面的协议
栈的操作原理。你感觉困难的原因,可能
还是你的老师没有说清楚底层协议栈的操
做原理。也许上课老师只是介绍接口函数:
比方先 socket,再用 bind, 然后用 listen之
类的函数,光讲这些可能并不会有什么好的
效果。实际上,你的老师应该同步介绍底层
的三次握手过程和TCP/IP连接的状态变换
过程才行,而不是只简单的讲讲几个操作
函数的使用。

对一个系统软件工程师来说,网络协议栈的
东西更像是一种基本的素质,也许很多
时候,你并不会注意到它的重要性,但
很多时候,随着你的工作内容不一样,
说不定哪天就要求你移植一个协议栈或
开发一个网络驱动程序,那你掌握的协议
栈知识就派上用场了。

所以,我们的观点是:千万不要去排斥
socket/协议栈相关的知识,通过应用层
socket 程序的开发来学习协议栈的操作
原理。以后工作中,可能也还是从 socket
应用程序的开发开始,所以不要放弃,学习
过程中碰到什么问题,可以到这里讨论。



Learning, Just As Your Favourite Thing!

Maillist, See http://www.juliantec.info/mlist/mail-lists.html
JulBlog, See http://www.juliantec.info/julblog/summary.php
JulWiki, See http://www.juliantec.info/wiki/


Other related posts: