51CTO博客开发嵌入式Linux内核及驱动分析linux内核之旅中国源码网独孤阁的博客
/*******************************************************************************$function_name: check_online_status$function_decs: check online status$function_arguments:$function_return: &
网络驱动程序主要完成系统的初始化、数据包的发送和接收。在以前的内核版本中,网络设备的初始化主要由net_device数据结构中的init函数指针所指向的初始化函数来完成。在现在较新的2.6内核中,网络设备的初始化主要由device_driver数据结构中的probe函数指针所指向的函数来完成。数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程
在笔者撰写的《C语言嵌入式系统编程修炼之道》一文中,主要陈诉的软件架构是单任务无操作系统平台的,而本文的侧重点则在于讲述操作系统嵌入的软件架构,二者的区别如下图:嵌入式操作系统并不总是必须的,因为程序完全可以在裸板上运行。尽管如此,但对于复杂的系统,为使其具有任务管理、定时器管理、存储器管理、资源管理、 事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功
作者: 宋宝华 引言ARM是Advanced RISC Machines(高级精简指令系统处理器)的缩写,是ARM公司提供的一种微处理器知识产权(IP)核。ARM的应用已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。基于ARM 技术的微处理器应用约占据了32位RISC 微处理器75%以上的市场份额。揭开你的手机、MP3、 PDA,嘿嘿,里面多半藏着一个基于ARM的微处
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映 射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现 的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍
应用实例的编写实际上已经不属于Linux操作系统移植的范畴,但是为了保证本系列文章的完整性,这里提供一系列针对嵌入式Linux开发应用程序的实例。编写Linux应用程序要用到如下工具:(1)编译器:GCCGCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]。我们应该使用arm-linux-gcc。(2)调试
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: ·设备初始化、释放; ·提供各类设备服务; ·负责内核和设备之间的数据交换; ·检测和处理设备工作过程中出现的错误。 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序
刚来实验室的时候主要看的就是数据报在协议栈的具体传输过程,当时有过记录,但是很凌乱,最近又回头看了看相关知识和内核源代码,算是理清了思路,特整理在此.本篇笔记写的是2.4中数据报的接收过程,从网卡到网络层的具体路线,2.4中大部分网卡采用的是中断的方式接收数据(好像是从2.5以后开始支持 NAPI的,不太确定),本篇笔记总结的是非NAPI,即采用中断接受数据的路线.ok,开始进入主题. 当网卡接收
1.引言 本分析主要针对e1000网卡,驱动源码为7.3.20-k2。本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。通过此分析,希望可以理解驱动程序中的各个部分的关系,对网卡发送和接收数据包有直观的了解,同时也希望对设计网卡驱动程序有帮助。由于网卡驱动程序与硬件和操作系统都有很紧密的联系,故要把某些问题完全弄清楚,需要很多的经验与相关知识,介于自身的水平有限,且自
The journey of a packet through the linux 2.4 network stack 作者:Harald Welte laforge@gnumonks.org 1.4, 2000/10/14 20:27:43 翻译:yunyuaner yunyuaner@gmail.com 中的传递过程。由于自2.2 :IP我不是
static int __devinit rtl8139_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 函数功能描述:赋给pci_driver结构体中的probe函数指针,用于当PCI核心检测到一个需要控制的pci_dev时,对相应的设备进行始化工作。 附注:本函数的主要任务是创建并初始化net_device结构
最近在看《C专家编程》,看到第5章-对链接的思考,正好作为参考,对Linux下动态库的生成及链接方法作一下总结。Linux下动态库文件的扩展名为".so"(Shared Object)。按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号)。这样,线程函数库被称作libthread.so。静态库的文件名形式是libname.a。共享archive的文件名形式是libnam
IP报文可以看作一个包。 linux网卡驱动程序,将IP包添加14字节的MAC包头,构成MAC包。 MAC包中含有发送端和接收端的MAC地址信息。既然是驱动程序创建的MAC包头信息,当然可以随便输入地址信息的。主机伪装就是这么实现的。 驱动程序将MAC包拷贝到网卡芯片内部的缓冲区,就算完事了。有网卡芯片接手处理。 网卡芯片对MAC包,再次封装成物理帧,添加头部同步信息和CRC校验。然后丢到网线上,
网线可以看作一个高速公路,物理帧也就是辆汽车,网卡呢?或许是个加油站吧。 从这个角度将,汽车和加油站没有绝对的对应关系,所有的汽车都可以进入该加油站。 正常情况: 网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。 其次,网卡芯片将物理帧头去掉,得到MAC包。 网卡芯片检查MAC包内的目的MAC地址信息,和本网卡的MAC地址是否一致?不一致,抛弃。 网卡芯片
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号