对于PCI的学习,在文章《初识PCI》和《再识PCI:一个PCI驱动实例》中有介绍,文中使用大量代码进行演示。但总觉得有些认知不到位。于是就再写一文。
一、PCI驱动一般框架
先看一下PCI驱动一般框架的示例代码:
#include <linux/pci.h>
#include <linux/module.h>
static int misc_pci_probe(struct pci_dev *dev,
const struct pci_device_id *ent)
{
switch (dev->device)
...
记一次由PCI BAR配置不正确引发的硬盘IO调度io_schedule阻塞的经历
五一前,接到一个bug,大意是说设备接固态硬盘时跑新内核会出现卡死导致WDT复位,使用旧内核没问题。新内核是去年年底别人编译的,旧内核是3年前现在已离职2年的人编译的,现在安排我解决这个问题。但其时正在进行其他部门的紧急测试任务,于是请求节后解决。我最近的计划是学习以太网驱动,而五一没什么计划就去看了,本来想研究SCSI的,但先等查问题后再说吧。
一、问题定位
从信息分析,内核启动后在打...
再识PCI:一个PCI驱动实例
之前写了第一篇关于PCI的文章,当时只是作为入门的接触笔记,后来对PCI又研究了一下,主要包括PCI设备的扫描过程及PCI驱动注册过程。
本文主要给出一个PCI实例,并在内核中做很多的打印以便跟踪其过程。代码参考i2c-i801.c文件,在intel平台上试验。
对于学习,我想像力一向不好,只能靠笨方法来学习。
代码如下:
/**
* @file pci_driver_test.c
* @author Late Lee
* @date Fri Apr 24 20:21:...
初识PCI
话说,小弟接触计算机(不是“电脑”)也有很多个年头了,很多名词也能朗朗上口,但仅仅限于名词,对其中的原理却没有深入的了解。像MS DOS,其实也是前段时间才真正“安装”了一个用来更新设备的BIOS。而如USB、ISA、PCI这些简称,同样地不了解,以至于不敢与人谈自己是嵌入式工程师。大学时没有计算接口这一类的课程,自己找书看了,但发现里面讲的和平时所学的差别太大,又感觉自己后面不会用到,所以也就囫囵吞枣一遍,后来终于还是有所接触,只不过徒知其名,不知其理。