Как изменить пакет OpenWrt для экспериментов

Как изменить пакет OpenWrt для экспериментов

Документация OpenWrt очень нечеткая в том, как вносить быстрые изменения в пакет для разработки или экспериментов. Есть ли пошаговые инструкции по изменению пакета из стандартного репозитория OpenWrt?

решение1

ПРИМЕЧАНИЕ:В качестве примера используются релиз 23.05.2, ipq806xархитектура и пакет OpenWRT.odhcpd-ipv6only

  1. Распаковать SDK
cd ~/
tar xf openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64 sdk
cd ~/sdk
  1. Создайте feeds.conf:
cp feeds.config.default feeds.config

Измените feeds.config на минимум для более быстрой сборки:

src-git-full base https://git.openwrt.org/openwrt/openwrt.git;openwrt-23.05
src-git packages https://git.openwrt.org/feed/packages.git^8e3a1824645f5e73ec44c897ac0755c53fb4a1f8
  1. Обновление каналов
./scripts/feeds update -a
  1. Настроить сборку
./scripts/feeds install odhcpd-ipv6only
  1. Обновить .config
make menuconfig
  • «Сеть» Убедитесь, что выбран odhcpd-ipv6only
  1. Строить

ПРИМЕЧАНИЕ: даже если выбран odhcpd-ipv6only, имя пакета все равно odhcpd

make -j $(nproc) package/odhcpd/compile
  1. Если сборка прошла успешно, создайте копию исходного кода пакета из загруженного архива.

    ПРИМЕЧАНИЕ: В процессе сборки OpenWrt предусмотрены меры безопасности для предотвращения изменения исходного кода. Для внесения изменений в него необходима копия.

mkdir ~/src
cd ~/src/
tar xf ~/sdk/dl/odhcpd-2023-10-24-d8118f6e.tar.xz
mv odhcpd-2023-10-24-d8118f6e odhcpd # just to shorten the name
cd odhcpd
  1. Установите STAGING_DIRпеременную env и обновитеPATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
  1. Изучите содержимое папки пакета, чтобы получить представление о том, как его собрать.
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e

Вы можете сделать вывод, что odhcpd использует cmake с ninja

  1. Клонируйте CMakeCache.txt из папки успешной сборки и внесите в него необходимые изменения.
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
  1. Редактировать CMakeCache.txt
  • Заменить все вхождения
sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only

с

src
  • Также замените все вхождения
odhcpd-2023-10-24-d8118f6e

с

odhcpd
  • Добавьте следующий путь к библиотеке в CMAKE_EXE_LINKER_FLAGS:STRINGопределение

ПРИМЕЧАНИЕ: Это загадка, как эта запись добавляется во время собственного процесса сборки OpenWrt. Если у кого-то есть идея, пожалуйста, прокомментируйте.

-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib

Это должно выглядеть примерно так:

CMAKE_EXE_LINKER_FLAGS:STRING=-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib -DPIC -fpic -specs=/home/user/sdk/include/hardened-ld-pie.specs -znow -zrelro
  • Измените -Osна -Ogin CMAKE_C_FLAGS:STRING, чтобы пропустить оптимизацию компилятора.
CMAKE_C_FLAGS:STRING=-Og -pipe -g3 -fno-caller-saves -fno-plt -fhonour-copts -mfloat-abi=hard -Wformat -Werror=format-security -DPIC -fpic -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro
  1. Попробуйте построить
cmake .
ninja -v

Надеюсь, это был успех.

  1. Внесите изменения в код C в папке src.

  2. Перестроить

ninja -v
  1. Скопируйте собранный двоичный файл в rowter
scp odhcpd router:/tmp
  1. Использовать удаленную отладку

а) Запустите gdbserver на маршрутизаторе

gdbserver :1234 /tmp/odhcpd

б) Подключитесь к gdbserver из клиента сборки для отладки. (Необходим явный IP-адрес, поскольку gdb не может разрешить адрес маршрутизатора)

~/sdk/scripts/remote-gdb 192.168.0.1:1234 ~/src/odhcpd/odhcpd

Связанный контент