从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码
系统编程推荐《高级unix环境编程》;
还有《unix网络编程》;
内核开发阅读内核源码阶段,从写驱动入手逐渐深入linux内核开发
参考书如下:
1.《linux device drivers》
2.《linux kernel development》
3.《understading the linux kernel》
4.《linux源码情景分析》
然后还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好。
项目需要使用pcie进行固件升级,为了适配原来的协议和应用,从pcie虚拟一个网卡出来进行升级。
因为Linux 内核本身已经含有了对TCP/IP协议栈的支持,最直接的方法就是开发一个基于PCI-E的虚拟网卡,这样有了IP地址,就可以通过TCP/IP协议栈进行通讯的了。
虚拟网卡的接口要求很简单,只要能够把协议栈送下来的IP包写到PCI-E的地址空间,即从虚拟网卡发送出去了;同时也能将其它虚拟网卡发送到PCI地址空间的IP包读出来,并送到上层协议栈上。虚拟网卡的接口要求很简单,只要能够把协议栈送下来的IP包写到PCI-E的地址空间,即从虚拟网卡发送出去了;同时也能将其它虚拟网卡发送到PCI地址空间的IP包读出来,并送到上层协议栈上。
其实这个过程就是把pcie共享内存看作网络phy,实现基于PCI共享内存的网卡设备驱动程序,这样就提供了TCP/IP协议栈中的数据链路层。而Linux内核中的网络子系统被设计成完全与协议无关。内核与网络驱动程序之间的交互,每次处理的是一个网络数据包;协议隐藏在驱动程序之后。这样应用程序就可以通过TCP/IP协议与网络上其他节点进行通讯了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)