USB

Обсуждаем ReactOS по-русски

Moderators: fog, fireball

fog
Moderator
Posts: 824
Joined: Sun Nov 13, 2005 7:45 am
Location: Russia
Contact:

Post by fog »

zlat007 wrote: ... здесь так и открыт вопрос ... до сих пор еще не работает ... надо ждать 0.4 ... и возникает большое подозрение, что релиза так никогда и не будет.
Уважаемый, напомните пожалуйста, вы вот сюда, сколько денег перечислили?

vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Всем привет!

Кажется, я знаю "Кто виноват?" (Один из наших любимых вопросов) :)
Чтобы было понятно - немного деталей.

При запуске ОС, после передачи загрузчиком управления ядру, происходит (в том числе) инициализация менеджера ввода-вывода.
За это отвечает функция IoInitSystem() (reactos\ntoskrnl\io\iomgr\iomgr.c):

Code: Select all

...
    /* Load boot start drivers */
    IopInitializeBootDrivers();

    /* Call back drivers that asked for */
    IopReinitializeBootDrivers();
...
    /* Create ARC names for boot devices */
    Status = IopCreateArcNames(LoaderBlock);
...
    /* Assign drive letters */
    IoAssignDriveLetters(LoaderBlock,
                         &NtBootPath,
                         (PUCHAR)RootString.Buffer,
                         &RootString);
...
IopInitializeBootDrivers() - здесь загружаются Boot Drivers (шин, клавы, мышки, винтов, видео, сеть, звук ... и USB тоже).

IopReinitializeBootDrivers() - здесь по сути и происходит инициализация. Создается дерево устройств (нумерация начиная с шины PCI) и назначаются им соответствующие драйверы. Эти устройства опрашиваются менеджером PnP, сканируются все дочерние устройства, создаются стеки объектов устройств. По идее здесь должны быть опрошены все USB-устройства (контроллеры, хабы и сами девайсы). И по идее опрос USB должен быть в функции USBHUB_FdoStartDevice() или USBHUB_FdoQueryBusRelations() (reactos\drivers\usb\usbhub\fdo.c).

IopCreateArcNames() - в этой функции происходит передача управления для дальнейшей загрузки с текущего накопителя. То есть назначается "обслуживающий персонал" к загрузочному устройству (HDD, CD, RamDisk, Lan). Еще по-идее загрузочным устройством может быть USB устройство (флешка или USB-HDD, например).

IoAssignDriveLetters() - назначаются буквы дискам и создаются символические ссылки.

Всё замечательно (для USB), но есть одно но - инициализация (и определение) подключенных USB-устройств происходит уже после всего этого.
По-крайней мере у меня в VBox это так. То есть, если предложить, что, допустим, загрузка происходит с USB-HDD, то передать управление (в функции IopCreateArcNames() не получится, так как этот USB-HDD еще не опознан).

Еще, для загрузки с USB, freeloader должен уметь работать с USB. (По этому моменту не скажу - не смотрел исходники) .

Вообщем, чтобы можно было загружаться с USB (не через RamDisk эмулируя CD, а полноценно), надо: а) freeloader должен уметь читать с USB, б) драйвер usbhub должен сканировать и определять подключенные устройства до функции IopCreateArcNames().

Это, пожалуй, если не ответ на второй наш любимый вопрос ("Что делать?"), то попытка на него ответить. ;)

User avatar
lumix
Posts: 35
Joined: Thu Apr 02, 2015 4:44 pm

Re: USB

Post by lumix »

вот такую "флешку" всем разрабам подогнать бы, может дело и быстрее пойдёт, унифицированное железо, мобильность, желание что-то для этого чуда написать :D
http://www.alibaba.com/product-detail/2 ... 41335.html

Start
Posts: 159
Joined: Sun May 16, 2010 5:59 pm

Re: USB

Post by Start »



vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Теперь о моих "раскопках".
В Virtual Box получил такой же "спам" в логах как и здесь: Opening files from USB drive causes the debug log to be spammed. Ну и начал копать. В итоге, кажется разобрался с этой проблемой: Топик "USB drivers" на английском форуме Реактос. Я смог избавится от этого "спама" (а на самом от ошибок, после которых пришлось даже несколько раз форматировать флешку) и в OHCI (USB 1.1) и в EHCI (USB 2.0) драйверах. Только к сожалению где-то есть еще другая проблема - не все флешки распознаются. У меня распознались (и заработали) 2 флешки Кингстон (на 1 и 4 Гб) и еще одна без имени на 512 Мб. Transcend на 2 и 4 Гб, а также внешний USB HDD не распознались. Вопрос с распознаванием - это уже другая история ... Вообщем если у вас в логе есть "спам", то это устройство увиделось и оно может нормально работать. 8-)

lastar
Posts: 16
Joined: Sat Mar 24, 2012 1:01 pm

Re: USB

Post by lastar »

Привет vgal . Может вам стоит посмотреть как это реализовано в открытом Usb драйвере Apple ?

http://opensource.apple.com/tarballs/IO ... 4.2.tar.gz

http://opensource.apple.com/tarballs/IOUSBFamily/

в решении ошибок в Usb тут https://jira.reactos.org/browse/CORE-9224

vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Насчет драйвера Aplle - я не разработчик, не мне решать. Мне просто надоело переписывать CD-RW при каждом изменении в коде (для отладки). Одно дело - виртуальная машина, совсем другое - реальная. Еще надо лицензии вопрос изучать.

Насчет "Opening files from USB drive causes the debug log to be spammed" на JIRA. Я нашел в коде место, где возникает ошибка (которая весьма неприятная и может привести к порче файловой системы на флешке), которая не дает нормально работать c USB устройствами хранения данных. Но не устранил причину, а просто обошел эту неприятность. Об этом Томас Фабер и сказал (что надо устранять причину).

Теперь насчет вашего компьютера. На данный момент USB 2.0 практически не рабочий. Поэтому если тестировать, то на тех машинах, где в БИОС можно отключить 2.0 (оставив включенным 1.1). Еще можно отключить все, кроме HDD и CD-ROM.

В любом случае, пока не будет решена проблема "спама" ... дальше двигаться нет смысла.

Насчет других USB устройств (не устройств хранения данных) не знаю, не пробовал.

vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Млин! Я думал, только 2.0 не рабочий. Оказывается ...

Два дня убил на поиски косяка из трёх цифирь. Но нашел - таки. Загрузился с флешки на UHCI контроллере на реальном компе (в Virtual Box, как вы знаете, эмуляция только OHCI и EHCI). Фото здесь USBSTOR driver, USBSTOR_SendCSW() Fix CSW size|https://jira.reactos.org/browse/CORE-10565.

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

Кстати понадобилось почти 70 заходов. Спасибо создателям Rufus и RMPrepUSB. Представьте 70 раз переписывать CD-RW?
Даёшь в 21 веке ЮСБ в каждый дом! :)

Gennady
Posts: 37
Joined: Mon Oct 27, 2014 11:08 am

Re: USB

Post by Gennady »

vgal wrote: Даёшь в 21 веке ЮСБ в каждый дом! :)
Вот тут нельзя не согласиться....

Не хочу обижать разработчиков и лезть в их планы, но в 21м веке начинать надо было с USB: мышь, клава, флешки, диски, те же CD/DVD приводы...

Это, во многом, упростило бы задачу пользования/тестированя и увеличила бы аудиторию "любопытных".

Загрузился с флешки, нужен CD ? - подключил внешний ... и т.д.

Очень надеюсь, что эта, насущьная, проблема будет решена в скором времени.

towerr
Posts: 258
Joined: Wed Jun 20, 2007 3:01 am

Re: USB

Post by towerr »

Gennady wrote:
vgal wrote: Даёшь в 21 веке ЮСБ в каждый дом! :)
Вот тут нельзя не согласиться....

