Re: Перекомпилировать модуль для Live системы.

2017-05-03 Пенетрантность Andrey Jr. Melnikov
Артеменко Никита  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 системы.

2017-05-03 Пенетрантность Артеменко Никита
У меня получилось скомпилировать модуль! Ваши советы помогли.

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

Итак, компилируем модуль ядра в 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 системы.

2017-05-01 Пенетрантность Alexander Gerasiov
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 системы.

2017-05-01 Пенетрантность bblrlo
Вам в помощь 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 системы.

2017-05-01 Пенетрантность Alexander Gerasiov
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