将fpirntf()添加到xnu内核tcp_xxx.c中,找不到stdio.h

时间:2014-07-13 04:24:21

标签: c xcode tcp stdio xnu

在stackoverflow上问候每个人!

我正在尝试将fpirntf()添加到XNU内核tcp_xxx.c文件中,因此当TCP移动时它可以将参数打印到文件中,以便更好地理解TCP的工作方式,但是会发生致命错误,如下所示:

$ sudo make ARCH_CONFIGS=X86_64 KERNEL_CONFIGS=DEBUG
CC tcp_output.o
/Users/wangweikai/Desktop/xnubuilder/xnu-2422.90.20/bsd/netinet/tcp_output.c:135:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^
1 error generated.
make[7]: *** [tcp_output.o] Error 1
make[6]: *** [build_all] Error 2
make[5]: *** [do_all] Error 2
make[4]: *** [build_all] Error 2
make[3]: *** [build_all_recurse_into_conf] Error 2
make[2]: *** [build_all_recurse_into_bsd] Error 2
make[1]: *** [build_all_bootstrap_DEBUG^X86_64^NONE] Error 2
make: *** [all] Error 2

看起来在xnu源代码中没有stdio.h,为了解决这个问题,我重新安装了xcode 5.0.2(只适用于xnu-2422)并输出mach_kernel能够启动;我尝试在终端中通过“xcode-select --install”安装命令行工具,但两者都没有。 顺便说一句,如果我在没有#include的情况下添加printf()它没有给出任何错误,它看起来打印函数是由名称不是stdio.h的文件定义的。

由于我的观点是记录TCP参数(例如拥塞窗口大小和下一个序列号等)如何在文件中发生变化,所以如果有任何办法可以做到这一点请告诉我,我是全新的xnu和C编程。

祝你好运。

1 个答案:

答案 0 :(得分:3)

内核中没有标准I / O(即stdio)。要从内核输出调试信息,请调用printf();它的输出将在内核日志中可见。直接从内核向文件写入数据很复杂,很少是可取的。 (在这种情况下,它实际上可能会导致硬锁定,例如,如果正在写入的文件位于网络卷上!)

如果您不熟悉C编程,这不是一个好的第一个项目。内核开发是困难的,不可原谅的东西,特别是对于XNU内核;错误通常会导致计算机崩溃,可能会丢失数据,并且通常无法使用调试服务。但是,如果您已经开始研究操作系统内核,那么Linux内核就更容易使用 - 它可以在虚拟机中轻松启动和调试,并且可以更好地记录。