Модуль ядра под mips big endian

Post new topic   Reply to topic    DD-WRT Forum Forum Index -> Использование и установка DD-WRT
Author Message
Tatikoma
DD-WRT Novice


Joined: 13 Mar 2018
Posts: 4

PostPosted: Tue Mar 13, 2018 15:43    Post subject: Модуль ядра под mips big endian Reply with quote
Добрый день. Пытаюсь скомпилировать модуль xt_set.ko (чтобы заработал ipset) под mips big endian.

У меня роутер TP-Link Archer C7 v4. Прошивка beta 02-17-2018-r35034.

Code:
root@DD-WRT:~# cat /proc/cpuinfo  | grep cpu
cpu model      : MIPS 74Kc V5.0

root@DD-WRT:~# uname -r
3.18.95-rc1


По инструкции скачал из SVN исходники dd-wrt, скачал и разархивировал архив с тулчейнами.

Code:
tatikoma-PC # ls /opt/toolchains/
sources                                                  toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
staging_dir_powerpc                                      toolchain-mipsel_3.3.6_BRCM24
toolchain-aarch64_thunderx_gcc-7.3.0_musl                toolchain-mipsel_4.1.1_BRCM24
toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.1.0_musl_eabi  toolchain-mipsel_74kc+dsp2_gcc-5.1.0_musl-1.1.9
toolchain-arm_cortex-a9_gcc-6.3.0_musl-1.1.16_eabi       toolchain-mipsel_gcc4.1.2
toolchain-arm_cortex-a9+vfpv3_gcc-7.1.0_musl_eabi        toolchain-mipsel_gcc-linaro_uClibc-0.9.32
toolchain-armeb_xscale_gcc-7.2.0_musl                    toolchain-mips_mips32_gcc-5.2.0_musl-1.1.12
toolchain-arm_mpcore+vfp_gcc-5.2.0_musl-1.1.11_eabi      toolchain-powerpc_603e_gcc-5.4.0_musl-1.1.16
toolchain-i386_pentium_gcc-7.2.0_musl                    toolchain-powerpc_8540_gcc-7.1.0_musl
toolchain-mips_24kc_gcc-7.3.0_musl                       toolchain-powerpc_e300c3_gcc-4.8-linaro_uClibc-0.9.33.2
toolchain-mips64_octeon_64_gcc-7.1.0_musl                toolchain-powerpc_gcc-4.6-linaro_uClibc-0.9.33
toolchain-mipsel_1004kc+dsp_gcc-5.1.0_musl-1.1.10        toolchains.tar.xz
toolchain-mipsel_24kc_gcc-7.1.0_musl                     toolchain-x86_64_gcc-7.1.0_musl


Из этого выбираю самое похожее по модели процессора:
Code:
tatikoma-PC # export PATH=$PATH:/opt/toolchains/toolchain-mipsel_74kc+dsp2_gcc-5.1.0_musl-1.1.9/bin


Ну и непосредственно компилирую:
Code:
cd dd-wrt/src/linux/universal/linux-3.18
cp .config_wr1043 .config
make ARCH=mips modules SUBDIRS=net/netfilter


Проверяю полученный файл:
Code:
tatikoma-PC linux-3.18 # file net/netfilter/xt_set.ko
net/netfilter/xt_set.ko: ELF 32-bit LSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), BuildID[sha1]=e520d2ea1038a12bfc0bf918a8e646a69dc8e0fb, not stripped


И вот тут запара, получился LSB, а нужен MSB. Например вот так выглядит модуль ядра взятый с работающего роутера:
Code:
tatikoma-PC # file module.ko
module.ko: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, corrupted section header size


Логично, что скомпилированный модуль не работает на маршрутизаторе. Подскажите пожалуйста, как скомпилировать правильно?
Sponsor
Tatikoma
DD-WRT Novice


Joined: 13 Mar 2018
Posts: 4

PostPosted: Tue Mar 13, 2018 16:33    Post subject: Reply with quote
С архитектурой разобрался. Нужно было сделать "make oldconfig" и, логично, взять другой тулчейн.

