最近在搞OSX驱动开发,中文资料甚少,看看官方文档,然后自己摸索,把一些调试经验记录一下,以备后用,有的可能不正确,有高手看到希望能够指点。


1.安装驱动

驱动编译完成后,拷贝到/System/Library/Extentions/目录下。拷过去后会有提示说该扩展安装不正确,不能正确使用。需要做以下处理:

修改所有者:

sudo chown -R root:wheel  xxx.kext/

修改权限:

sudo chmod -R 755 xxx.kext/

更新系统扩展目录的访问和修改时间

sudo touch /System/Library/Extentions

修改完后,重启电脑,这一步不知道是不是不用重启也行。


2.调试驱动

在苹果的开发者网站上有文档介绍如何进行驱动调试,请戳这里

调试驱动的(match & load)匹配和加载问题。

kextload:这是OSX系统自带的一个工具,用于加载系统扩展kext,并在加载前检验plist文件进行依赖文件验证,权限验证,然后打印出错误信息。

sudo kextload -t xxx.kext

如下例:

[computer_name:] user_name% sudo kextload -t BadKEXT.kext
Password:
can't add kernel extension BadKEXT.kext (validation error) (run kextload
                            on this kext with -t for diagnostic output)
kernel extension BadKEXT.kext has problems:
Validation failures
{
    "Info dictionary missing required property/value" = {
        "IOKitPersonalities:BadKEXT:IOProviderClass"
    }
    "Info dictionary property value is of illegal type" = {
        "IOKitPersonalities:BadKEXT:IOKitDebug"
    }
}
Authentication failures
{
    "File owner/permissions are incorrect" = {
    "/Users/user_name/Projects/BadKEXT/build/BadKEXT.kext"
    "/Users/user_name/Projects/BadKext/build/BadKEXT.kext/Contents/Info.plist"
    "/Users/user_name/Projects/BadKext/build/BadKEXT.kext/Contents"
    "/Users/user_name/Projects/BadKext/build/BadKEXT.kext/Contents/MacOS/BadKEXT"
        "/Users/user_name/Projects/BadKext/build/BadKEXT.kext/Contents/MacOS"
    }
}
Missing dependencies
{
    "com.apple.kernel.libker" =
        "No valid version of this dependency can be found"
}


中间蓝色字体是错误提示。

有时在这一步没有错误提示,那么可以用下面一个命令进行检测。

kextutil:

这里是对这命令的介绍,该命令用于加载系统扩展kext,诊断错误和生成符号,用法如下:

sudo kextutil -t  xxx.kext

-t:该参数的函数是打印错误信息