Как скомпилировать ARM-версию LKM?

#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 необходимо указать на встроенный корень исходного кода ядра.

Нужно ли мне сначала скомпилировать ядро? Как?

Да, ты знаешь. Вы делаете это с помощью:

  1. Загрузка/компиляция/установка правильной цепочки инструментов для кросс-компиляции. Например, в Debian я могу создать набор инструментов для кросс-компиляции ARM sudo apt install binutils-arm-linux-gnueabi , который установит все двоичные файлы, которые у вас обычно есть, binutils с префиксом arm-linux-gnueabi- (например arm-linux-gnueabi-gcc , arm-linux-gnueabi-objdump , и т. Д.). Вам нужны все бинутики, не только gcc .
  2. ARCH= Например, установите желаемую целевую архитектуру ARCH=arm .
  3. CROSS_COMPILE= Например, установка префикса цепочки инструментов для кросс-компиляции CROSS_COMPILE=arm-linux- . Это также работает, если вы хотите использовать загруженный набор инструментов, как вы можете указать CROSS_COMPILE=/path/to/toolchain/ , предполагая, что этот каталог содержит все необходимые исполняемые файлы.
  4. Получение допустимой конфигурации для целевой системы. Если у вас есть a .config в системе, вы можете использовать его (просто скопируйте его из целевой системы в KDIR/.config ), а затем обновите его make menuconfig .
  5. Стройте с make all любой другой целью, которая вам нужна.