【问题标题】:Adding fpirntf() into xnu kernel tcp_xxx.c, stdio.h not found将 fpirntf() 添加到 xnu 内核 tcp_xxx.c,找不到 stdio.h
【发布时间】:2014-09-03 08:46:56
【问题描述】:

在 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 编程。

最好的问候。

【问题讨论】:

    标签: c xcode tcp stdio xnu


    【解决方案1】:

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

    如果您是 C 编程新手,这不是一个好的第一个项目。内核开发是困难的、无情的东西,尤其是对于 XNU 内核;错误通常会导致您的计算机崩溃,可能会丢失数据,并且调试服务通常不可用。不过,如果您下定决心要检查操作系统内核,那么 Linux 内核更容易使用——它可以在虚拟机中轻松启动和调试,而且文档记录要好得多。

    【讨论】:

    • 感谢您的回答,对我帮助很大。最好的问候。
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多