用于内核测试的内核模块

背景 在调试内核时,最常用的方式就是添加打印。这个方法简单直接,但有个问题:若添加打印的函数会被频繁地调用执行,那这很可能使系统在启动或运行阶段触发海量的打印,反而将关键的信息淹没;或者由此导致系统运行卡顿甚至无法启动。 还有另一种常见的调试需求:我们需要在内核中模拟某种故障,并且是以我们所能掌控的时机和方式来触发。关于这点我们一般会想到内核故障注入,但其手段和所涉及的软件工具比较复杂,且其所能模拟的故障种类和故障位置一般是给定的,无法随意调整。 对于上述两个场景,我们其实可以用同一个方法解决:在内核中预埋一个“开关”,并在内核的用户态接口(如 proc 文件系统)上创建一个专门的接口来控制这个开关。对于第一个场景,我们可以将那些打 …

Makefile 实例参考

通过将一个 Makefile 从最原始的状态一步步简化,来展现多种常见的 Makefile 语法和技巧。 最初始的形态: 1main: main.o submodule.o utils.o 2 gcc main.o submodule.o util.o -o main 3 4main.o: main.c submodule.h utils.h 5 gcc -g -c main.c -o main.o 6 7submodule.o: submodule.c submodule.h utils.h 8 gcc -g -c submodule.c -o submodule.o 9 10utils.o: utils.c utils.h 11 …