linuxKernelBase
文章平均质量分 91
Linux kernel infrastructure
flagstaffChen
I would like to fuck the code when I‘m confuse.
展开
-
VFS(Virtual filesystem)在linux kernel中的应用(七)
1.概览 VFS全称为 virtual file systemfile 即虚拟文件系统,它被设计出来的目的则是为了将文件系统抽象化及标准化。抽象的过程其实就是归纳总结的过程,需要提炼出一套适用于所有文件系统的共性来,既然是适用所有文件系统的那么也就可以称之为标准了。使用虚拟文件系统可以为用户层屏蔽掉各式各样的文件系统,例如基于内存的procfs、sysfs,基于磁盘的Ext文件系统家族以及来自于微软的NTFS、VFAT,还有来自华为的EROFS等。总之一句话,抽象而出的VFS就是为了屏蔽具体不同文件系统原创 2022-05-08 09:21:03 · 627 阅读 · 0 评论 -
红黑树(red black tree)在linux中的应用(六)
1. 概览 红黑树的实现原理还是比较复杂的,本章不打算涉及。下面是内核文档对红黑树的简单介绍。 Red-black trees are a type of self-balancing binary search tree, used forstoring sortable key/value data pairs. This differs from radix trees (whichare used to efficiently store sparse arrays and thus原创 2022-04-27 21:03:24 · 1160 阅读 · 0 评论 -
linux中的内存分配接口简析(五)
1.概览 那内存分配对于驱动工程师来说就是指的DRAM,不包括iROM/SRAM/CPU cache等SOC内部的内存。下面提到的内存管理,其所管理的主体就是DRAM。在linux中对内存的描述单位是页page,它对应的数据结构为struct page,定义如下//include\linux\mm_types.hstruct page { struct { /* Page cache and anonymous pages */ /* See page-flags.h fo原创 2022-04-14 22:34:48 · 984 阅读 · 0 评论 -
linux kernel 中的推迟调用(defer callback)(四)
1.概览 推迟调用和延时的执行模型还是有些相似的,他们都是推迟某一些任务的执行,例如使用msleep时,其后面的代码也会在其返回后才能进行。但在我看来,他们的本质区别在于,推迟的这部分任务是交给第三方做还是自己亲力亲为的完成,因为使用延时方法推迟任务时,当前调用进程也就是什么也不做了,但对于推迟调用的方式是将任务抛出来,自己该干嘛还是干嘛。tasklets对于设备驱动开发者很少使用,故略过。2. Timer–定时器 定时器的概念也很好理解,为任务设置一个具体时间点让其被执行。在内核中也同样,只是这原创 2022-04-01 22:51:50 · 905 阅读 · 0 评论 -
linux kernel中的时间time(三)
1. 概览 你的百米记录是多少?你的千米赛跑记录是多少?你的爱车到达百公里每小时的时间是多少?在前一天晚上你就设置好了电饭煲,让其在第二天早上你醒来前就煮好粥。你的上下班点又是多少?你们又是如何和你的异性定好约会时间的?可见在人类社会中时间的概念是相当的重要。在linux的内核中也是如此,有时需要等待硬件一段时间以让其初始化完成。有时你需要在确定的几秒后来访问硬件,此时你的程序需要对比当前的时间点和开始等待的时间点间隔是否达到了要求值。2. 每秒系统滴答次数–HZ HZ代表kernel的系统时钟每原创 2022-04-01 08:19:44 · 2034 阅读 · 0 评论 -
linux kernel中的延时(二)
1.概览 在设备驱动中,有时候在驱动中延迟执行一些指令以等待硬件完成。延时一般分为两大类,第一类为忙等待即CPU在此期间执行的指令目的地仅仅是为了消耗时间。第二类为休眠等待唤醒,即在延时点进入休眠,然后被唤醒,这也就实现了驱动的等待功能。2.CPU忙等待延时2.1 mdelay 代码过于简单,下面则是示例代码time_test_drv_init DELAY_TEST_INFO("start:%lld ns", ktime_get_boottime_ns()); mdelay(1原创 2022-04-01 08:17:24 · 4786 阅读 · 0 评论 -
linux kernel 中双向链表详解(一)
1.概览 list_head 在kernel代码中非常的常见,其本身则是一个双向链表,在使用时只需要将其嵌入到任意结构体中,就可以实现栈/队列的数据结构。并且删除,添加的操作时间复杂度都是O(1)。2.list_head之栈实现 前面提到过,嵌入list_head可以实现的栈(stack)数据结构。下面的代码实现很简单,其功能则是在驱动的初始化函数中将数据入栈并显示当前栈信息,在驱动的卸载函数中出栈数据并释放内存。随意定义个苹果数据结构,并将head_list嵌入其中,定义如下struct app原创 2022-03-23 23:28:59 · 3134 阅读 · 0 评论