Не хочу обижать разработчиков и лезть в их планы, но в 21м веке начинать надо было с USB: мышь, клава, флешки, диски, те же CD/DVD приводы...

Это, во многом, упростило бы задачу пользования/тестированя и увеличила бы аудиторию "любопытных".

Загрузился с флешки, нужен CD ? - подключил внешний ... и т.д.

Очень надеюсь, что эта, насущьная, проблема будет решена в скором времени.
и да и нет... с точки зрения унифицирования ДА, усб прост с точки зрения простого юзыра, с точки зрения конструктивного исполнения, это просто кусок дешового дерьма, оно рядом по конструкции не стояло с компортом к примеру, это просто отжирательство процессорного времени, убожество полное... его еще надо полностью переработать чтоб оно было хотябы как-то обеспечено аппаратно, а не програмно.
предполагаю, что возникнет много вопросов и мнений по поводу усб, сразу адресую в вики, штудировать матчасть, точнее аппаратную часть.

Gennady
Posts: 37
Joined: Mon Oct 27, 2014 11:08 am

Re: USB

Post by Gennady »

towerr wrote: и да и нет... с точки зрения унифицирования ДА, усб прост с точки зрения простого юзыра, с точки зрения конструктивного исполнения, это просто кусок дешового дерьма, оно рядом по конструкции не стояло с компортом к примеру, это просто отжирательство процессорного времени, убожество полное... его еще надо полностью переработать чтоб оно было хотябы как-то обеспечено аппаратно, а не програмно.
предполагаю, что возникнет много вопросов и мнений по поводу усб, сразу адресую в вики, штудировать матчасть, точнее аппаратную часть.
В корне не согласен !!!

Я четко написал - "... Это, во многом, упростило бы задачу пользования/тестированя и увеличила бы аудиторию "любопытных". ..."

90% пользователей АБСОЛЮТНО не интересна аппаратно-программная реализацию интерфейсов. Им нужно просто и быстро.
Каким бы "Г" не было USB ( с любой точки зрения ), но это сейчас стандарт де-факто и от этого никуда.
И я сильно сильно сомневаюсь, что 99% современных пользователей понадобится поддержака COM и параллельных портов. Даже если в ROS она будет реализована идеально.

Давайте быть реалистами, ОС пишется для массы людей, а не для небольшого числа системных программистов, которые с пониманием отнесуться к каким либо сложностям....

Обычным пользователям нужна ОС, которую можно поствить на, практически, любое современное железо ( а не искать мамки с PS/2, COM и т.д. ) и просто работать - воткнуть флешку с кучей фоток и доков, внешний диск, который работает, как RT архиватор, внешний CD/DVD т.к. многие ноуты выпускаются без них....


P.S. Лично я, как программист и, более/менее, адеватный :) человек, поинимаю все сложности и объем работы, но.... опять же - давайте будем реалистами и жить в современном мире.

vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Есть хорошая новость: драйвер USB1.1 UHCI не использует функцию MmGetPhysicalAddress(), использование которой приводит к ошибкам при передачи данных. Почему я не посмотрел сразу на UHCI? (Наверное, потому что Virtual Box его не поддерживает :? ). А в UHCI драйвере по-факту используется двойная буферизация. Которую я, кстати, и предлагал использовать, и даже написал патч (который работает). Вообщем на будущее - можно попробовать использовать этот механизм и в OHCI, и в EHCI драйверах пока не разберутся с MmGetPhysicalAddress().

Пока же, мне кажется, стоит довести до ума UCHI (может и еще OHCI - не знаю как часто он используется в реальной жизни).

Нормальной работе UHCI серьезно мешают на мой взгляд две вещи:

1. Не умение работать с карт-ридерами (а может и с другими (за исключение корневого) хабами :?: ).

