![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核学习
文章平均质量分 91
jackyding26791
这个作者很懒,什么都没留下…
展开
-
linux内核源码中常见宏定义
1. gcc的__attribute__编绎属性要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)转载 2012-04-19 15:40:55 · 924 阅读 · 0 评论 -
在linux中的likely和unlikely
在linux中判断语句经常会看到likely和unlikely,例如:if(likely(value)){}else{}简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。这两个宏对程序运行结果没有影响,只是用于提高程序效率。其实现和gcc编译器密切相关。具体点说,就是如果你觉转载 2011-12-26 17:31:53 · 456 阅读 · 0 评论 -
linux网卡驱动分析之驱动加载
本文以Intel e1000e网卡驱动为例,分析网卡驱动的基本流程,内核版本为2.6.18。一、驱动注册网卡是一种PCI设备,为了正确的注册到内核,所有的PCI设备驱动都必须创建一个主要的结构体struct pci_driver:struct pci_driver { struct list_head node; char *name; const struc原创 2013-03-09 13:17:03 · 3639 阅读 · 0 评论 -
linux网卡驱动分析之probe函数
probe函数中一般完成一下任务:1、通知内核设备执行DMA的寻址能力,说明设备支持64位还是32位的DMA地址。如果不支持64位的地址,则尝试32位的:err = dma_set_mask(pci_dev_to_dev(pdev), DMA_BIT_MASK(64)); if (!err) { err = dma_set_coherent_mask(pci_dev_to原创 2013-03-16 10:11:54 · 6285 阅读 · 0 评论