MacOS驱动代码移植问题记录

在C程序移植到macos 驱动程序中时,一系列问题的记录。

解决问题完成后分析问题出现原因是:

1  strncpy函数未定义 – 根因分析:在libkern.h中发现已被弃用,使用strlcpy代替。

2 stdio.h找不到 –  根因分析:macos内核不支持大部分std库(linux 也不支持,只是代替实现很多)。

3 wchar.h找不到 xcode发现文件是可以跳转并查看到文件的 – 根因分析:macos内核不支持大部分应用层定义库, 也未定义宽字节,只能手动写转换。并且在头文件中已经用宏区分内核或应用层定义,在xcode中可以看到头文件,但是头文件中用很多宏区分开来定义了,所以不支持。

4 TRUE / FALSE  不能被重定义,并且重定义了也不会提示错误或警告 – 根因分析:clang编译器支持这个关键字大写,但是重定义未提示错误(可能是我从警告中没看出来)。

5 驱动可以使用C++ 代码并编译成功,但是内核加载时,提示找不到符号 – 根因分析:C++未定义extern C 导出成C符号,在C代码中使用就会有问题。xcode和clang编译器检查不出来,但是加载内核时检查符号表时对不上。感觉默认macos驱动使用的是C++连接器。