Re: Перекомпилировать модуль для Live системы.
Артеменко Никита wrote: > У меня получилось скомпилировать модуль! Ваши советы помогли. > Я бы хотел написать небольшую пошаговую инструкцию для тех, кто хочет > научиться компилировать модули. Я знаю, что в интернете их уже много, но > по-моему не помешает еще одна. [ велосипедный завод поскипан ] > Я надеюсь, что моя инструкция поможет кому-нибудь не запутаться во всем этом. > А если запутались, то пишите в мэйл листы, кто-нибудь обязательно поможет. Открой для себя dkms. в дирьку с модулем кладешь примерно такой dkms.conf PACKAGE_NAME="mycoolmodule" PACKAGE_VERSION="0.0.0.1" MAKE[0]="make -C $kernel_source_dir M=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build" BUILT_MODULE_NAME[0]="mycoolmodule" DEST_MODULE_LOCATION[0]="/kernel/other/mycoolmodule" AUTOINSTALL="yes" свой mycoolmodule кладешь в /usr/src/ (или куда там тебе удобнее), в том-же /usr/src/ делаешь dkms add mycoolmodule/0.0.0.1 dkms autoinstall и всё. При установке нового ядра - dkms пересоберет сам всё необходимое.
Re: Перекомпилировать модуль для Live системы.
У меня получилось скомпилировать модуль! Ваши советы помогли. Я бы хотел написать небольшую пошаговую инструкцию для тех, кто хочет научиться компилировать модули. Я знаю, что в интернете их уже много, но по-моему не помешает еще одна. Итак, компилируем модуль ядра в Debian Linux. Модуль будет компилироваться на системе, для которой предназначен. В моем случае это live система, которая грузится с флешки. 1. Загружаемся в live систему, подключаем интернет. 2. sudo apt-get install module-assistant 3. sudo m-a prepare Getting source for kernel version: 3.16.0-4-586 Kernel headers available in /lib/modules/3.16.0-4-586/build Creating symlink... После этой команды мы видим, что module-assistant скачал заголовки, которые подходят к нашему ядру, и теперь указывает, в какой папке они доступны. Затем он устанавливает пакет build-essential со всяким необходимым барахлом. 4. Дальше мы будем скачивать код ядра, чтобы потом заново скомпилировать один из модулей. Важно установить исходники именно той версии ядра, которое сейчас запущено. uname -r Эта команда выдает версию ядра. sudo apt-get install linux-source-3.16 После этой команды в папке /usr/src появится архивный файл. Его можно распаковать куда-нибудь, можно в домашнюю папку, можно куда-нибудь на жесткий диск. Распаковку можно делать от имени обычного пользователя. Откройте терминал на той папке, куда хотите распаковать, и выполните: tar -xf /usr/src/linux-source-3.16.tar.gz Затем перейдите в появившуюся папку: cd linux-source-3.16 5. Находясь в папке с деревом исходных кодов, в терминале выполните: make oldconfig Затем make prepare Потом нужно еще make scripts 6. Если сейчас начать компилировать модули, то make будет ругаться, что потерян файл Module.symvers Этот файл лежит там же где и заголовки ядра. Его надо аккуратно скопировать в наше дерево исходников. 7. Пора компилировать модули. Не все сразу, а те, которые нужны. Для себя я компилирую драйвер аудиокарты snd-echo3g, исходники к которому лежат в sound/pci/echoaudio Люблю читать исходный код! Особенно, если в нем есть хорошие комментарии, заботливо оставленные автором драйвера. make modules SUBDIRS=sound/pci/echoaudio Эту команду нужно запускать в корне дерева исходников. Если все пройдет без ошибок, то рядом с исходным кодом появятся файлы драйверов. 8. Перед тем как редактировать исходный код, полезно выполнить make clean SUBDIRS=sound/pci/echoaudio Скомпилированные файлы исчезнут. После редактирования снова запустите команду из седьмого пункта, и они снова скомпилируются. 9. Вы наверное уже умеете пользоваться командами modprobe, lsmod, modinfo. С помощью команды modinfo snd-echo3g мы узнаем подробности модуля из работающей системы, узнаем точное местонахождение файла. Можно заменить этот файл на наш модернизированный, затем выгрузить модуль, и сразу же загрузить. modprobe -r snd-echo3g && modprobe snd-echo3g Я надеюсь, что моя инструкция поможет кому-нибудь не запутаться во всем этом. А если запутались, то пишите в мэйл листы, кто-нибудь обязательно поможет.
Re: Перекомпилировать модуль для Live системы.
Hello Артеменко, On Mon, 01 May 2017 20:16:48 +0300 Артеменко Никита wrote: > Здравствуйте. Поздравляю всех с первым мая! > > В моем институте стоит компьютер, оборудованный звуковой картой > Echoaudio Gina 3G, поставить туда Линукс мне не разрешают, но я могу > запускать live-систему с флешки. Звуковая карта не работает. Я бы, кстати, начал с того, что использовал ядро с бэкпортов или вообще testing - он уже достаточно стабилен. Кстати, а firmware-то успешно загружается? Потому как вот тут[1] пишут, что ее надо руками откуда-то скачивать, но там информация могла устареть. [1] https://wiki.debian.org/echoaudio -- Best regards, Alexander Gerasiov Contacts: e-mail: g...@cs.msu.su Homepage: http://gerasiov.net Skype: gerasiov PGP fingerprint: 04B5 9D90 DF7C C2AB CD49 BAEA CA87 E9E8 2AAC 33F1
RE: Перекомпилировать модуль для Live системы.
Вам в помощь https://packages.debian.org/ru/sid/module-assistant m-a prepare Подготовит все для сборки От: Артеменко Никита Отправлено: 1 мая 2017 г. в 20:25 Кому: debian-russian@lists.debian.org Тема: Перекомпилировать модуль для Live системы. Здравствуйте. Поздравляю всех с первым мая! В моем институте стоит компьютер, оборудованный звуковой картой Echoaudio Gina 3G, поставить туда Линукс мне не разрешают, но я могу запускать live-систему с флешки. Звуковая карта не работает. Вывод dmesg я пока не могу показать, но из него видно, что модуль snd_echo3g загружает прошивку, потом еще одну, а затем происходит ошибка ввода-вывода. Я бы хотел включить в модуле сообщения отладки, чтобы он подробнее сообщал о своей работе (я смотрел исходник, там нужно определить специальную переменную, затем перекомпилировать, и тогда он будет с помощью printk() выводить сообщения о каждом шаге). И так, мне нужно перекомпилировать модуль для действующего live ядра, но при этом не пересобирая ядро. Я искал в Гугле, многие пишут, что есть возможность собрать модуль, не пересобирая ядро, но у каждого дистрибутива свои особенности, и инструкции часто разрозненные, не полные, и не подходящие друг к другу. Мне нужен ваш совет. Именно в Debian какая правильная последовательность действий для пересобирания модуля? Какие пакеты установить для сборки? Куда скачивать исходники? В /usr/src/ или в домашнюю папку, какую команду make, с каким makefile запускать? Возможно ли вообще в Debian пересобрать модуль для работающего ядра без перекомпиляции всего ядра? В идеале я бы хотел получить snd-echo3g.ko файл, который можно будет вставить в действующее ядро, затем перезагрузить этот модуль. Вот вывод команд, которые я запускал на live системе: user@debian:~$ uname -r 3.16.0-4-586 user@debian:~$ sudo modinfo snd-echo3g filename: /lib/modules/3.16.0-4-586/kernel/sound/pci/echoaudio/snd-echo3g.ko description:Echoaudio Echo3G soundcards driver license:GPL v2 author: Giuliano Pochini firmware: ea/3g_asic.fw firmware: ea/echo3g_dsp.fw firmware: ea/loader_dsp.fw alias: pci:v1057d3410svECC0sd0100bc*sc*i* depends:snd-pcm,snd-rawmidi,snd intree: Y vermagic: 3.16.0-4-586 mod_unload modversions 586TSC parm: index:Index value for Echo3G soundcard. (array of int) parm: id:ID string for Echo3G soundcard. (array of charp) parm: enable:Enable Echo3G soundcard. (array of bool) Я буду благодарен за любые советы, когда разберусь с аудиокартой, обязательно напишу, что за проблема там была. P.S. после перезагрузки в windows карта работает нормально.
Re: Перекомпилировать модуль для Live системы.
Hello Артеменко, On Mon, 01 May 2017 20:16:48 +0300 Артеменко Никита wrote: > Здравствуйте. Поздравляю всех с первым мая! > > В моем институте стоит компьютер, оборудованный звуковой картой > Echoaudio Gina 3G, поставить туда Линукс мне не разрешают, но я могу > запускать live-систему с флешки. Звуковая карта не работает. Вывод > dmesg я пока не могу показать, но из него видно, что модуль > snd_echo3g загружает прошивку, потом еще одну, а затем происходит > ошибка ввода-вывода. Я бы хотел включить в модуле сообщения отладки, > чтобы он подробнее сообщал о своей работе (я смотрел исходник, там > нужно определить специальную переменную, затем перекомпилировать, и > тогда он будет с помощью printk() выводить сообщения о каждом шаге). > И так, мне нужно перекомпилировать модуль для действующего live ядра, > но при этом не пересобирая ядро. > > Я искал в Гугле, многие пишут, что есть возможность собрать модуль, > не пересобирая ядро, но у каждого дистрибутива свои особенности, и > инструкции часто разрозненные, не полные, и не подходящие друг к > другу. Мне нужен ваш совет. Именно в Debian какая правильная > последовательность действий для пересобирания модуля? Какие пакеты > установить для сборки? Куда скачивать исходники? В /usr/src/ или в > домашнюю папку, какую команду make, с каким makefile запускать? > Возможно ли вообще в Debian пересобрать модуль для работающего ядра > без перекомпиляции всего ядра? Можно, для этого надо собрать нужный тебе модуль относительно используемого ядра. То есть в твоем дистрибутиве должен быть пакет linux-headers-3.16.0-4-586 - это и есть заголовки. Дальше берешь исходный код модуля (например из соответствующего каталога из пакета linux-sources-3.16.0-4), правишь и собираешь его относительно заголовков твоего ядра. После этого выгружаешь работающий модуль командой rmmod и загружаешь свой командой insmod. -- Best regards, Alexander Gerasiov Contacts: e-mail: g...@cs.msu.su Homepage: http://gerasiov.net Skype: gerasiov PGP fingerprint: 04B5 9D90 DF7C C2AB CD49 BAEA CA87 E9E8 2AAC 33F1