Но теперь оно и вовсе не компилируется..
Code:
tatikoma-PC linux-3.18 # make ARCH=mips modules SUBDIRS=net/netfilter

  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  net/netfilter/nf_conntrack_proto_gre.o

  CC [M]  net/netfilter/nf_conntrack_h323_main.o
  CC [M]  net/netfilter/nf_conntrack_h323_asn1.o
  LD [M]  net/netfilter/nf_conntrack_h323.o
  CC [M]  net/netfilter/nf_conntrack_pptp.o
  CC [M]  net/netfilter/nf_conntrack_sip.o
  CC [M]  net/netfilter/nf_nat_sip.o
  CC [M]  net/netfilter/xt_DSCP.o
  CC [M]  net/netfilter/xt_IMQ.o
  CC [M]  net/netfilter/xt_dscp.o
  CC [M]  net/netfilter/xt_physdev.o
  Building modules, stage 2.
  MODPOST 9 modules
FATAL: section header offset=3233873920 in file 'net/netfilter/nf_conntrack_h323.o' is bigger than filesize=51560
scripts/Makefile.modpost:90: ошибка выполнения рецепта для цели «__modpost»
make[1]: *** [__modpost] Ошибка 1
Makefile:1413: ошибка выполнения рецепта для цели «modules»
make: *** [modules] Ошибка 2
Tatikoma
DD-WRT Novice


Joined: 13 Mar 2018
Posts: 4

PostPosted: Tue Mar 13, 2018 17:14    Post subject: Reply with quote
Эту проблему тоже удалось обойти.

В итоге делаю так:
1. Добавляю CONFIG_NETFILTER_XT_SET=m в .config (в make menuconfig почему-то этого модуля нет, почему?).
2. Вызываю make menuconfig, сразу делаю просто save.
3. Вызываю make oldconfig

После этого оно компилирует мне вот такой модуль:
Code:
tatikoma-PC # file xt_set.ko
xt_set.ko: ELF 32-bit MSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), BuildID[sha1]=2aa4b9e1331419f48c09b9aac73095f9db48d9ed, not stripped


Загружаю его на роутер, выполняю insmod, проверяю lsmod - нет модуля. Смотрю в dmesg вижу:
Code:
<4>[931216.970000] xt_set: Unknown symbol ip_set_add (err 0)
<4>[931216.970000] xt_set: Unknown symbol ip_set_test (err 0)
<4>[931216.980000] xt_set: Unknown symbol ip_set_del (err 0)
<4>[931216.990000] xt_set: Unknown symbol ip_set_nfnl_put (err 0)
<4>[931216.990000] xt_set: Unknown symbol ip_set_nfnl_get_byindex (err 0)


Что я в итоге сделал не так?..
Tatikoma
DD-WRT Novice


Joined: 13 Mar 2018
Posts: 4

PostPosted: Tue Mar 13, 2018 18:36    Post subject: Reply with quote
Похоже нужно было скомпилировать ещё несколько модулей..

xt_set зависит от ip_set, который зависит от nfnetlink.

Разобрался с make menuconfig, научился включать/выключать в нем нужные пункты, выбрал компилирование ip_set и nfnetlink в виде модулей.

Скомпилировал. Закинул. Пробую добавить nfnetlink, у которого нет зависимостей от других модулей:
Code:
<4>[935829.390000] nfnetlink: Unknown symbol __netlink_kernel_create (err 0)
<4>[935829.390000] nfnetlink: Unknown symbol netlink_set_err (err 0)
<4>[935829.400000] nfnetlink: Unknown symbol netlink_ack (err 0)
<4>[935829.400000] nfnetlink: Unknown symbol netlink_alloc_skb (err 0)
<4>[935829.410000] nfnetlink: Unknown symbol netlink_rcv_skb (err 0)
<4>[935829.420000] nfnetlink: Unknown symbol netlink_kernel_release (err 0)
<4>[935829.420000] nfnetlink: Unknown symbol nlmsg_notify (err 0)
<4>[935829.430000] nfnetlink: Unknown symbol netlink_has_listeners (err 0)


Тут я уже окончательно удивился. Похоже я как-то не так компилирую. Может не тот тулчейн (врятле, их всего два, - пробовал оба)? Может не тот конфиг (вот тут запросто, кстати, - конфига с названием archer_c7 не видно..)? Или может нужно полностью перекомпилировать всю прошивку?

На этом моменте я очень сильно удивился и что делать дальше, - не понимаю.

----------

Кажется ядро просто stripped.
vasek00
DD-WRT Guru


Joined: 06 Nov 2010
Posts: 3234

PostPosted: Wed Mar 14, 2018 12:26    Post subject: Reply with quote
Вопрос для каких целей планируется использование ipset
Display posts from previous:    Page 1 of 1
Post new topic   Reply to topic    DD-WRT Forum Forum Index -> Использование и установка DD-WRT All times are GMT

Navigation

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum