![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核理论
文章平均质量分 64
午时龙且
这个作者很懒,什么都没留下…
展开
-
硬件访问
访问硬件,实际上就是访问硬件的寄存器或者设备内存,寄存器与RAM的主要区别在于寄存器操作有副作用(side effect或者边际效应),读取某个地址时,可能导致该地址内容发生变化,比如,很多设备的中断状态寄存器只要一读取,便自动清零。X86中,有I/O空间,内存空间。大部分嵌入式处理器ARM/MIPS/Power,只有内存空间。I/O空间是相对于内存空间而言的,它通过特定的指令in,out原创 2012-12-16 15:07:52 · 660 阅读 · 0 评论 -
linux中S3C2440的物理地址映射到虚拟地址详解
linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h#defineS3C_ADDR_BASE (0xF4000000)#ifndef __ASSEMBLY__#define S3C_ADDR(x) ((void__iomem __force *)S3C_ADDR_BASE+ (x))#else#defineS3C_ADDR转载 2013-01-08 14:05:05 · 2444 阅读 · 0 评论 -
linux中__iomem
__iomem是linux2.6.9内核中加入的特性。是用来个表示指针是指向一个I/O的内存空间。主要是为了驱动程序的通用性考虑。由于不同的CPU体系结构对I/O空间的表示可能不同。当使用__iomem时,编译器会忽略对变量的检查(因为用的是void __iomem)。若要对它进行检查,当__iomem的指针和正常的指针混用时,就会发出一些警告。保存经过虚拟映射之后的内存地址。转载 2013-01-09 09:06:27 · 2958 阅读 · 0 评论 -
linux同步机制
一.并发控制(1)自旋锁得不到资源,会原地打转,直到获得资源为止定义自旋锁 spinlock_t spin; 初始化自旋锁 spin_lock_init(lock); 获得自旋锁spin_lock(lock);获得自旋锁,如果能立即获得,则马上返回,否则自旋在那里,直到该自旋锁的保持者释放spin_trylock(lock);尝试获得自旋锁,如果能立即获得,它获得并返回真原创 2013-01-09 10:45:22 · 2217 阅读 · 0 评论 -
linux中阻塞机制
一,阻塞与非阻塞阻塞是指没有获得资源则挂起进程,直到获得资源为止。被挂起的进程进入休眠状态,被调度器的运行队列移走,直到等待条件被满足。非阻塞是不能进行设备操作时不挂起,或放弃,或反复查询,直到可以进行操作为止。驱动程序常需要这种能力:当应用程序进行read(),write()等系统调用时,若设备的资源不能获取,而用户又希望以阻塞的方式访问设备,驱动程序应该在设备驱动程序的xxx_re原创 2013-01-09 14:15:37 · 9227 阅读 · 0 评论 -
linux中同步和异步机制
一.并发控制(1)自旋锁得不到资源,会原地打转,直到获得资源为止定义自旋锁 spinlock_t spin; 初始化自旋锁 spin_lock_init(lock); 获得自旋锁 spin_lock(lock);获得自旋锁,如果能立即获得,则马上返回,否则自旋在那里,直到该自旋锁的保持者释放 spin_trylock(lock);尝试获得自旋锁,如果能立即获得,它获得并返原创 2013-01-09 10:43:41 · 5693 阅读 · 0 评论 -
linux内核定时器编程
一.linux内核定时器基本结构和函数1)struct timer_list 一个struct timer_list对应了一个定时器。#include 以下列出常用的接口:struct timer_list { struct list_head entry;//定时器列表 unsigned long expires;//定时器服务函数开始执行时间转载 2013-01-11 15:16:09 · 672 阅读 · 0 评论 -
linux内核结构详解
Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 1.进程调度(SCHED):控制多个进程对CPU的访问,使得多个进程能在CPU中微观串行运行,看起来却像是并行运行。驱动程序编程中,若没有获得资源则进入休眠,直到被唤醒。 2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存(为每个进程进行虚拟内存到转载 2013-01-24 20:49:40 · 1525 阅读 · 1 评论 -
linux中断编程
一.申请和释放中断1.申请IRQint request_irq(unsigned int irq,void (*handler)(int irq,void *dev_id,struct pt_regs *regs),unsigned long irqflags,const char * devname,void *dev_id);irq:要申请的硬件中断号handler:向系统登记的中原创 2013-01-30 14:32:49 · 535 阅读 · 0 评论