[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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

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


Reply to: