
linux内核
文章平均质量分 79
Keson
<< Kernel & Algorithm >>
展开
-
module_param、 MODULE_PARM_DESC 、EXPORT_SYMBOL
<br />在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param ()<br />module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下:<br />#define module_param(name, type, perm)<br />module_param_named(name, name, type, perm)<br /><br />其中使用了 3 个参数:原创 2011-05-13 15:48:00 · 12320 阅读 · 0 评论 -
linux驱动开发常用函数及函数
Region的操作函数__XXX_region(),Linux在头文件include/linux/ioport.h中定义了三个对I/O内存资源进行操作的宏: ①request_mem_region()宏,请求分配指定的I/O内存资源。 ②check_ mem_region()宏,检查指定的I/O内存资源是否已被占用。 ③release_ mem_region()宏,释放指定的I/O内存资源。 这三个宏的定义如下: #define request_mem_region(start,n,name)转载 2011-05-16 10:04:00 · 1507 阅读 · 0 评论 -
IO端口与内存空间
<br />(1)关于IO与内存空间:<br /> 在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。端口号标识了外设的寄存器地址。Intel语法的in、out指令格式为:<br /> IN 累加器, {端口号│DX}<br /> OUT {端口号│DX},累加器<br /> 目前,大多数嵌入式微控制器如ARM、PowerPC等中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序和程序运行中使用原创 2011-05-16 13:04:00 · 1455 阅读 · 0 评论 -
关于ioremap
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) <br />入口: phys_addr:要映射的起始的IO地址; <br /><br />size:要映射的空间的大小; <br /><br />flags:要映射的IO空间的和权限有关的标志; <br /><br />功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; <br /><br />实现:对要映射的IO地址空间进行判原创 2011-05-16 13:11:00 · 673 阅读 · 0 评论 -
Linux内核访问外设I/O资源的方式
<br />我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,从而可以在内核空间中访问这段I/O资转载 2011-05-16 13:18:00 · 550 阅读 · 0 评论 -
Linux设备驱动之pci设备的枚举
<br />一 前言 PCI,是Peripheral Component Interconnect的缩写,翻译成中文即为外部设备互联。与传统的总线相比,它的传输速率较高,能为用户提供动态查询pci deivce和局部总线信息的方法。此外,它还能自动为总线提供仲裁。在近几年的发展过程中,被广泛应用于多种平台。 PCI协议比较复杂,关于它的详细说明,请查阅有关PCI规范的资料,本文不会重复这些部份。 对于驱动工程师来说,PCI设备的枚举是PCI设备驱动编写最复杂的操作。分析和理解这部份,是进行深入分析PCI设备转载 2011-05-16 14:58:00 · 1841 阅读 · 0 评论 -
Linux操作系统的内存使用方法详细解析
<br />我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 <br /><br /> 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 <br /><br /> Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。 <br /><br /> 这里要提到一个很重要的概念,内存的延迟分配。转载 2011-05-16 17:15:00 · 1109 阅读 · 1 评论 -
关于Linux内存管理的一些资料
Linux常用内核态内存分配方式总结一、 alloc_pages类此类函数主要包括:struct page * alloc_page(unsigned int gfp_mask)——分配一页物理内存并返回该页物理内存的page结构指针。struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)——分配 个连续的物理页并返回分配的第一个物理页的page结构指针。unsigned long get_free_p转载 2011-05-17 10:22:00 · 2028 阅读 · 0 评论 -
linux内存管理
关于页面的使用<br />在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。<br />1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的thread_info结构和内核栈;等等。从伙伴系统分配页面是最基本的页面分配方式,其他的内存分配都是基于这种方式的;<br转载 2011-05-26 17:42:00 · 1163 阅读 · 0 评论