内核
文章平均质量分 80
土豆西瓜大芝麻
这个作者很懒,什么都没留下…
展开
-
什么是Zero-copy零拷贝
零拷贝 zero copy的含义以及发展过程。转载 2023-04-23 14:32:00 · 178 阅读 · 0 评论 -
使用cmake编译内核模块的几种方法
使用cmake编译内核模块的方法原创 2022-12-16 17:37:42 · 1979 阅读 · 1 评论 -
WARNING: modpost: missing MODULE_LICENSE()以及内核模块无法验证
missing MODULE_LICENSE()以及内核模块无法验证的解决方法转载 2022-12-09 20:11:20 · 3013 阅读 · 0 评论 -
linux驱动: 如何向模块传递参数
如何向模块传递参数,Linux kernel 提供了一个简单的框架。转载 2022-12-01 21:32:08 · 295 阅读 · 0 评论 -
共享内存+inotify机制实现多进程低延迟数据共享
本文是对的部分修正。之前的博客写过通过“inotify +file”的形式来实现多进程队列(跨进程共享)的文章。这种方式在通常情况下表现不错,但是这里存在一个问题就是“当消费者过慢,会产生大量的击穿内核高速缓冲区io,导致消费者卡在读取数据的瓶颈上,无法使用负载均衡等手段来提高处理能力。”为了解决上述问题,引入了共享内存,众所周知,这是所有ipc中最快的通信方式,从根本上解决这个问题。下面通过实现一个producer 和 consumer 程序,来展示我的设计思路。...原创 2022-08-02 19:52:06 · 629 阅读 · 0 评论 -
linux中的并发同步与并行
linux并发与并行的区别,以及linux下并发的同步控制机制。转载 2022-06-22 16:35:25 · 725 阅读 · 0 评论 -
linux内核概念--中断
如果要你讲一下中断,你会怎么去描述一个中断的触发流程呢?最基础的可能就是:保护现场 - 中断处理 - 恢复现场...那保护现场做了什么事情?中断处理需要注意什么事情?恢复现场又做了什么事情?相对应的,关于中断,还有很多这样的问题:本文希望就以上的问题,对中断触发和响应流程进行一个详细的描述。力求可以通过一篇文章将中断讲明白!首先,我先简单的描述一个中断的触发流程:在上述例子中,相关的问题如下:产生中断的方式有哪些?答:主动触发、软件触发、硬件触发。CPU如何区分是哪个中断源触发的请求?答:中断引脚+中断号转载 2022-06-21 16:24:18 · 340 阅读 · 0 评论 -
中断中为何不能使用信号量,中断上下文为何不能睡眠
不论是书上还是网上,对这块的解释,总是很凌乱, 让人不好理清。 大部分开发者可能也只知其然,不知所以然。在网上找到一篇对此解释言简意赅,一看就懂的文章,故分享过来。答: 信号量会导致睡眠。(以下为转载: http://blog.chinaunix.net/uid-7332782-id-3213376.html) 中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断。这个处理过程中的上下文就是中断上下文。 为什么可能导致睡眠的函数都不能在中断上下文中使转载 2022-06-21 15:48:36 · 85 阅读 · 0 评论 -
深入理解Linux内核进程上下文切换
操作系统的进程管理就是在合适的时机选择合适的进程来执行,在单个cpu运行队列上各个进程宏观并行微观串行执行,多个cpu运行队列上的各个进程之间完全的并行执行(这句话非常精辟)。进程管理是个复杂的过程,例如进程的描述、创建和销毁、生命周期管理、进程切换、进程抢占、调度策略、负载均衡等等。本文主要关注进程管理的一个切入点,那就是进程的上下文切换,来理解linux内核是如何进程进程上下文切换的,从而揭开上下文切换的神秘面纱。(注意:本文以linux-5.0内核源码讲解,采用arm64架构)...原创 2022-05-20 18:39:11 · 894 阅读 · 1 评论 -
CPU上下文切换、进程上下文、中断上下文
由于Linux是一个多任务操作系统,能够支持远大于CPU数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是由CPU进行调度,将时间分片,每个任务占用1个时间片,通过轮流的方式运行,但由于时间片粒度非常小,而CPU速度非常高,造成多任务同时运行的错觉。实际上,对于单个CPU核,其处理数据是串行的,就比如做核酸检测,只有一个检测口,组织人员会在检测口排几个队列,每个队列头部数出10个人构成一组。检测口就相当于CPU,无论怎么排队,所有人都得经过检测口,它的工作量一点没有变。但是各...原创 2022-05-19 13:04:03 · 4758 阅读 · 3 评论 -
宋宝华:Linux为什么一定要copy_from_user
这个问题,我认为需要从2个层面回答第一个层次是为什么要拷贝,可不可以不拷贝? 第二个层次是为什么要用copy_from_user而不是直接memcpy为什么要拷贝拷贝这个事情是必须的,这个事情甚至都跟Linux都没有什么关系。比如Linux有个kobject结构体,kobject结构体里面有个name指针:struct kobject { const char *name; struct list_head entry; struct kobject *paren转载 2022-03-22 15:09:45 · 803 阅读 · 3 评论 -
内核中比较float类型的方法
因为近期在搞内核开发,整出一个内核文件系统,同时在核外提供了一系列API。文件系统支持时空索引,而空间索引采用float类型来表示。但是内核中并没有float类型,因此最初的方式是将float拆成整数部分和小数部分,这也好理解。但是第一版的设计者把这部分想的太简单了,把2.4拆成了2 和4分别用一个int32_t类型存储,这倒是没啥,但是很显然这种方式是错误的,因为还少了一个小数点后面的连续0的个数,比如2.04存成整数和小数就成了2和04了,但是04和4是一样的,也就是小数点后面的0没有保...原创 2021-12-24 17:09:36 · 576 阅读 · 0 评论 -
如何使用cgdb + qemu调试linux内核
前言Linux 代码庞大而繁杂,光看代码会使人头晕目眩,如果能通过调试工具对其代码执行流程进行调试,则对学习Linux kernel以及解决平时遇到的问题会大有帮助。本文将讲解如何使用cgdb + qemu的方式调试Linux内核代码,所使用的测试机操作系统版本是CentOS Linux release 7.2.1511 (Core)1.编译额内核1) 获取内核代码内核代码下载地址:[The Linux Kernel Archives] (https://www.kernel.org/),本转载 2021-11-10 11:00:15 · 561 阅读 · 0 评论 -
Linux文件引用计数的逻辑
-v0.1 2019.10.10 Sherlock init本文分析现在Linux内核中对打开文件引用计数的处理逻辑,目的是解答一个问题,即对设备文件的操作会不会引用到已经释放的文件上。考虑这样一个场景,打开一个字符设备文件/dev/A,得到一个fd,用户态可以对这个fd做相关的文件操作,包括ioctl, mmap, close等,内核如何保证close操作和其他操作的同步,即不会出现close和其他文件并发执行,其他文件访问已经close掉的文件这种情况。 ...转载 2021-10-26 21:24:45 · 1240 阅读 · 0 评论 -
内核中bitmap的使用
bitmap用于实现bool的数组,标识一个事件发生没发生。可以理解为bitmap处理的是有没有的问题。bitmap将一片连续的空间作为一个数据类型,其中的成员都是1位,长度是bitmap的容量。声明一个 bitmapDECLARE_BITMAP 宏#define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]#define BITS_TO_LONGS(nr) DIV_ROUND_UP(...原创 2021-10-26 14:03:50 · 901 阅读 · 0 评论 -
linux内核内存空间申请kmalloc kzalloc和vmalloc的区别
转自:http://www.th7.cn/system/lin/201606/167750.shtml我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使用以及转载 2021-10-26 11:17:44 · 334 阅读 · 0 评论 -
设备驱动中的ioctl函数详解
ioctl是iocontrol的缩写,就是IO控制。行为上简单来说,如果你在写驱动程序时候,碰到一些IO操作,在逻辑上不能归类到read,不能归类到write,那就可以认为是ioctl的部分。read和write应该是写入和读出数据的,应该是作为单纯的数据交换的方式来处理。而ioctl则是控制read和write一些选项的。比如:你做了一个通用的读写IO端口的驱动模块。read和write是从端口读写数据的,但是...转载 2021-10-09 16:59:36 · 9760 阅读 · 0 评论 -
Linux 字符设备驱动结构—— cdev 结构体、设备号相关知识解析及创建字符设备示例
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序的方式如下:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。每一个字符设备或块设备都在/dev目录下对应一个设备文件。lin...原创 2021-10-09 16:19:29 · 1642 阅读 · 1 评论