LINUX.ORG.RU
ФорумMobile

Задача с ядром и загрузкой модуля на Android


0

1

Доброго времени суток, господа. Ситуация следующая: в ядро вкомпилен модуль (назовем его М1), отвечающий за работу с usb. Модуль стоковый. Так же есть сторонний модуль (назовем его М2), реализующий функцию usb host'а. М2 является подгружаемым. М1 и М2 используют один и тот же чип и, что естественно, при попытке подгрузить М2 получаем device or resource busy. Отказаться от М1 невозможно, т.к. слишком много на него завязано (wi-fi и еще кой какой функционал). Вот хотел бы узнать есть ли возможность реализовать следующего рода фишку: при попытке загрузить модуль М2 вызвать функцию module_exit М1. И, соответственно, при выгрузке М2 вызвать module_init М1. Возможно ли такое вообще (с соответствующим допилом исходников) и, если возможно, то как реализовать?


Лучше допилить второй модуль, чтобы он не лез туда, где сидит первый. Если они дерутся за какой-то девайс, можно подёргать соответствующий файлик unbind в sysfs.

const86 ★★★★★
()
Ответ на: комментарий от const86

Не понял, что имеете в виду (я далеко не профи) но это исправляется гуглом. Но сдается мне, что это не совсем то, что нужно. Проблема не в том, что два модуля устройство не могут поделить, а в том, чтоб получить возможность между ними переключаться. Ведь они дают совершенно разный функционал.

sblblx
() автор топика
Ответ на: комментарий от nutz

Весьма подробный и аргументированный ответ...

sblblx
() автор топика

собрать ядро, чтобы M1 был модулем, а не статически скомпанован с ядром. Собственно допилить его до такой возможности и он будет выгружаться.

p.s. надо нормальные борды использовать, где фирмы нанимают нормальных разработчиков, а не первое попавшееся гамно от нвидии.

anonymous
()
Ответ на: комментарий от anonymous

В том и дело, что М1 должен быть встроен в ядро. Если выставить на него m, то ядро при сборке валит кучу ошибок, перестает работать wi-fi и еще некоторые плюшки. Можно было бы так сделать, поверьте, я бы не спрашивал.

sblblx
() автор топика
Ответ на: комментарий от sblblx

Ну так перепиши по-человечески оба модуля. Делай общий нестатический мутех и переменную, в которой будет записан режим (хост, клиент или ничего). Сделай через sysfs или еще как переключение режима. При переключении - ставить переменную в нужное значение, сбрасывать контроллер и отдавать управление нужному драйверу, отпуская мутех.

И вообще, если wifi перестает работать из-за драйвера usb КЛИЕНТА, то дело наверняка не в usb. Хотя в андроидных bsp и форкнутом ядре столько говна и костылей, что кроме как с дефолтным конфигом оно не компилится и не работает.

anonymous
()
Ответ на: комментарий от anonymous

То есть шанс есть. Эт радует. Ничего толком не понял (не программер я) но направление «копать» понял. Большое спасибо за отклик! Буду изучать предложенный способ. Еще варианты и помощь - естественно приветствуются

sblblx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.