- 博客(18)
- 资源 (24)
- 收藏
- 关注
转载 debian包管理
apt-cache search # ------(package 搜索包)apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)apt-get install # ------(package 安装包)apt-get install # -----(package --reinstall 重新安装包)apt-get -f install # ---
2011-06-17 20:16:00 457
原创 内联函数
inline函数我们看下面的函数,函数体中只有一行语句: double Average(double total, int number){ return total/number; } 定义这么简单的函数有必要吗?实际上,它还是有一些优点的:第一,它使程序更可读;第二,它使这段代码可以重复使用。但是,它也有缺点:当它被频繁地调用的时候,由于调用函数的开销,会对应用程
2011-06-17 15:32:00 440
原创 struct sk_buffer
sk_buff结构体 收藏struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。 这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。 L4向L3传递前会添加一个L4的头部,同样,L3向L2传
2011-06-15 10:50:00 752
原创 linux 常用命令
uname -a 查看内核版本ls -al 显示所有文件的属性pwd 显示当前路径cd - 返回上一次目录 cd ~ 返回主目录date s 设置时间、日期cal 显示日历 cal 2006bc 计算器具man & info 帮助手册locale 显示当前字体 locale -a 所有可用字体 /etc/sysconfig/i18n设置文件LANG=en 使用英
2011-06-14 15:00:00 377
原创 网络编程中数据格式的转换
inet_aton : 用于将32位的数字点形式表示的字符串IP地址与32位的网络字节序顺序的二进制形式的IP地址进行转换,成功时返回1,否则返回0,转换后的IP地址存储在参数inp中。inet_ntoa : 将网络地址转换成"."点隔的字符串格式。htonl : 表示将32位的主机字节顺序转化为32位的网络字节顺序。htons : 表示将16位的主机字节顺序转化为16位的网络字节顺序
2011-06-11 17:53:00 604
原创 platform_driver,plateform_device,device,driver,net_device
内核中的platform driver机制需要将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform device提供的标准接口进行申请并使用。这样可以提高驱动和资源管理的独立性。本文的目的就是希望弄清楚platform device和driver之间的关系。1.1 相关数据结构1.1.1 device这个结构体定义为:st
2011-06-09 20:52:00 926
原创 网络驱动
工作需要写了我们公司一块网卡的Linux驱动程序。经历一个从无到有的过程, 深感技术交流的重要。Linux作为挑战微软垄断的强有力武器,日益受到大家的喜 爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux技术 和应用,促进Linux在中国的普及。 本文可随意转载,但请不要在盈利性出版物上刊登。 Linux操作系统网络驱动程序编写 一.Lin
2011-06-09 19:46:00 463
原创 网络驱动
工作需要写了我们公司一块网卡的Linux驱动程序。经历一个从无到有的过程, 深感技术交流的重要。Linux作为挑战微软垄断的强有力武器,日益受到大家的喜 爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux技术 和应用,促进Linux在中国的普及。 本文可随意转载,但请不要在盈利性出版物上刊登。 Linux操作系统网络驱动程序编写 一.Lin
2011-06-09 19:45:00 796
原创 mac+PHY
问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。问:以太网MAC是什么?答:MAC就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准
2011-06-09 18:42:00 2053
原创 网卡(MAC+PHY)
一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。1.网卡的基本结构 以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为P
2011-06-09 18:30:00 3017
原创 net_device结构理解
结构体net_device代表了一个网络设备接口,它是我们理解网络设备驱动程序的关键。这里,我们选择其中的一些重要成员,一一作详细分析,并结合以太网设备,看看Linux内核是如何为以太网设备提供结构体中某些成员的缺省值的。 在Linux内核源代码中是这样为这个结构体作注释的:实际上,这个结构体是一个很大的错误,它把I/O数据和更高层的数据混合在一起,而且它几乎必须知道INET模块
2011-06-09 15:38:00 879
原创 notification机制
1. 基本机制 1)数据结构 struct notifier_block { int (*notifier_call)(struct notifier_block *self, unsigned long, void *); struct notifier_block *next; int priority; /*用于对注册者进行优先级排队,高优先级的处理例程将被优先执行,由注册者自己指
2011-06-08 20:50:00 1975
原创 containof和list_entry的实现方式
他们实现方式如下:#define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))其中,(unsigned long)(&((type *)0)->member))是关键,它计算出了成员变量member在结构体中的偏移量
2011-06-07 09:47:00 1110
原创 wait_queue_t,wait_queue_head_t的认识
wait_queue_head_t属于设备,设备可以维护几个wait_queue_head_t以等待不同类型的事件,wait_queue_t跟进程相关,wait_event把wait_queue_t的进程加入到设备的wait_queue_head_t,中来等待事件的发生,事件发生后wake_up_interruptible会唤醒设备中wait_queue_head——t中的所有wait_queue
2011-06-03 11:53:00 1274
原创 atomic_t原子操作
<br /> 所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:typedef str
2011-06-02 15:50:00 1024
原创 sleep与信号
<br />进程进入sleep时,发生了信号,handler执行完之后还会进sleep吗?这个问题太傻了,sleep本身就是进程放弃了cpu,此时control flow在其他进程,sleep使用系统的定时器实现的,cpu并没有focus在sleep这个函数(暂且称为函数),信号来了,进程又获得了cpu,他是不会主动放弃cpu,除非他等待的条件不满足。
2011-06-01 11:37:00 591
原创 poll非阻塞IO的理解
<br />先理解阻塞与非阻塞。阻塞就是由于工作不能立刻完成,进程放弃cpu,非阻塞就是任务不能立刻完成,函数直接返回或者一直轮询操作。<br />起初想不明白如果对文件的可读进行poll的话,如果没有数据,进程就会睡眠从而引起切换,这不是典型的阻塞吗?后来想了下,poll虽然拥塞了,但对于之后的read而言,只有当有数据写入时,poll才会返回,read就可以顺利执行而不必睡眠,对read而言是阻塞的
2011-06-01 10:55:00 1620
原创 poll函数的实现原理
<br />如果当前不可读,那么在sys_poll->do_poll中当前进程就会睡眠在等待队列上,这个等待队列是由驱动程序提供的(就是poll_wait中传入的那个)。当可读的时候,驱动程序可能有一部分代码运行了(比如驱动的中断服务程序),那么在这部分代码中,就会唤醒等待队列上的进程,也就是之前睡眠的那个,当那个进程被唤醒后do_poll会再一次的调用驱动程序的poll函数,这个时候应用程序就知道是可读的了。
2011-06-01 09:16:00 1533
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人