Kernel
文章平均质量分 68
Kernel
Li-Yongjun
这个作者很懒,什么都没留下…
展开
-
内核模块签名验证
内核模块签名验证受 CONFIG_MODULE_SIG 内核编译选项控制原创 2024-11-27 23:26:13 · 294 阅读 · 0 评论 -
EXPORT_SYMBOL 底层原理
编译器会将这些信息放在模块的 .o 文件的 __ksymtab 和 __ksymtab_strings 段中。当内核加载这个模块时,它会处理 __ksymtab 和 __ksymtab_strings 段,将符号注册到全局符号表中。原创 2024-10-28 22:15:00 · 999 阅读 · 0 评论 -
/dev/kmsg, /proc/kmsg 和 dmesg
rsyslogd 可以替代 syslogd 和 klogd,提供统一的日志处理功能。原创 2024-09-05 08:30:00 · 1554 阅读 · 0 评论 -
使用 journalctl 管理系统日志
在现代 Linux 系统中,journalctl 是管理和查看系统日志的强大工具。它是 systemd 日志系统的一部分,提供了一种统一的方式来查看所有系统日志,包括**内核日志**、**服务日志**和**用户空间应用程序日志**。原创 2024-09-02 09:00:00 · 1258 阅读 · 0 评论 -
syslogd: 系统日志守护进程
将某个进程的日志写入特定的 log 文件原创 2024-07-16 23:48:34 · 1116 阅读 · 0 评论 -
pstore 存储内核崩溃日志
pstore(Persistent Storage)是 Linux 内核提供的一种机制,最初是用于系统发生oops 或 panic 时,自动保存内核 log buffer 中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存 console 日志、ftrace 消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或 mtd 设备。原创 2024-07-11 08:45:00 · 780 阅读 · 0 评论 -
使用 /proc/sysrq-trigger 进行系统调试和故障排除
/proc/sysrq-trigger 是 Linux 内核提供的一个接口,它允许用户通过写入特定命令来触发系统请求(SysRq)功能。原创 2024-07-03 22:41:56 · 1385 阅读 · 0 评论 -
/proc/config.gz
有时候,我们想知道一个运行着的内核都打开了哪些编译选项,当然,查看编译环境的 .config 文件是一个不错的选择,除此之外,还有没有别的办法呢?当然有,那就是 /proc/config.gz。原创 2024-07-01 23:04:59 · 476 阅读 · 0 评论 -
ASAN
ASAN 是 Address Sanitizer 的简称,是 GCC 自带的内存问题检查工具,比较轻量级,非常适合单元测试时检查内存问题。使用也比较简单,只需要在编译时加上 `-fsanitize=address` 选项即可。原创 2024-04-25 22:15:00 · 1011 阅读 · 0 评论 -
Linux kernel 墙上时间
果然,Linux 系统时间不走了。原创 2024-04-14 23:15:00 · 637 阅读 · 0 评论 -
字符设备驱动编写
每一个主设备号(major) 对应 /proc/devices 下的一个设备,使用 register_chrdev() 创建。每一个次设备号(minor) 对应 /dev/ 下的一个设备文件,使用 mknod 或 device_create() 创建。原创 2024-03-15 21:45:00 · 1046 阅读 · 0 评论 -
内核打印应用程序出错信息,DEBUG_USER
当用户程序由于异常而崩溃时,内核可以打印一条简短的消息来说明问题所在。这有时对调试很有帮助,但对生产系统没有任何作用。大多数人应该在这里说 N。此外,你需要在内核命令行上传递 user_debug=N 来启用此特性。原创 2024-02-29 22:32:54 · 908 阅读 · 0 评论 -
ASLR 和 PIE
ASLR 不负责代码段以及数据段的随机化工作,这项工作由 PIE 负责。但是只有在开启 ASLR 之后,PIE 才会生效。无论是 ASLR 还是 PIE,由于颗粒度问题,被随机化的都只是某个对象的起始地址,而在该对象的内部依然保持原来的结构,也就是说相对偏移是不会变的。原创 2024-02-26 21:43:45 · 827 阅读 · 0 评论 -
watchpoint
内存被踩,通过 watchpoint 找到真凶。原创 2024-02-22 21:57:10 · 481 阅读 · 0 评论 -
Kernel 地图
看内核代码,先看 Makefile 和 Kconfig。原创 2024-02-19 22:03:57 · 980 阅读 · 0 评论 -
PAGE_OFFSET
PAGE_OFFSET 的值支持通过 Kconfig 配置,其默认的值是 0xC0000000,即用户空间 3GB,内核空间 1GB。当然这个可以由我们动态配置,可以配置 PAGE_OFFSET 为 0x80000000,即用户空间和内核空间均为 2GB。原创 2024-01-31 23:15:00 · 420 阅读 · 0 评论 -
CPU 如何识别用户空间不同进程的虚拟地址
每个进程都有自己的页表。原创 2024-01-23 21:45:00 · 498 阅读 · 0 评论 -
/dev/root
/dev/root 曾经是 /dev/mmcblk0p2 的软链接,在使用这个软链接将该设备挂载到根目录后,又将该软链接删除了。原创 2023-11-27 01:42:38 · 1298 阅读 · 0 评论 -
sched,进程调度窥探,进程调度直观感受
在 LInux Kernel 中,使用的最多的就是完全公平调度(CFS)算法。原创 2023-10-23 00:16:53 · 436 阅读 · 0 评论 -
进程数据结构——task_struct
内核在实现上述功能时,使用的最主要的一个数据结构就是 task_struct。原创 2023-10-17 22:45:00 · 512 阅读 · 0 评论 -
ARM Linux DIY(二)配置晶振频率
板子上焊接的是 26MHz,设备树中配置的是 24000000,这样导致系统时钟不正确,最终产生的串口波特率不是 115200,所以乱码。原创 2023-08-20 15:05:40 · 1469 阅读 · 0 评论 -
per-cpu 变量
per-cpu 变量是 2.6 内核的一个有趣特性。当建立一个 per-cpu 变量时,系统中的每个处理器都会拥有该变量的特有副本。这看起来很奇怪,但它有其优点。对 per-cpu 变量的访问(几乎)不需要锁定,因为每个处理器在其自己的副本上工作。per-cpu 变量还可以保存在对应处理器的高速缓存中,这样,就可以在频繁更新时获得更好的性能。原创 2023-07-22 23:00:04 · 1051 阅读 · 0 评论 -
CMA
CMA 全称叫做 continuous memory allocator,它是为了便于进行连续物理内存申请的一块区域,一般我们把这块区域定义为 reserved-memory。原创 2023-07-04 01:33:28 · 1251 阅读 · 0 评论 -
perf 工具测量 cache 命中率
今天我们使用 perf 工具,实际测量 cache miss 的比率是多少,这将会使你更加深刻地了解 cache 及其对性能的影响。原创 2023-06-22 20:28:01 · 3712 阅读 · 3 评论 -
RTC
总结就是,file_operations 看名字带个 file 就知道,操作 /dev/rtc 文件,就会最终调用其 hook 函数。而在 file_operations 的各个 hook 函数中,我们想要实现的是 RTC 功能,所以就要借助 RTC 相关的功能函数来完成任务,这些 RTC 的功能函数就是 rtc_class_ops。原创 2023-06-16 02:53:31 · 1534 阅读 · 0 评论 -
/dev/kmem & /proc/kallsyms
使用 /dev/kmem,通过它可以访问内核虚拟内存。原创 2023-05-27 22:44:10 · 2190 阅读 · 0 评论 -
/dev/mem
恍然大明白,原来 devmem 命令就是读取 /dev/mem,命令名称都是取自这里啊!原创 2023-05-25 02:29:25 · 1215 阅读 · 0 评论 -
自己动手写一个加载器
如果想执行某处内存的代码,那么该内存需要具有可执行权限。原创 2023-05-19 21:15:09 · 1972 阅读 · 1 评论 -
verbose debug info
直接打印代码位置,这不更牛逼。原创 2023-05-14 23:28:17 · 1027 阅读 · 0 评论 -
linux 内核开启调试选项
do_mounts.c 文件的第 373 行。原创 2023-05-14 22:52:47 · 2919 阅读 · 0 评论 -
ptrace
任何发给子进程的信号 signal(SIGKILL 除外)将导致子进程暂停运行,而它的父进程会通过 wait() 获得通知。原创 2023-05-07 18:19:35 · 1022 阅读 · 1 评论 -
加载器、伙伴系统(buddy)、slab、页表、MMU 之间有何关系
加载器申请虚拟地址空间,伙伴系统分配物理地址,加载器将代码段和数据段加载到地址空间,页表记录虚拟地址和物理地址对应关系,MMU 查找虚拟地址对应的物理地址。原创 2023-05-01 13:01:10 · 1329 阅读 · 1 评论 -
内核态栈 && 用户态栈
“用户态栈”只用于程序的函数调用,不参与进程切换或从用户态切换到内核态的相关操作。在进行进程切换或从用户态切换到内核态时,操作系统会使用“内核态栈”来存储关键的状态信息和寄存器值。原创 2023-04-26 23:16:52 · 1680 阅读 · 0 评论 -
进程、进程组、会话期
当我们退出(logout)时,所有属于我们这个会话期的进程都将被终止。这也是会话期概念的主要用途之一。原创 2023-04-25 22:58:38 · 733 阅读 · 0 评论 -
linux-0.11 研究
在看源码的同时,如何能够编译、运行,就再好不过了,如果还能调试,那就锦上添花了。原创 2023-04-25 22:03:31 · 1454 阅读 · 0 评论 -
各类板子 bring up
bring up 的本意是指在产品开发的早期阶段,将一个新的嵌入式系统板卡、芯片组或模块加电并启动,然后测试其基本功能并使其运行起来的过程。原创 2023-03-28 01:08:03 · 14173 阅读 · 0 评论 -
挂载 nfs 文件系统
关键点:kernel 报 `eth0 not found`,要快速定位问题(是 kernel 阶段的问题,可能是 kernel 的网卡驱动编译有问题,可能是设备树和硬件不匹配等),并找到解决办法。原创 2023-03-26 21:41:40 · 1560 阅读 · 3 评论 -
gdb 定位代码位置
反汇编 和 打断点 两种方式原创 2023-02-22 23:48:23 · 831 阅读 · 1 评论 -
objdump -d -l
objdump 来定位出错代码位置原创 2023-02-22 23:35:35 · 206 阅读 · 0 评论 -
addr2line
使用 addr2line 定位代码位置原创 2023-02-22 23:31:45 · 332 阅读 · 0 评论
分享