Когда собирается ядро, в конфиге сборки указывается, собирать ли драйвер, если собирать, то модулем или вшить. Вы можете взять исходники своего дистрибутивного ядра, если по умолчанию драйвер собирается модулем, то просто пересобирайте с заплаткой и замените файл модуля. Если же по умолчанию вшито, то придётся вам поставить самосборное ядро, наверно.
Это я понимаю. В моем случае это слава богу отдельный модуль. А поскольку кроме этого модуля я ничего в ядре менять (патчить) не собираюсь, а делать это придется на каждом обновленном ядре, то я и подумал, что возможно есть способ скомпилировать только этот модуль, как если бы он компилировался вместе со всем ядром, а затем этот скомпилированный модуль просто поставить в ядро вместо прежнего непропатченного. Нет желания каждый раз заводить эту шарманку на полчаса с риском упустить что-то нужное ради одного модуля.
У меня установлены ядро 3.13.0-24, в котором работает ресивер, и 3.13.0-29, в котором я пытаюсь его завести. Загружаемые исходники имеют только номер 3.13.0, и я не могу понять, что они в себе содержат. Насколько я понимаю последние две цифры в версии ядра от убунты означают количество заплаток от ее разработчиков. Как скачать соответствующие исходники?
Вот что-то по-моему нашел, но сыпет ошибки. Для того чтобы установить или прорпатчить модуль не обязательно пересобирать ядро.
Последовательность должна быть такая:
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 ядра, а то модули собираются чудовищных размеров.
Кое-как разобрался с ошибками при компиляции модуля. Почему-то коряво ложился патч. Пришлось руками переписывать из патча в исходник фронтенда. Теперь 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, поэтому систему клинило.
Когда собирается ядро, в конфиге сборки указывается, собирать ли драйвер, если собирать, то модулем или вшить. Вы можете взять исходники своего дистрибутивного ядра, если по умолчанию драйвер собирается модулем, то просто пересобирайте с заплаткой и замените файл модуля. Если же по умолчанию вшито, то придётся вам поставить самосборное ядро, наверно.
Это я понимаю. В моем случае это слава богу отдельный модуль. А поскольку кроме этого модуля я ничего в ядре менять (патчить) не собираюсь, а делать это придется на каждом обновленном ядре, то я и подумал, что возможно есть способ скомпилировать только этот модуль, как если бы он компилировался вместе со всем ядром, а затем этот скомпилированный модуль просто поставить в ядро вместо прежнего непропатченного. Нет желания каждый раз заводить эту шарманку на полчаса с риском упустить что-то нужное ради одного модуля.
Если я правильно понял суть вопроса, то должен огорчить - под каждое новое ядро придется пересобирать модуль.
Я не против собирать только модуль (пусть и под каждое новое ядро), но не все ядро целиком. Из двух зол выбирая меньшее.
У меня установлены ядро 3.13.0-24, в котором работает ресивер, и 3.13.0-29, в котором я пытаюсь его завести. Загружаемые исходники имеют только номер 3.13.0, и я не могу понять, что они в себе содержат. Насколько я понимаю последние две цифры в версии ядра от убунты означают количество заплаток от ее разработчиков. Как скачать соответствующие исходники?
А другие USB устройства нормально работают после наложения патча ? А то как я понял и ресивер и камера оба usb ?
Не,не. Камера встроена в лаптоп. Просто при пересборке ядра с помощью скрипта TBS я что-то сношу.
Вот что-то по-моему нашел, но сыпет ошибки.
Отсюда
Я не знал, поэтому допишу от себя. В .config нужно еще отключить debug ядра, а то модули собираются чудовищных размеров.
Кое-как разобрался с ошибками при компиляции модуля. Почему-то коряво ложился патч. Пришлось руками переписывать из патча в исходник фронтенда. Теперь 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, поэтому систему клинило.
Получилось! Решение в шапке.
Отправить комментарий