Kernel 更改内核中的调度程序函数代码并重新编译

Kernel 更改内核中的调度程序函数代码并重新编译,kernel,scheduler,freebsd,Kernel,Scheduler,Freebsd,我要计算FreeBSD中调度程序函数调用的数量。 我想在这个函数的顶部添加几行代码来记录它,然后编译并安装新内核 例如,我想将以下行添加到调度程序函数: FILE *fp; char* str = "string"; int x = 10; fp=fopen("/tmp/mylog.log", "w"); if(fp == NULL) exit(-1); fprintf(fp, "A new call of freebsd scheduler function "); fclose(

我要计算FreeBSD中调度程序函数调用的数量。 我想在这个函数的顶部添加几行代码来记录它,然后编译并安装新内核

例如,我想将以下行添加到调度程序函数:

FILE *fp;
char* str = "string";
int x = 10;

fp=fopen("/tmp/mylog.log", "w");
if(fp == NULL)
    exit(-1);
fprintf(fp, "A new call of freebsd scheduler function  ");
fclose(fp);  

调度器函数的源代码在哪里?我应该在哪里复制这个代码?重新编译内核需要做哪些更改?

调度程序位于sys/kern/sched_ule.c中,可以通过在源代码树顶部执行“make buildkernel installkernel”来重建,它是内核的一部分。这意味着上面使用stdio的代码无法工作。可以工作的是使用现有的工具,例如异步日志记录队列(MAN4ALQ)


最简单的方法是使用DTrace,因为这不需要重建内核。

请注意,如果您正在对内核进行编程,则不能使用标准C库,尽管有些函数在内核空间中具有等价物,例如
printf(9)
malloc(9)