唯客微技术杂谈
Linux驱动开发杂记(0x0F) - Cannot access memory at address Linux驱动开发杂记(0x0F) - Cannot access memory at address
按照教程Linux内核调试环境搭建(基于ubuntu12.04) 配置kgdb双机调试时,出现一下错误: (gdb) set serial baud 115200 (gdb) target remote /dev/t
Linux驱动开发杂记(0x0E) - vm_area_struct结构体 Linux驱动开发杂记(0x0E) - vm_area_struct结构体
 内存映射信息放在vma参数中,注意,这里的vma的数据类型是struct vm_area_struct,它表示的是一块连续的虚拟地址空间区域,在函数变量声明的地方,我们还看到有一个类似的结构体struct vm_struct,这个数
Linux驱动开发杂记(0x0D) - remap_pfn_range() Linux驱动开发杂记(0x0D) - remap_pfn_range()
驱动实现mmap主要是调用: int remap_pfn_range(struct vm_area_struct *, unsigned long addr, unsigned long pfn, unsigned
Linux驱动开发杂记(0x0C) - SetPageReserved() Linux驱动开发杂记(0x0C) - SetPageReserved()
SetPageReserved()   随着linux的长时间运行,空闲页面会越来越少,为了防止linux内核进入请求页面的僵局中,Linux内核采用页面回收算法(PFRA)从用户进程和内核高速缓存中回收内存页框,并根据需要把要回收页框
Linux驱动开发杂记(0x0B) - 内核计数 Linux驱动开发杂记(0x0B) - 内核计数
Linux内核和驱动开发时,由于各种结构体变量见相互引用,因此,当回收内存时,由于引用没有清理,很容易发生内存指向错误。因此,Linux使用引用计数方式来代替简单的malloc,free。不过由于Linux的内核是以C为开发语言,不是C+
Linux驱动开发杂记(0x0A) - errno含义 Linux驱动开发杂记(0x0A) - errno含义
#define EPERM 1 /* Operation not permitted */ 操作不允许 #define ENOENT 2 /* No such file or directory */
Linux驱动开发杂记(0x09) - likely()与unlikely() Linux驱动开发杂记(0x09) - likely()与unlikely()
likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢? 首先明确: if (likely(value))等价于if (value) if (unlikely(value))等价于if
Linux驱动开发杂记(0x08) - I/O内存 Linux驱动开发杂记(0x08) - I/O内存
  尽管 I/O 端口在x86世界中非常流行,但是用来和设备通讯的主要机制是通过内存映射的寄存器和设备内存,两者都称为I/O 内存,因为寄存器和内存之间的区别对软件是透明的。   I/O 内存仅仅是一个类似于RAM 的区域,处理器
Linux驱动开发杂记(0x07) - I/O端口 Linux驱动开发杂记(0x07) - I/O端口
## 1 申请I/O 端⼝: 在驱动还没独占设备之前,不应对端⼝进⾏操作。内核提供了⼀个注册接⼝,以允许驱动声明其需要的端⼝: /* request_region告诉内核:要使⽤first开始的n个端⼝。参数name为设备名。 如果分
Linux驱动开发杂记(0x06) - 内核中的内存分配 Linux驱动开发杂记(0x06) - 内核中的内存分配
一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使用以及它们之间的区别。 kmalloc() 函数原型: void *kmalloc(size_t size, gfp_t f
Linux驱动开发杂记(0x05) - 从pci_dev中获取总线、插槽、功能号 Linux驱动开发杂记(0x05) - 从pci_dev中获取总线、插槽、功能号
/* * The PCI interface treats multi-function devices as independent * devices. The slot/function address of each devi
Linux驱动开发杂记(0x04) - pci_device_id结构体 Linux驱动开发杂记(0x04) - pci_device_id结构体
struct pci_device_id { __u32 vendor, device; /* 厂商和设备ID,Vendor and device ID or PCI_ANY_ID*/ __u32 subvendor, su
2 / 3