
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
vmlinux是编译内核生成的原始ELF格式可执行文件,内核目录下执行编译命令即可得到,包含完整的符号表和调试信息,文件体积较大(通常几十到上百MB),用于调试或生成其它格式的镜像文件。vmlinuz是压缩后的内核镜像,也是zImage、bzImge以及uImage压缩镜像的统称,区别只是在于使用的压缩格式不同。通过编译过程可以看到,Image.gz是通过gzip工具压缩后生成的,是标准的gzip

Kbuild是Linux系统提供的专门用于编译内核源码的工具,它的底层仍然是基于Makefile机制,但引入了一些扩展功能,例如用于配置内核特性的Kconfig,以及针对于内核功能模块的目标定义语法等,所有这些功能一起组成了完整的Kbuild机制。

Hung Task机制周期性地监测系统中处于TASK_UNINTERRUPTIBLE状态(即D状态)的进程,如果超过120s(时间可配),进程状态还没有进行切换,khungtaskd就会打印提示信息。

Linux kprobes技术是一种可以跟踪内核函数执行状态的轻量级内核调试技术,利用kprobes技术可以在运行的内核中动态的插入探测点,当内核运行到该探测点后可以执行用户预定义的回调函数,以收集所需的调试状态信息而基本不影响内核原有的执行流程。{return 0;}.symbol_name = "do_fork", // 要追踪的内核函数为 do_fork.pre_handler = hand

kdump是Linux内核发生崩溃时转储内存的一种机制,当内核发生错误时,kdump会将当前内核使用的内存导出为镜像文件(通常为vmcore)保存到硬盘上,之后可以使用crash等工具对内核错误原因进行分析。
使用printk的打印方式只能通过设置输出等级来进行控制,具备一定的局限性。在实际系统运行过程中,我们更希望能选择性地打开某些子系统或者模块的输出,为此内核提供了动态调试技术。内核中包括pr_debug、dev_dbg接口都使用了动态调试技术。
printk是Linux内核提供的打印函数,类似于用户态的printf,一个较大的差别在于printk支持多种日志级别,从而允许printk根据消息的等级选择性进行打印。printk打印的日志通常会显示在控制台上或者输出到日志文件(一般为/var/log/messages)中。
处理器在提供了硬件级别的原子操作保障后,软件可以基于硬件机制实现软件级别的原子操作接口,提供给软件模块使用。
模块自加载用于配置系统在启动时自动加载所需要的模块,这在添加新的设备和驱动很有用。方式1:基于systemd提供的modules-load服务,使用静态配置。方式2:基于udev的动态加载机制。

概述动态链接将链接工作由编译时推迟到了运行时,在每次程序运行时,动态链接器都要寻找并加载依赖的动态库,然后进行符号查找和重定位工作,这导致动态链接的程序在加载时会带来一些额外的开销。为了提升程序的加载速度,编译系统使用了一种称为延迟绑定(Lazy Binding)的技术。延迟绑定实现使用延迟绑定是基于这样一个前提:在动态链接下,程序加载的模块中包含了大量的函数调用,因此动态链接器会耗费很多的时间用







