在 Kext 中链接 Dylib?

2023-11-30

我为 OS X 编写了一个 kext,它使用 (IOKit) libusb 和 jpeglib 实现了基于 USB 的帧缓冲区。这两个都是 dylib,由于某种原因,它们无法在 XCode 中正确链接,并且操作系统在尝试加载 kext 时不会解析依赖关系。

整个事情的背景是三星制造了一款可以充当第二个显示器的液晶相框;唯一的问题是它不是 DisplayLink 或任何其他已知的协议——仅限 Windows 的驱动程序会输出自定义标头,并且每个帧都被编码为 JPEG 并发送到设备。我的实现在 OS X 上实现了这一点,但我使用了 libusb,因为它是一个帧缓冲区设备,需要在启动时加载——想要更多地处理驱动显示器而不是热插拔检测和 IOKit 的 USB 设备要求。

谢谢你的帮助!你们太棒了。


恐怕 kext 本身并不是严格动态链接的(它们在运行时加载,但它们的结构是静态的),并且除非进行一些英勇的自定义链接器/加载器工作,否则您将无法将 dylib 加载到内核空间中。

据我所知,libusb的目的是编写USB驱动程序user空间。因此,我不清楚为什么你首先要构建一个 kext(它将在内核空间中运行)。设备中是否有某些元素无法使用 libusb 从用户空间驱动?如果是这样,请尝试仅为该组件创建 kext,并将驱动程序的其余部分放入用户空间守护程序中。

如果 libusb 和仅内核组件之间的拆分不起作用,则需要在 kext 中使用内核空间 IOKit USB API。您可能会找到一个静态编译的 JPEG 库,并且可以在 kext 中使用(尽管没有完整的 libc 将是一个问题),但我强烈怀疑您实际上并不想这样做 - JPEG(de )压缩似乎应该在用户空间中完成。

我的印象是您根本不需要构建自己的 kext - 创建一个命令行(或 GUI)应用程序,将 libusb 和 jpeglib 链接到它,并在用户空间中完成这一切。如果您希望它进入后台,请使用常用的 fork() 方法来守护进程,使用管道、套接字或其他 IPC 与驱动程序的使用者进行通信。如果您可以以某种方式避免编写一行内核代码,我强烈建议您坚持使用用户空间。调试内核代码是一件非常痛苦的事情,驱动程序越复杂,情况就越糟糕(我认为 JPEG 解/压缩很复杂)。

像往常一样,更多信息会很有用,特别是我提到的部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Kext 中链接 Dylib? 的相关文章

