#linux-kernel #embedded-linux #cross-compiling #kernel-module #netfilter
Вопрос:
Мне нужно выполнить атаку MITM на маршрутизатор, который является встроенной системой Linux, а его архитектура-ARM. Ядро Linux-2.4.24. Под атакой MITM я подразумеваю перехват пакета, его повторное редактирование и отправку вперед. Я хочу использовать netfilter. Но когда я пытаюсь скомпилировать LKM, я столкнулся с множеством проблем.
Как обычно, файл макета LKM выглядит следующим образом:
obj-m =hello.o KDIR = /lib/modules/$(shell uname -r)/build all: make -C $(KDIR) M=$(shell pwd) modules clean: make -C $(KDIR) M=$(shell pwd) clean
Я скачал ядро Linux 2.4.24. Но когда дело доходит до среды кросс-компиляции, возникают проблемы.
Как задать KDIR
путь? Путь, по которому linux_kernel_2.4.24.tar.gz
извлекается? Нужно ли мне сначала скомпилировать ядро? Как?
Во-первых, я установил KDIR
путь linux_kernel_2.4.24
, затем make
, ошибка «В текущей конфигурации ядра отключены модули». К настоящему времени я еще не прошел make menuconfig
эту проверку ядра.
Во-вторых, я пытаюсь выполнить кросс-компиляцию на 32-битном CentOS 5.4, ядро которого 2.6.18. Когда я добавляю CC=arm-linux-gcc
Makefile
и устанавливаю KDIR как /lib/modules/$(shell uname -r)/build
, в результате появляется надпись «нет руки…».
Может ли кто-нибудь указать, как скомпилировать LKM ядра старой версии в последней версии Linux? И как скомпилировать ARM-версию LKM?
Ответ №1:
Как задать
KDIR
путь? Путь, по которомуlinux_kernel_2.4.24.tar.gz
извлекается?
Да, так же, как и для любого другого типа модуля, KDIR
необходимо указать на встроенный корень исходного кода ядра.
Нужно ли мне сначала скомпилировать ядро? Как?
Да, ты знаешь. Вы делаете это с помощью:
- Загрузка/компиляция/установка правильной цепочки инструментов для кросс-компиляции. Например, в Debian я могу создать набор инструментов для кросс-компиляции ARM
sudo apt install binutils-arm-linux-gnueabi
, который установит все двоичные файлы, которые у вас обычно есть,binutils
с префиксомarm-linux-gnueabi-
(напримерarm-linux-gnueabi-gcc
,arm-linux-gnueabi-objdump
, и т. Д.). Вам нужны все бинутики, не толькоgcc
. ARCH=
Например, установите желаемую целевую архитектуруARCH=arm
.CROSS_COMPILE=
Например, установка префикса цепочки инструментов для кросс-компиляцииCROSS_COMPILE=arm-linux-
. Это также работает, если вы хотите использовать загруженный набор инструментов, как вы можете указатьCROSS_COMPILE=/path/to/toolchain/
, предполагая, что этот каталог содержит все необходимые исполняемые файлы.- Получение допустимой конфигурации для целевой системы. Если у вас есть a
.config
в системе, вы можете использовать его (просто скопируйте его из целевой системы вKDIR/.config
), а затем обновите егоmake menuconfig
. - Стройте с
make all
любой другой целью, которая вам нужна.