首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

精致全景图 | linux内核输出的日志去哪里

另外,精致全景图系列文章,以及之后的linux内核分析文章,我都会整理到这个github仓库里。...熟悉linux内核,或者看过linux内核源码的同学就会知道,在内核,有一个类似于c语言的输出函数,叫做printk,使用它,我们可以打印各种我们想要的信息,比如内核当前的运行状态,又或者是我们自己的调试日志等...那当我们调用printk函数后,这些输出的信息到哪里去了呢?我们又如何在linux下的用户态,查看这些信息呢?...ring buffer的位置。...之后,dmesg会以打开的/dev/kmsg文件为媒介,不断的调用read函数,从内核读取日志消息,每读取出一条,seq的值都会加一,即指向下一条日志的位置,依次往复,直到所有的内核日志读取完毕,dmesg

2.8K30

Linux内核container_of函数详解

Linux 内核,container_of 函数使用非常广,例如 Linux内核链表 list_head、工作队列work_structLinux 内核中有一个大名鼎鼎的宏container_of...我们先来看看它在内核是怎样定义的。 ? 我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。...因此,上述代码的作用是首先使用typeof获取结构体成员j的类型为int,然后顶一个int指针类型的临时变量__mptr,并将结构体变量的成员的地址赋给临时变量__mptr。...(struct test *)((char *)__mptr - offsetof(struct test,j)); 接着我们来看一下offsetof(struct test,j),他在内核如下定义...在回首一下它: (struct test *)((char *)__mptr - offsetof(struct test,j)); linux内核随随便便一个宏就有如此精妙 请输入正文

2.1K90

浅墨: 聊聊Linux IO()——Linux内核的IO栈

接上一篇浅墨: 聊聊Linux IO(上),先上一张全貌图[4]: ?...由图可见,从系统调用的接口再往下,Linux下的IO栈致大致有三个层次: 文件系统层,以 write(2) 为例,内核拷贝了write(2)参数指定的用户态数据到文件系统Cache,并适时向下层同步...设备层,通过DMA与内存直接交互,完成数据和具体设备之间的交互 结合这个图,想想Linux系统编程里用到的Buffered IO、mmap(2)、Direct IO,这些机制怎么和Linux IO栈联系起来呢...假设要去读一个冷文件(Cache不存在),open(2)打开文件内核后建立了一系列的数据结构,接下来调用read(2),到达文件系统这一层,发现Page Cache不存在该位置的磁盘映射,然后创建相应的...然后请求继续到达块设备层,在IO队列里排队,接受一系列的调度后到达设备驱动层,此时一般使用DMA方式读取相应的磁盘扇区到Cache,然后read(2)拷贝数据到用户提供的用户态buffer中去(read

2.3K20

Linux设置服务自启动

有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务,本文记录实现方法。...概述 Linux系统在开机的时候自动加载某些脚本或系统服务本质为控制 /etc/rc*.d (* \in [0,1,2,3,4,5,6]) 文件夹下内容来完成的 系统启动时会自动运行/etc/rc*....d 文件夹下的命令 就实现方式来说主要有三种: 命令 描述 ln -s 在/etc/rc.d/rc*.d目录建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一)...chkonfig 命令行运行级别设置 ntsysv 伪图形运行级别设置 ln -s 建立启动软连接 在Linux中有7种运行级别,每种运行级别分别对应着/etc/rc*.d这7个目录...ntsysv,二是使用setup命令,然后选择系统服务 默认情况下,当前运行级别为多少,在ntsysv设置的启动服务的级别便是多少 比如,我当前的运行级别是3,那么我在伪图形界面中选择启动服务后,

18.2K20

Linux系统配置系统设置

Linux系统配置系统设置->网络设置代理的详细教程如下:首先,确保您已经安装了NetworkManager和nmtui。...在桌面上点击“设置”图标,或者按热键“Windows键+i”。在设置菜单,选择“网络”。在网络设置页面,您应该看到一个名为“系统代理”的选项。点击它,然后选择“手动”。...在“代理设置”页面的底部,选择“保存”。现在,您需要为您的网络接口配置代理设置。在网络设置页面,点击“接口”。在接口设置页面,您应该看到您的网络接口(例如:wlan0或eth0)。...在接口编辑页面,选择“IPv4设置”或“IPv6设置”,根据您的网络接口使用的是IPv4还是IPv6。...在“IPv4/IPv6设置”页面的底部,选择“保存”。最后,在接口编辑页面,选择“保存”。现在,您已经成功为您的Linux系统配置了代理设置。请注意,这些设置可能会导致您的网络连接速度变慢。

36230

浅谈Linux内核页缓存和块缓存

概述 运行在用户态的应用程序需要经常访问磁盘数据,进行读写操作,由于磁盘(HDD)相对较慢,没有任何缓存的情况下,每次应用读写操作时延页非常慢;在内核设计之初,添加了缓存设计,将磁盘数据保存在RAM,...Page Cache缓存的Page大小为4K。...Page Cache(页缓存) Linux页高速缓存任何基于页的数据,所缓存的Page包括普通文件内容、块设备文件、内存映射文件的读写。页缓存中一个页帧的文件数据锁对应的磁盘块不必是连续的。...在内核块缓存是通过struct buffer_head进行管理的。...所属的地址空间 struct address_space *b_assoc_map; atomic_t b_count; /* users using this buffer_head */ }; 内核按照块访问的场景不多

2.9K30

Linux内核container_of宏的详细解释

如何移植并使用Linux内核的通用链表(附完整代码实现)中提到的为什么在结构体要把 struct list_head放在首位。...我们可以看到,结构体成员变量在内存存储的其实是偏移地址。也就是说结构体A的地址+成员变量的偏移地址 = 结构体成员变量的起始地址。...这里使用的是一个利用编译器技术的小技巧,即先求得结构成员在结构的偏移量,然后根据成员变量的地址反过来得出主结构变量的地址。...(((type *)0)->member) 引用结构体MEMBER成员。...size_t;   可以从定义中看到,size_t是一个非负数,所以size_t通常用来计数(因为计数不需要负数区): for(size_t i=0;i<300;i++)   为了使程序有很好的移植性,因此内核使用

1.2K10

Linux的lsmod命令列出内核模块

lsmod是一个命令行程序,用于显示有关已加载的Linux内核模块的信息。 内核模块 内核是操作系统的核心组件。 它管理系统的资源,并且是计算机硬件和软件之间的桥梁。...Linux内核具有模块化设计。 内核模块通常称为驱动程序是一段扩展内核功能的代码。 模块要么编译为可加载模块,要么内置在内核。...您也可以使用modprobe命令将模块手动加载到内核,或者在启动时使用/etc/modules或/etc/modules-load.d/*.conf文件自动将模块加载到内核。...内核模块存储在/lib/modules/目录。 要找到正在运行的内核的版本,请使用uname -r命令。...在命令行运行lsmod以了解当前正在加载哪些内核模块: lsmod 该命令在新的一行上输出每个已加载内核模块的信息: Module Size Used by cmac

4K20
领券