第十八章+内核开发相关

调试

调试是编程的必备技能,工作两个月来主要就是学习如何调试内核,定位bug。

1. 内核调试

  • Kdump:基于 kexec 的内存转储工具,Core dump不管是用户程序还是内核都会产生。
  • crash工具:内存转储分析工具
    crash和gdb结合,可以方便地进行调试,特别是在开发和调试自己的内核模块时,可以编写gdb脚本简化很多操作。

内核调试的一种方式是利用printk()函数打印信息来调试,该函数提供了不同的日志级别,定义在linux/kern_levels.h

linux提供syslog方便用户空间查看日志信息,通过klogd和syslogd守护进程工作,相关文件:/proc/kmsg、/var/log/messages,通过/etc/syslog.conf可以指定日志输出文件,通过dmesg命令可以查看相关日志。

文件/proc/kallsyms存放了内核镜像中符号与对应地址的映射关系,和System.map类似,但是/proc/kallsyms是当前正在运行的内核的符号,还包含动态加载的模块的符号,但是要注意编译时开启CONFIG_KALLSYMS、CONFIG_KALLSYMS_ALL选项。

拓展阅读:

2. 可移植性

Linux是一个可移植性非常好的操作系统。

Linux支持很多体系结构:List of Linux-supported computer architectures