pthread.h 在内核 driver 中用于 OS X(使用 Xcode)

pthread.h in a kernel driver for OS X (using Xcode)

我正在尝试将由 Clemens Ladisch 编写的用于 Linux 的出色的华硕 XONAR-series driver 移植到 Mac OSX.

现在,一个非常粗糙的编译版本可在以下位置获得:github。com/i3roly/CMI8788

我的问题是关于 OSX 的 pthread.h header。默认情况下,包含 pthread.h 会尝试定义一个结构,该结构与通过 IOKit driver 包含的结构明显不同。为简洁起见,我将使用来自 github post(https://github.com/civetweb/civetweb/issues/364#issuecomment-255438891):

的信息性 post
#include <pthread.h> 
   #include <sys/_types/_mach_port_t.h> 
      typedef __darwin_mach_port_t mach_port_t; 

对比

#include <IOKit/audio/IOAudioDevice.h>
   #include <IOKit/IOService.h>
        #include <IOKit/IORegistryEntry.h>
           #include <IOKit/IOTypes.h>
              #include <IOKit/system.h>
                  #include <mach/mach_types.h>
                      #include <mach/host_info.h>
                          #include <mach/message.h>
                              #include <mach/port.h>

/*
 *  For kernel code that resides outside of Mach proper, we opaque the
 *  port structure definition.
 */
struct ipc_port;


typedef struct ipc_port         *ipc_port_t;

#define IPC_PORT_NULL           ((ipc_port_t) 0UL)
#define IPC_PORT_DEAD           ((ipc_port_t)~0UL)
#define IPC_PORT_VALID(port) \
    ((port) != IPC_PORT_NULL && (port) != IPC_PORT_DEAD)

typedef ipc_port_t              mach_port_t;

现在,我可以通过

来解决这个问题
#define _MACH_PORT_T
#include <pthread.h> 

但我不确定这是否是一个安全的解决方案,因为在我看来 Xcode 的 pthreads API 暗示它仅用于 user-land 程序。这个假设是错误的吗?使用这个宏来解决重新定义问题是否合理?

是否有其他人尝试使用 pthreads 为 OSX 编写内核空间 drivers,并遇到了这个问题?任何见解将不胜感激。

谢谢。

愚蠢的问题。

我不知道为什么我没有提醒自己你不能在内核中使用 PTHREADS,特别是当我有构建 linux 内核的经验时(这应该是一个简单的提醒你不能这样做是个坏主意)

用拖鞋打自己的头

我不知道为什么昨天没有点击。