随机推荐

  • C++ 类和相互链接的对象形成一个循环

    我怎样才能实现在C 中形成循环的互锁对象结构 class Foo Bar bar class Bar Foo foo Foo h include
  • 如何从 setTimeout 做出承诺

    这不是一个现实世界的问题 我只是想了解如何创建承诺 我需要了解如何对不返回任何内容的函数做出承诺 例如 setTimeout 假设我有 function async callback setTimeout function callback
  • ASP.NET Boilerplate (Core 2.0 + Angular 5) 免费模板中的 Promise 错误

    我一直在使用 ASP NET Boilerplate 通过使用自定义 API 的 REST API 客户端 如 Postman 对数据库进行 CRUD 操作 到目前为止 它运行得很好 但是当我继续到前端部分时 有未处理的异常使用管理员帐户登
  • SQL SERVER 2008 JOIN 提示

    最近 我正在尝试优化这个查询 UPDATE Analytics SET UserID x UserID FROM Analytics z INNER JOIN UserDetail x ON x UserGUID z UserGUID 估计
  • 在 Word 2010 标题中插入文本和字段而不使用 .Select

    我正在尝试修复 Word 2010 页面标题 其中包含文件名 保存日期和页码字段以及每个字段之间的一些文本 如下所示 文件名 保存日期 选项卡 页码 但是 我似乎无法将琴弦放在正确的位置 到目前为止我所拥有的是这样的 Sub CreateH
  • 限制每个节点的 Pod 数量

    我正在尝试限制集群中每个节点的 Pod 数量 我设法使用配置文件从 kubeadm init 添加每个节点的全局限制 apiVersion kubeadm k8s io v1beta1 kind ClusterConfiguration n
  • 旋转字典的值

    输入 34 apple 65 ball 32 cat 78 dog 输出 34 dog 65 apple 32 ball 78 cat 我提出了以下方法 但是有没有更快的方法来执行此任务 def rotate values my dict
  • 如何从 SPARQL 查询访问土地注册处住宅类型

    我正在尝试使用 SPARQL 查询从英国土地登记处检索住宅类型 API 显示它被称为 属性类型 并显示有四种类型 独立式 公寓式 半独立式 联排式 API在这里 http landregistry data gov uk def commo
  • 在推送 GitHub 期间从命令行使用 SSH 密钥?

    我在 GitHub 上存档了现有的 SSH 密钥 我正在尝试将更改推送到其他人的 GitHub 项目 我有合作者访问该帐户 系统提示我输入密码 git push warning push default is unset its impli
  • 在 Rust 中,不匹配的arm是否会在“match”语句中获取变量的所有者?

    我是 Rust 新手 下面是我的测试 derive Debug enum Food Cake Pizza Salad derive Debug struct Bag food Food fn main let bag Bag food Fo
  • 自动从网站按钮单击每日下载 csv 文件

    我想自动化访问网站 单击按钮和保存文件的过程 在此站点上下载文件的唯一方法是单击按钮 您无法使用 url 导航到该文件 我一直在尝试使用 phantomjs 和 casperjs 来自动化这个过程 但没有取得任何成功 我最近尝试在这里使用布
  • 在 iPhone OS 4.0 上从相机获取曝光值

    拍照时可以获取相机的曝光值 无需将其保存到 SavedPhotos A光度计iPhone 上的应用程序可能通过使用一些私有 API 来执行此操作 该应用程序仅在 iPhone 3GS 上执行此操作 因此我猜测它可能与创建图像时填充此信息的
  • Django get_or_create 在导入 CSV 时返回 models.DoesNotExist

    我花了很长时间才弄清楚这一点 我只是尝试使用 Python 的 csv 模块和 Django 的 get or create 导入 CSV 文件 这是我的简单代码 基于this code import csv from models imp
  • 如何将包含指数数的字符串转换为十进制并返回字符串

    我正在 delphi 和 c 之间转换代码 值作为字符串存储在 delphi 应用程序的文本文件中 存储值的示例为 4 42615029219009E 5 现在 在我的 C 应用程序中 我需要读入该字符串值 然后能够再次写出该值 最初我使用
  • BlackBerry touchEvent 外部字段触发 fieldChanged

    我遇到一个问题 如果我按下 触摸某个字段之外fieldChanged 具有焦点的字段会触发事件 我的布局MainScreen非常简单 就像这样 public class myMainScreen extends MainScreen imp
  • 使用Python抓取谷歌搜索结果标题和网址

    我正在使用 Python 3 7 开发一个项目 其中我需要抓取标题和 URL 的前几个 Google 结果 我已经使用 BeautifulSoup 尝试过 但它不起作用 这是我尝试过的 import requests from my fak
  • Python:通过加窗的高通 FIR 滤波器

    我想通过 Python 中的窗口创建一个基本的高通 FIR 滤波器 我的代码在下面 并且是故意惯用的 我知道你 很可能 可以用 Python 中的一行代码来完成这个 但我正在学习 我使用了带有矩形窗口的基本 a sinc 函数 我的输出适用
  • 如何清除字符串文字池中的条目[重复]

    这个问题在这里已经有答案了 可能的重复 String intern 的垃圾收集行为 Java 如何存储字符串以及子字符串内部如何工作 根据我的说法 声明为 null 时的 String 引用不会从字符串文字池中删除该条目 我想知道如何清除它
  • 将登录表单与 scrapy 一起使用

    scrapy框架 https github com scrapy scrapy 提供了一个库 供登录需要身份验证的网站时使用 https github com scrapy loginform 我已经浏览了这两个程序的文档 但是我似乎无法弄
  • 在 Kext 中链接 Dylib?

    我为 OS X 编写了一个 kext 它使用 IOKit libusb 和 jpeglib 实现了基于 USB 的帧缓冲区 这两个都是 dylib 由于某种原因 它们无法在 XCode 中正确链接 并且操作系统在尝试加载 kext 时不会解