Налаштування kexec

У мене працює система з `kexec` на TP-Link TL-WR741ND. Після модифікації USB і додаткових експериментів, мені вдалося запустити повноцінну систему з `kexec`.

  1. Завантаження вихідного коду:
    svn checkout svn://svn.openwrt.org/openwrt/branches/backfire
  2. Перехід до каталогу buildroot, оновлення та встановлення feeds:
    cd backfire && ./scripts/feeds update && ./scripts/feeds install -a
  3. Створення дефолтної конфігурації та вхід у меню налаштувань:
    make V=s defconfig && make menuconfig
    1. Обрати наступне:
      1. Target SystemAtheros AR71xx/AR7240/AR913x
      2. Target ProfileTP-LINK TL-WR741ND v1
      3. Target ImagesramdiskCompressionlzma
      4. Target Imagestar.gz
      5. Kernel modulesFilesystems
        1. kmod-fs-ext2
        2. kmod-fs-ext3
      6. Kernel modulesUSB Support
        1. kmod-usb-core
        2. kmod-usb-ohci
        3. kmod-usb-storage
      7. Utilitieskexec toolsConfiguration
        1. (mips) Target name for kexec kernel
    2. Вийти з меню та зберегти конфігурацію
  4. Збірка:
    make V=s
  5. Модифікації:
    1. Файл: `./build_dir/linux-ar71xx/linux-2.6.32.27/arch/mips/kernel/machine_kexec.c`
      1. Змінити рядок 55 на: `kexec_start_address = (unsigned long) phys_to_virt(image→start);`
    2. Файл: `./build_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/linux-2.6.32.27/arch/mips/kernel/machine_kexec.c`
      1. Змінити рядок 55 на: `kexec_start_address = (unsigned long) phys_to_virt(image→start);`
    3. Для підтримки USB:
      1. Файл: `./target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig`
        1. Додати новий рядок 176 під `config AR71XX_MACH_TL_WR741ND`: select AR71XX_DEV_USB`
      2. Файл: `./target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c`
        1. Додати рядок 22 під includes: `#include “dev-usb.h”`
        2. Додати рядок 102 під функцією: `static void __init tl_wr741nd_setup(void)` `ar71xx_add_device_usb();`
  6. Запуск конфігуратора ядра:
    make kernel_menuconfig
    1. Обрати наступне:
      1. Kernel typeKexec system call
      2. General setupSupport initial ramdisks compressed using LZMA
        1. Built-in initramfs compression modeLZMA
      3. Device DriversSCSI device support
        1. M SCSI device support
        2. M SCSI disk support
        3. Probe all LUNs on each SCSI device
      4. Device DriversUSB support
        1. M Support for Host-side USB
          1. M OHCI HCD supportUSB OHCI support for Atheros AR71xx
            1. M USB Mass Storage support
            2. USB announce new devices
      5. Kernel hackingDefault kernel command string → `rootfstype=ext2 noinitrd console=ttyS0,115200 board=TL-WR741ND`
  7. Зміни в `./package/base-files/files/etc/preinit`:
    1. Після рядка: `. /etc/diag.sh` додати: `rootfs=/dev/sda1`
    2. (Опційно) змінити файл: `./target/linux/generic-2.6/base-files/init`
      1. Змінити рядок 50 на: `mount $rootfs /mnt -o noatime`
        • Флеш-пам’ять зношується швидше при записі кожного доступу до файлу*
  8. Очистити збірку та зібрати заново:
    make clean && make V=s
  9. Повторити крок 5 *Clean очищає необхідне, але є обов’язковим для роботи USB патчів*
  10. Фінальна збірка:
    make V=s
  11. Розбити зовнішній носій на розділи та відформатувати перший у ext2
  12. Розпакувати вміст `./bin/ar71xx/openwrt-ar71xx-rootfs.tar.gz` в корінь файлової системи
  13. Скопіювати файл `./bin/ar71xx/openwrt-ar71xx-vmlinux-initramfs.elf` у корінь файлової системи

(далі буде)

  • Last modified: 2025/05/31 11:33
  • by vazaz