2. Во время начала загрузки RoS, EHCI должен корректно определить уже подключенные устройства (их тип, скорость ...) и назначить им правильную маршрутизацию. Так как EHCI должен "руководить" всеми устройствами - и USB 2.0 и USB1.1. Но драйвер EHCI не совершенен пока и не делает это правильно.

С 1 пунктом понятно, что надо разбираться. Но временно можно отключить карт-ридер. Кстати вопрос: на ноутбуках есть какой-либо разъем внутри, чтобы можно было отсоединять его или это все в чипах?

2. Так как толку от EHCI пока все-равно нет, то напрашивается идея - отключить его временно. Тогда UHCI драйвер сможет нормально работать (без хозяина). Потому что из спецификации EHCI:
If the system does not include a driver for the EHCI host controller and the host controller includes Companion Controllers, then the ports will still work in Full- and Low-speed mode (assuming the system includes a driver for the companion controllers).
Примерный перевод: Если в ОС нет драйвера контроллера EHCI, и контроллер имеет Сопутствующие Контроллеры, то порты будут все еще работать в Full and Low режимах (если в ОС есть драйверы для сопутствующих контроллеров).

Я проверил эти вопросы на практике. И с отключенным драйвером EHCI (просто в DriverEntry() сразу return) загрузился на стареньком компе с включенным USB 2.0 в BIOS (карт-ридер пришлось отключать). Всё Ok 8-)

Вопрос только: соблюдают ли спецификацию изготовители матплат и ноутбуков?

Start
Posts: 159
Joined: Sun May 16, 2010 5:59 pm

Re: USB

Post by Start »

vgal
Некоторое время покопался в интернете, нашел интересные ссылки.
Возможно там есть что-то полезное, посмотрите пожалуйста.

Кратко: Самя новая версия Драйвера USB 2.0 ( драйвер 2.0 ) для портов usb VIA. The VIA USB 2.0 Host Controller.
Язык интерфейса: Мультиязычный
Размер файла: 14.53 МБ
Лицензия: FreeWare (бесплатная)
Операционные системы: Win 9x, Win ME, Win 2000, Win XP
Страница сайта 1001soft
Скачать

Драйвер USB 2.0 / XP
Система: Windows98, Windows98 Second Edition, Windows Millennium, Windows 2000,Windows XP all SP
Статус: бесплатно
Целостность: полная, одним Файлом
Драйвер: EXE в архиве
Размер : 15 мб.
Язык: Английский
Имя Драйвера: VIA USB 2.0 Host Controller
Сайт driverlib.ru

Catalog Drivers → USB
Ссылка1
Ссылка2
Ссылка3

*
usb 2.0 драйвера для компьютера
MmGetPhysicalAddress

vgal
Posts: 88
Joined: Mon Jan 26, 2015 7:38 am

Re: USB

Post by vgal »

Спасибо, Start за желание помочь.

К сожалению, это всё уже "готовые" драйвера (не исходный код).

Мне действительно нужна инфа по хост-контроллеру EHCI - в частности как он должен инициализироваться и работать с контроллерами - компаньонами.
В принципе в спецификации это есть, но во-первых на английском, а во-вторых всегда есть невидимые ньюансы (+ производители что-то добавляют или меняют). Чтобы это как миниум "переварить" нужно время.

Кое-что уже нашлось:
http://wiki.kolibrios.org/wiki/USB/ru - где заголовок "Практическая реализация" (заточено под KolibriOS, общее для всех, надо EHCI)
http://habrahabr.ru/company/kolibrios/blog/183184/ - где заголовок "EHCI и компаньоны" (заточено под KolibriOS, общее описание)

Еще нашел ценную инфу (уже не по контроллеру, а по нумерации USB устройств) :
How does USB stack enumerate a device? - под Win7, осталось узнать что не нужно из этого списка в W2003.

В книге Агурова есть короткое описание (только) UHCI контроллера. Может есть литература по-новее?

Однако, мне кажется, "перепрыгнуть" через USB 1.1 не получится - нужно сначала разобраться с ним, а уже затем браться за USB 2.0.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests