Я провел последнюю неделю, пытаясь достичь одной цели, которой я до сих пор не достиг.
Моя конечная цель - кросс-компиляция для некоторых архитектур (в этот вопрос я возьму в качестве примера только один, который является MIPSLE) пару модулей ядра, которые я хотел бы использовать на своем домашнем маршрутизаторе, загружая их во время выполнения с помощью INSMOD.
В моем маршрутизаторе отсутствуют некоторые функции iptables, и поэтому во время компиляции ядра тот, кто скомпилировал его, решил от них избавиться.
The current kernel version is quite obsolete: Linux version 2.6.36+ by doing /proc/version
Я прочитал много документации и до сих пор не уверен, что возможно скомпилировать только некоторые модули или, если необходимо, скомпилировать все ядро каждый раз (некоторые люди говорили, что для некоторых модулей это возможно, а для других с большим количеством зависимостей - нет, это правда? ).
В этом случае нужные мне модули ядра находятся в /net/ipv4/netfilter/
Поскольку я не понял, как скомпилировать только модули ядра в автономном режиме Кстати, я решил кросс-скомпилировать все ядро и взять необходимые мне модули.
Итак, я скачал соответствующий набор инструментов (uclib c mipsle toolchain) и мне удалось скомпилировать простой работающий привет Мир, который я выполнил на своем маршрутизаторе, где у меня есть оболочка s sh.
Так что я уверен, что используемая мной цепочка инструментов правильная.
Теперь, так как я хотел протестировать последнюю версию ядра, я скачал последнюю версию Ubuntu 20 с соответствующим ядром и успешно скомпилировал ее, а модули ядра, о которых я говорил ранее, были там внутри папки netfilter в формате .ko , ИДЕАЛЬНО!
Я явно использовал /boot/config_file
моего хост-компьютера как .config
Итак, после того как я ' Я скачал ту же версию ядра, что и у моего маршрутизатора (2.6.36), и я попытался скомпилировать ее с помощью файла .config, который я нашел на GitHub и который связан с mipsle-устройством с той же версией ядра.
Здесь я думаю, что у нас есть первая проблема, я попытался найти .config
моего устройства, чтобы иметь гладкую конфигурацию, но у меня нет папки /boot
, а также не было в /proc
.
Как я могу получить это?
В любом случае, я использовал его, и компиляция не выглядела неудачной, но это последние строки:
CC drivers/usb/storage/usual-tables.o
LD drivers/usb/storage/usb-storage.o
LD drivers/usb/storage/built-in.o
LD drivers/usb/built-in.o
LD drivers/video/built-in.o
LD drivers/built-in.o
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/mips/boot/vmlinux.bin
Building modules, stage 2.
MODPOST 1 modules
CC drivers/scsi/scsi_wait_scan.mod.o
LD [M] drivers/scsi/scsi_wait_scan.ko
Там написано "1 модуль", но я не понять, почему и внутри папки /net/ipv4/netfilter
теперь у меня есть .o
файлы вместо .ko
, например, если они не были связаны.
Так как я злился и не знал, что попробовать После нескольких попыток я решил использовать файл конфигурации моего хост-компьютера (Ubuntu 2020, ядро 5.4.0.26), и компиляция прошла успешно, с файлами .ko
внутри папки.
Проблема заключалась в том, что, очевидно, это были модули, скомпилированные для x86-64 вместо MIPS, и другие явные "проблемы", связанные с конфигурацией моей машины x86-64.
Итак, я думаю, что сейчас что обнаруженный .config
может быть как-то сломан, я также попытался отключить, добавив комментарий, этот модуль SCSI, но ничего, я всегда получаю одно и то же.
И, очевидно, между каждой попыткой Я всегда делал make distclean
и make clean
.
* 10 68 * Что вы предлагаете мне сделать? Я даже не буду публиковать все ссылки, которые я читал об этом материале, потому что я могу sigsegv сервер StackOverflow с таким количеством данных.
Спасибо всем и извините за стену пост.