![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kernel
nwpu053883
这个作者很懒,什么都没留下…
展开
-
Linux调度器
https://www.cnblogs.com/tolimit/p/4303052.htmlhttps://mp.weixin.qq.com/s/W68WIT4AGdS7xJSecnHYcQhttps://mp.weixin.qq.com/s/V8ZONUdTeoALQuiy53uN_w挖坑...原创 2020-01-02 19:30:44 · 124 阅读 · 0 评论 -
spin_lock 相关 -- 原子上下文
在前面文章描述spin_lock的时候, 要求spin_lock/unlock中间的代码不能有主动放弃cpu, 进入睡眠的函数。 (如sleep, schedule()等)下面提一个问题?Q: 那在spin_lock/unlock中间代码段执行时, 时间片到了怎么办?A: spin_lock和spin_unlock中间代码是原子上下文。 故时间片轮转到了, 也不会调度。。。...原创 2020-01-02 19:25:54 · 271 阅读 · 0 评论 -
抢占(PREEMPTION)是如何发生的
http://linuxperf.com/?p=211挖坑...原创 2020-01-02 16:46:45 · 295 阅读 · 0 评论 -
spin_lock相关
spin_lock - 自旋锁编程时, 经常需要考虑的问题是同步问题。谁和谁之间同步呢?? 看你的关键代码段和共享数据区的访问/读写者。有可能会很多, 很乱...比如:线程和线程,线程和中断,中断和中断,此核和彼核...应用, 内核等都有很多锁, 互斥, 原子等机制...内核中,比如1. 原子变量2. 自旋锁 spin_lock3. 互...原创 2020-01-02 16:46:12 · 217 阅读 · 0 评论 -
vivi驱动编写(三)
第二篇vivi驱动, demo效果只是静止的绿色图像。。。所以稍微改良下... 代码如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/printk.h>#include <linux/platform_device.h>#include <...原创 2020-01-02 14:41:56 · 195 阅读 · 0 评论 -
vivi驱动编写(二)
实现vivi - Virtual Video驱动。以下显示一个全绿屏界面。#include <linux/module.h>#include <linux/kernel.h>#include <linux/printk.h>#include <linux/platform_device.h>#include <linux/vi...原创 2020-01-02 12:48:53 · 376 阅读 · 1 评论 -
vivi驱动编写(一)
vivi 驱动, 即Virtual Video驱动。基于v4l2驱动框架。最新版本支持例如capture(类似摄像头, 采集, 解码等) - 最终通过/dev/videoX设备获得yuv图像数据。看协议描述:Video capture devices sample an analog video signal and store the digitized images in m...原创 2020-01-01 14:27:28 · 815 阅读 · 1 评论 -
mmu页表机制
给个链接https://www.cnblogs.com/arnoldlu/p/8087022.html1. 段, 大页, 小页, 极小页的划分 4种映射长度:段(1MB)、大页(64KB)、小页(4KB)、极小页(1KB)。ok, 以这个为前提, 我们设计mmu 两级页表的方式。假设, 需要寻址 0x12345678这个虚拟地址。已知它对应的页是0x56789...原创 2019-12-28 20:41:56 · 1480 阅读 · 1 评论 -
记录些等待队列(wait_queue)的使用
贴几篇文章先...https://blog.csdn.net/hs794502825/article/details/8959459https://blog.csdn.net/lizuobin2/article/details/51785812记录些概念和接口。1. 什么是睡眠?cpu调度 有 按时间片轮转, 抢占式基于优先级, 实时调度等很多方式。不同场景使用不同调度方式...原创 2019-12-28 16:47:58 · 989 阅读 · 0 评论 -
vivi驱动中的等待队列wait_queue
内核有很多队列, 如等待队列, 工作队列等等。所有的队列都是利用list机制做成一个双向链表/队列。和内核种的一些模块自己使用的队列其实大同小异。如usb的端点队列, v4l2中vb2_buffer使用的queued_list和done_list。以vivi.c驱动为例, 记录些等待队列的实现及应用。* 相关结构体和函数1.DECLARE_WAIT_QUEUE_...原创 2019-12-28 15:52:58 · 281 阅读 · 0 评论 -
关于ioctl的cmd值如何解析...
遇到ioctl内核中未定义,打印log[ 739.108300] No such IOCTL, cmd is -1071625723cmd is -1071625723这个cmd如何解释呢...?ioctl原型SYNOPSIS #include <sys/ioctl.h> int ioctl(int d, int req...原创 2019-12-28 11:28:36 · 1036 阅读 · 1 评论 -
关于vb2_buffer_done
直接贴代码, 907 void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) ...原创 2019-12-26 21:26:25 · 1371 阅读 · 0 评论 -
内核中的list相关
linux内核有很多优秀的代码...比如list这是一个双向链表。先贴个好文章...https://myao0730.blogspot.com/2016/12/linux.html先看下list_head的结构体,/* ...原创 2019-12-26 20:43:45 · 320 阅读 · 0 评论 -
关于vb2_buffer的操作描述
以vivi驱动为例,vb2_buffer为vivi设备内部使用的帧缓存描述, (用户态用v4l2_buffer来描述)在vb2_queue队列中, 有两个队列, 分别为queued_list和done_list,前者用于存放用户enqueue的buffer, 后者用于存放处理好等待dequeue的buffer。Q: 贴段代码... 875 static void b...原创 2019-12-26 19:38:09 · 1675 阅读 · 1 评论 -
v4l2 vivi驱动分析
v4l2驱动框架相对还是挺复杂的,最好的参考例子有v4l2-pci-skeleton.c和vivi (Virtual Video)其中vivi在最新的Linux 4.xx版本也变得非常复杂。所以采用Linux-3.16.74版本作为学习...1. 该版本没有使用platform_driver框架, 故模块初始化入口函数vivi_init直接进行video设备的注册...原创 2019-12-26 15:52:58 · 1047 阅读 · 0 评论 -
Linux 内存管理
关于Linux内存管理...挖个坑...相关概念1. 用户态堆, 栈, 静态数据区, mmap映射区函数 - malloc, free, brk, mmap2. 内核态内核堆, 栈, 静态数据区, dma内存等相关函数 - kmalloc, vmalloc,ioremap, dma_allcoc_coherent, __get_free_pages.....原创 2019-12-24 11:28:18 · 89 阅读 · 0 评论 -
Linux内核中的面向对象设计
lwn.net网站有两篇文章, 学习一下...https://lwn.net/Articles/444910/https://lwn.net/Articles/446317/Object-oriented design patterns in the kernel, part 1面向对象相关知识有 objects(对象), classes(类), method(方法), inher...原创 2019-12-03 15:49:47 · 540 阅读 · 0 评论 -
内核dynamic_debug调试相关
内核中有用pr_debug及dev_debug的log输出, 可以使用内核动态调试开关来选择。具体操作如下:1. make menconfig 使能dynamic_debug相关配置2. cat /sys/kernel/debug/dynamic_debug/control | grep "dwc3/gadget.c"debug/control :/run/media/...原创 2019-09-27 15:10:22 · 3182 阅读 · 0 评论