
Linux Driver
njuitjf
不积跬步无以致千里
展开
-
jiffies和HZ的相关学习
jiffies和HZ的相关学习 最近学习kernel timer的时候,看到...原创 2020-09-09 21:03:38 · 690 阅读 · 0 评论 -
work queue, kthread和timer对比
kernel中有三种方式可以启动一个异步作业:work queue, kthread和timer。这几种方式有各自的使用场景。本文就这几种方式的用法和使用场景,进行了简单的总结。workqueue, kthread, timer使用方法与使用场景对比:1. queue_work2. kthread_create()3. add_timer1. work queue 参考链接: https://www.cnblogs.com/vedic/p/11069249.htm...原创 2020-09-07 19:52:47 · 2555 阅读 · 0 评论 -
Linux中断中不可睡眠的原因
Linux中断中不可睡眠的原因:1、在硬中断处理的过程中,部分时候是屏蔽中断的,如果此时睡眠,cpu被调度出去,导致系统无法响应所有中断。2、系统中是以进程为调度单位,中断不能作为调度单位,如果中断睡眠,被调度出去,将无法调度回来。 (这一条,应该是设计上的制限,设计时,就没考虑让中断睡眠)3、中断处理的,一般都是紧急的必须很快处理完成的事务。如果中断处理过程中睡眠了,被调度出去,会导致当前中断不能及时处理完成,会影响到系统的正常运行。 例如,如果rtc中断中被调度出去,导致系统时钟不...原创 2020-09-01 11:59:41 · 2023 阅读 · 2 评论 -
Linux驱动修炼之道-SPI驱动框架源码分析(下)
转自:http://blog.youkuaiyun.com/lanmanck/article/details/6895324转载 2014-10-09 15:45:59 · 1081 阅读 · 0 评论 -
Linux驱动修炼之道-SPI驱动框架源码分析(中)
转自:http://blog.youkuaiyun.com/lanmanck/article/details/6895322转载 2014-10-09 15:43:47 · 1002 阅读 · 0 评论 -
神秘的subsys_initcall
转自:http://blog.chinaunix.net/uid-12567959-id-161015.html转载 2014-10-11 16:27:24 · 1453 阅读 · 0 评论 -
Linux ioremap 的实现
Linux ioremap 的实现linux, memory, ioremap在 linux kernel 的代码中,经常看到 ioremap 函数。其功能是将给定的物理地址映射为虚拟地址。注意,此处的物理地址并不是真正内存的物理地址,而是cpu上的io memory。可以参考芯片《Reference Manual》中断 memory map 章节。本文主要学习 iorem原创 2014-11-03 19:07:07 · 10600 阅读 · 0 评论 -
SCHED_OTHER,SCHED_FIFO,SCHED_RR
转自:http://blog.chinaunix.net/uid-7187477-id-5593.html转载 2014-11-04 17:56:25 · 2742 阅读 · 0 评论 -
各种initcall的执行先后顺序(module_init、postcore_initcall、arch_initcall、subsys_initcall、 fs_initcall)
转自:http://blog.youkuaiyun.com/fenzhikeji/article/details/6860143转载 2014-10-20 10:46:49 · 1381 阅读 · 0 评论 -
Linux驱动中,probe函数何时被调用
转自:http://www.cnblogs.com/hoys/archive/2011/04/01/2002299.html转载 2014-10-21 14:04:40 · 2532 阅读 · 0 评论 -
Linux Module And Device Driver
转自:http://hi.baidu.com/yopklnqbrsampsr/item/0de01ac7ea05960fac092fcb转载 2014-10-21 16:58:16 · 3543 阅读 · 0 评论 -
linux-2.6内核模块引用计数的实现
转自:http://www.embedu.org/Column/Column92.htm转载 2014-10-21 15:37:49 · 2605 阅读 · 0 评论 -
THIS_MODULE ?
转自:http://blog.youkuaiyun.com/lizhiguo0532/article/details/6346958转载 2014-10-21 17:04:08 · 2396 阅读 · 0 评论 -
Linux驱动修炼之道-SPI驱动框架源码分析(上)
转自:http://blog.youkuaiyun.com/lanmanck/article/details/6895318转载 2014-10-09 15:42:04 · 883 阅读 · 0 评论 -
关于signal, kill, mutex, spinlock的一些总结
用户进程,在用户态可以被直接 kill 。用户进程陷入内核,在内核态进入死循环:1. 循环体中有 msleep_interruptible ,进程状态为S,即可中断的睡眠状态,kill 命令不能杀死进程。2. 循环体中有 msleep ,进程状态为D,即不可中断的睡眠状态,kill 命令不能杀死进程。3. 循环体中无 sleep ,进程状态为R,即可执行状态,kill 命令不能杀死原创 2014-11-11 14:31:24 · 5289 阅读 · 0 评论 -
linux驱动的入口函数module_init的加载和释放
就像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件:#include #include #include 其中,init.h 定义了驱动的初始化和退出相关的函数,kernel.h 定义了经常用到的函数原型及宏定义,module.h 定义了内核模块相关的函数、变量及宏。 几乎每个转载 2012-08-31 16:31:18 · 1135 阅读 · 0 评论 -
ARM汇编,bx lr,
转自:http://hi.baidu.com/wuqi19881003/item/f293c7a7e228e613a8cfb756 bx lr的作用等同于mov pc,lr即跳转到lr中存放的地址处。那么lr存放的是什么地址呢?lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时转载 2013-01-31 11:33:24 · 30140 阅读 · 3 评论 -
iomemory地址被抢占(一)
最近做的一个项目,系统启动时发现有warning,并打印出了一堆dump stack。看了下代码,发现是在esai的probe函数中调用request_mem_region时失败代码走到了错误处理的部分。错误处理中disable了一个clock,warning的内容是说该clock没enable就disable了。从代码看,存在两个问题:1、request_mem_region为什原创 2013-03-05 19:54:47 · 2986 阅读 · 0 评论 -
iomemory地址被抢占(二)
上一篇中,我们分析了request_mem_region的实现。现在来看看board文件中是如何配置ssi和esai的。现在做的项目是基于freescale平台的。所以代码也是基于该平台代码进行分析。先看看ssi。首先定义了一个mxc_audio_platform_data结构体和一个platform_device结构体: static struct mxc_audio原创 2013-03-05 20:03:00 · 2442 阅读 · 0 评论 -
DEVICE_ATTR的使用
DEVICE_ATTR的使用使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。这几个东东的区别就是,DEVICE_ATTR对应的文件在/sys/devices/目录中对应的device下面。而其他几个分别在driver,bus,c原创 2013-11-20 20:10:53 · 74892 阅读 · 2 评论 -
linux kernel中timer的使用
linux kernel中timer的使用在kernel中如果想周期性的干些什么事情,或者某个特定时间干些什么事情,可以使用timer。例如像周期性地dump某段buffer的数据等等。先来看看使用方法。先定义一个struct timer_list的对象。eg: struct timer_list dump_t;这个对象相当于一个闹钟,其中包含了时间点,也就是什么时候激活闹钟;原创 2013-11-22 17:58:38 · 22080 阅读 · 1 评论 -
proc_create的使用方法
proc_create的使用方法proc文件系统是个有用的东东。创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。proc虚拟文件是如何创建的呢?先看看比较简单的,创建proc文件夹。调用以下函数,即可实现proc文件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_原创 2013-11-25 10:57:30 · 57865 阅读 · 2 评论 -
DDR3中bank, 16bit和32bit等概念
DDR3中bank, 16bit和32bit等概念最近在看内存相关的东东。以前认为内存就是块资源,需要的时候,malloc出来一部分使用即可。对内部的东东没有深入了解过。刚开始看起来,感觉有点丈二和尚。通过各种查询,并请教牛人,对基本概念有了个初步了解,先总结一把。先说说bank。看到bank首先想到了银行,然后是利率,然后是房贷...扯远了,这儿的bank是存储库的意原创 2013-12-03 15:28:30 · 36466 阅读 · 8 评论 -
__zone_watermark_ok分析
__zone_watermark_ok分析最近在学习linux 内存管理这一块。看到了函数__zone_watermark_ok。想起来之前也曾经见过该函数,当时是在分析init.rc的内存,最终也看到了这个函数,不过当时对其并不是很理解。最近又遇到了它,结合积攒的一点知识,总算对其有了个大致了解。先概述一下其用途。从名称来看,zone, watermaker, 还有ok。原创 2013-12-10 15:13:03 · 5368 阅读 · 0 评论 -
printk() 使用说明
转自:http://blog.youkuaiyun.com/iczyh/article/details/3160757转载 2014-05-20 09:58:14 · 1694 阅读 · 0 评论 -
内核模块中对文件的读写
转自:http://bbs.chinaunix.net/thread-1945223-1-1.html转载 2014-09-02 12:27:29 · 929 阅读 · 0 评论 -
.mod.c 是什么文件
转自:http://www.cnblogs.com/felixjia/archive/2011/09/15/2178126.html转载 2014-10-21 17:39:35 · 4795 阅读 · 0 评论 -
内核初始化优化宏 ,初始化顺序, __init,__devexit等
来自:http://www.17xie.com/read-54054.html 内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:· __init转载 2012-08-31 16:29:40 · 817 阅读 · 0 评论