Компиляция модуля ядра [Решено]

Изображение пользователя jacobtey.

Когда мои знакомые критически отзываются о целесообразности перехода с винды на линукс, мотивируя это отсутствием на нем современных игр, я возражаю им, что с таким "квестом" как линь ни о каких играх уже не вспоминаешь.

Теперь к сути вопроса.
У меня есть ноутбук. На нем установлена Кубунта 14.04. Помимо прочего ноутбук используется в качестве телевизора на основе связки tvheadend+XBMC. Прием сигнала со спутника осуществляется с помощью dvb-s2 usb-ресивера Prof 7500 и обрабатывается фронтендом stv0900 и фёрмвэром dvb-usb-p7500.fw от Игоря Липлианина. До недавнего времени все работало без нареканий. Но около месяца назад Радуга ТВ в связи с передислокацией на новый спутник (ABS-2)сменила символьные скорости на своих транспондерах. В итоге проявился косяк фронтенда - неработоспособность на высоких символьных скоростях. Решение этой проблемы было рождено в недрах интернета в виде соответствующей заплатки, так и оставшейся не включенной в мэйнстрим. Лечение предполагает наложение патча на исходник фронтенда с последующей перекомпиляцией ядра. Я не бог весть какой программист и с первого раза сделать у меня это не удалось. Впрочем, как и со второго. Постоянно возникали ошибки об отсутствии ядра соответствующей версии. Я пошел по пути наименьшего сопротивления, используя автоматический установщик с сайта другого производителя (TBS), пропатчив нужный фронтенд в нем. Все прошло на ура. Прием отличный со всех транспондеров. Но недавно я обнаружил, что своими действиями снес модуль ядра отвечающий за встроенную вэб-камеру. Обновленные ядра команды Кубунту возвращают статус-кво: работающая камера, неработающий ресивер. Каждый раз после обновления пересобирать ядро желания нет. Тем более, что трюк с модулями TBS оказался ущербен.

Нужен совет.
Есть ли способ перекомпилировать только пропатченный фронтенд и подставить его в ядро вместо нерабочего? Нормальной инструкции в нете найти не удалось. Пожалуйста, помогите.

РАЗОБРАЛСЯ САМ.

0
DarkneSS - 10 Июнь, 2014 - 18:53
Изображение пользователя DarkneSS.

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

0
jacobtey - 10 Июнь, 2014 - 20:56
Изображение пользователя jacobtey.

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

0
AlexMad - 10 Июнь, 2014 - 21:23

Если я правильно понял суть вопроса, то должен огорчить - под каждое новое ядро придется пересобирать модуль.

0
jacobtey - 10 Июнь, 2014 - 21:27
Изображение пользователя jacobtey.

Я не против собирать только модуль (пусть и под каждое новое ядро), но не все ядро целиком. Из двух зол выбирая меньшее.

0
jacobtey - 11 Июнь, 2014 - 09:22
Изображение пользователя jacobtey.

У меня установлены ядро 3.13.0-24, в котором работает ресивер, и 3.13.0-29, в котором я пытаюсь его завести. Загружаемые исходники имеют только номер 3.13.0, и я не могу понять, что они в себе содержат. Насколько я понимаю последние две цифры в версии ядра от убунты означают количество заплаток от ее разработчиков. Как скачать соответствующие исходники?

0
Гость - 10 Июнь, 2014 - 20:23

А другие USB устройства нормально работают после наложения патча ? А то как я понял и ресивер и камера оба usb ?

0
jacobtey - 10 Июнь, 2014 - 21:29
Изображение пользователя jacobtey.

Не,не. Камера встроена в лаптоп. Просто при пересборке ядра с помощью скрипта TBS я что-то сношу.

0
jacobtey - 11 Июнь, 2014 - 08:51
Изображение пользователя jacobtey.

Вот что-то по-моему нашел, но сыпет ошибки.
Для того чтобы установить или прорпатчить модуль не обязательно пересобирать ядро.
Последовательность должна быть такая:
1) скачать и установить исходники ядра (sudo apt-get install linux-source). Они установятся в /usr/src/linux-xxxxx.tgz (например /usr/src/linux-2.6.24-21.tgz)
2) распаковать tgz (например /usr/src/linux-2.6.24-21)
3) скопировать /boot/config-xxxxx (например /boot/config-2.6.24-21-generic) в распакованную папку исходников ядра (например /usr/src/linux-2.6.24-21) и переименовать config-xxxx в ".config"(точка обязательна)
4) открыть файл .config в текстовом редакторе, найти там свой модуль (например yenta_socket) и посмотреть чтобы стока была не закоментировна и в конце было "=m"
5) наложить нужный пач на модуль, либо перейти в папку модуля (например drivers/pcmcia) и вручную поправить исходнай файл модуля (например yenta_socket.c)
6) из раздела распакованных исходников ядра (например /usr/src/linux-2.6.21-24) дать команду "make drivers/путь к модулю/модуль.ko" (например "make drivers/pcmcia/yenta_socket.ko"). Таким образом соберётся только один нужный нам модуль.
7) скопировать (либо перезаписать) собранный модуль (например drivers/pcmcia/yenta_socket.ko) в /lib/modules/название ядра/kernel/drivers/путь к модулю/ (например /lib/modules/2.6.24-21-generic/kernel/drivers/pcmcia/).
Cool запустить команду "depmod -a"
9) перезапустить систему

Отсюда

Я не знал, поэтому допишу от себя. В .config нужно еще отключить debug ядра, а то модули собираются чудовищных размеров.

0
jacobtey - 11 Июнь, 2014 - 13:28
Изображение пользователя jacobtey.

Кое-как разобрался с ошибками при компиляции модуля. Почему-то коряво ложился патч. Пришлось руками переписывать из патча в исходник фронтенда. Теперь make завершается файлом stv0900.ko без ошибок.
Однако модуль не работает. После перезагрузки он не появляется в lsmod'e, а в ответ на принудительный запуск возвращает ошибку modprobe: ERROR: could not insert 'stv0900': Exec format error. Складывается впечатление, что исходники ядра не соответствуют установленному в системе.
Вот запара. Как это выяснить? Почему в примере исходник содержит номер микроверсии от убунты (2.6.24-21), а уменя скачивается только 3.13.0? Что-то изменилось с появлением третьей версии ядра?

Да, и если кому интересно, скрипт от TBS создавал модули в папке dvb/frontend,а в кубунте эти модули хранятся в папке dvb-frontend, поэтому систему клинило.

+1
jacobtey - 17 Июнь, 2014 - 21:59
Изображение пользователя jacobtey.

Получилось! Решение в шапке.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры