Nano Hash - криптовалюты, майнинг, программирование

Mac - виртуальный последовательный порт

Мне нужно создать приложение Cocoa, которое будет создавать виртуальный последовательный порт, доступный для других приложений, то есть зарегистрированный в реестре IO Kit.

Суть приложения:

  • Создайте виртуальный последовательный порт (перечисленный в / dev и зарегистрированный в реестре IOKit)
  • Инициируйте TCP-соединение с другим компьютером
  • Прокси-сервер всего, что получено через виртуальный последовательный порт, в сеть и наоборот.

Это приложение будет использоваться сторонними приложениями, которые взаимодействуют с последовательными портами на компьютере, что позволяет размещать конкретное последовательное устройство в сети. Какао и сетевая часть - это не проблема, я написал несколько приложений, которые общаются по сети. Мое зависание - это последовательный порт.

Я провел тест с socat / netcat / minicom, чтобы убедиться, что все это работает для проксирования трафика pty / tty по сети, но tty, который я использую, не отображается как пригодный для использования случайными приложениями, потому что он не зарегистрирован в IO Kit Реестр.

Хотя я могу использовать главный / подчиненный pty / tty для связи, мне нужно, чтобы этот подчиненный tty отображался в приложениях Mac. Что было бы очень удобно, так это способ зарегистрировать tty в реестре IO Kit.

Мне действительно нужно создавать собственный драйвер kext IOKit, который регистрируется во время выполнения приложения Какао? Если так, мне предстоит большая кривая обучения. С чего мне начать читать? Или я могу использовать IOKit для создания виртуального последовательного порта и зарегистрировать его как пригодный для использования последовательный порт для приложений без необходимости загружать какие-либо расширения ядра?

Спасибо за любую помощь, которую вы можете предоставить,
Stateful

30.04.2012

Ответы:


1

Прежде всего, проверили ли вы, можете ли вы позаимствовать решение из этого приложения? На веб-сайте не очевидно, удалось ли им полностью интегрировать свои виртуальные последовательные порты в систему.

Если есть способ сделать это из пользовательского пространства, я об этом не знаю. API-интерфейс IOKit пользовательского пространства обычно не позволяет создавать экземпляры классов, не говоря уже о новых классах драйверов устройств. Возможно, вам удастся каким-то другим способом убедить библиотеки Какао найти его, несмотря на то, что они не зарегистрированы в ядре.

Я не знаю, удастся ли вам создать «фиктивный» последовательный порт в ядре, а затем переместить свой tty на его место в / dev из вашего демона пользовательского пространства. Может это вариант.

Если вам нужно сделать все это в ядре:

Сам виртуальный драйвер не должен быть слишком трудоемким, по крайней мере, хотя ему потребуется некоторое время, чтобы освоиться с разработкой ядра. К сожалению, документация по драйверам последовательного порта довольно скудна - ключевым моментом является создание подкласса абстрактного класса IOSerialDriverSync. Почти единственное описание, которое я видел, есть в книге Оле Генри Халворсена Программирование ядра OSX и iOS. Также есть фрагмент примера операций чтения и записи. (раскрытие информации: я был одним из технических рецензентов этой книги; я не получаю никаких стимулов для того, чтобы рекомендовать ее - в данном случае это буквально единственная документация, о которой я знаю). Вы можете найти источник для полный драйвер последовательного порта в драйвер USBCDC от Apple, AppleUSBCDCDMM класс, который фактически представляет узел последовательного порта.

Относительно просто открыть так называемый «элемент управления ядром» в ядре, отдельные API-интерфейсы задокументированы здесь ; из пользовательского пространства вы используете обычные BSD-сокеты _3 _ / _ 4_ API. (это также описано в вышеупомянутой книге) Затем ваш демон может подключиться к нему, и все, что вам нужно сделать, это передать данные между сокетом и устройством виртуального последовательного порта. Конечно, вам нужно будет правильно обрабатывать события отключения и тому подобное.

Тем не менее, я думаю, что это достижимо в качестве первого проекта ядра для опытного программиста на C (с некоторым C ++).

Надеюсь, это поможет!

30.04.2012
  • Отличный материал, pmjordan. Я взглянул на это приложение, на которое вы ссылались, и они фактически включают скомпилированный исполняемый файл socat в свое приложение, а затем просто передают ему аргументы для выполнения. И те последовательные порты, которые он использует, также не зарегистрированы в реестре IO Kit. Я купил книгу, о которой вы упомянули, и там много информации. Спасибо за указатель! 02.05.2012
  • @Stateful Ты вообще с этим справился? 28.08.2014
  • Привет, ТВ, извини, но нет. Я перешел к другим проектам. Я все еще хотел бы заняться этим. 30.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..