Linux驱动
文章平均质量分 62
SLASH_24
程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。
展开
-
Linux内核模块
一、 Linux内核模块概念内核模块是Linux内核向外部提供的一个接口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。模原创 2017-02-07 09:15:35 · 815 阅读 · 0 评论 -
Linux驱动简介
一、什么是驱动操作系统是通过各种驱动程序来驱使硬件设备的,也就是说,驱动是操作系统内核与机器硬件之间的桥梁,它为内核操作硬件提供接口。驱动程序在Linux系统中以内核模块的形式存在,其编写方式遵循模块的编程方式。驱动程序在系统的程序中介于HAL层与硬件层之间,向上与系统各部分衔接,向下处理硬件的各种操作请求。驱动主要完成以下功能:1. 对设备初始化和释放。2.原创 2017-02-07 19:08:15 · 403 阅读 · 0 评论 -
常用的GPIO的标准接口函数
一、GPIO的标准接口函数为了使得GPIO具有更好的可移植性,在Linux内核中,有一些基本的模块可以使用标准的接口函数来操作,如:GPIO、INT、Timer、Clock等基本模块。使用该GPIO口必须先对其进行申请(GPIO也是一个资源,一个GPIO只能申请一次,再次申请会报错。),在内核源码中,每一个GPIO口都对应一个唯一的"ID",根据硬件平台的不同,可在内核源码目录下的arch/对原创 2017-02-09 12:58:45 · 5851 阅读 · 0 评论 -
混杂设备驱动模型设计LED驱动
一、使用混杂设备驱动,设计字符设备设备驱动程序的流程1. 定义一个混杂设备2. 定义混杂的file_operations和其接口函数3. 将物理地址申请为内核的一个资源,request_mem_region()4. 通过ioremap()函数得到物理地址对应的虚拟地址5. 注册混杂设备 --->已经创建了class和device6. 访问虚拟地址,控制硬件。二、原创 2017-02-09 19:05:46 · 616 阅读 · 0 评论 -
Linux内核定时器
一、内核时间的相关概念1. 墙上时钟:也就是实际时间。2. 系统时间:自系统启动开始所经过的时间。3. 时钟中断:内核会周期性的产生时钟中断,在中断处理函数中执行一些与时间相关的操作,如更新时间,进程调度,检查时间片等。4. 节拍率:在linux内核中,通过编程定义节拍率,也就是HZ。每1/HZ秒发生一次时钟中断。在ARM中,节拍率被定义为100,节拍率越大,系统进入时原创 2017-02-10 18:07:49 · 506 阅读 · 0 评论 -
信号量与自旋锁的区别
区别一:实现方式自旋锁是自旋等待,进程状态始终处于TASK_RUNNING。信号量是睡眠等待,进程在等待是处于TASK_INTERRUPTIBLE。区别二:睡眠死锁陷阱:在自旋锁的临界区中,进程是不能陷入睡眠的。而信号量可以睡眠。同时,基于上面的原因,中断上下文中只能使用自旋锁(中断里不能休眠),在有睡眠代码的临界区只能使用信号量区别三:CPU的原创 2017-02-15 20:39:29 · 1420 阅读 · 0 评论