Налаштування kexec
У мене працює система з `kexec` на TP-Link TL-WR741ND. Після модифікації USB і додаткових експериментів, мені вдалося запустити повноцінну систему з `kexec`.
Підготовка USB-завантажуваної системи
- Завантаження вихідного коду:
svn checkout svn://svn.openwrt.org/openwrt/branches/backfire
- Перехід до каталогу buildroot, оновлення та встановлення feeds:
cd backfire && ./scripts/feeds update && ./scripts/feeds install -a
- Створення дефолтної конфігурації та вхід у меню налаштувань:
make V=s defconfig && make menuconfig
- Обрати наступне:
Target System→Atheros AR71xx/AR7240/AR913xTarget Profile→TP-LINK TL-WR741ND v1Target Images→ramdisk→Compression→lzmaTarget Images→tar.gzKernel modules→Filesystems→kmod-fs-ext2kmod-fs-ext3
Kernel modules→USB Support→kmod-usb-corekmod-usb-ohcikmod-usb-storage
Utilities→kexec tools→Configuration→(mips) Target name for kexec kernel
- Вийти з меню та зберегти конфігурацію
- Збірка:
make V=s
- Модифікації:
- Файл: `./build_dir/linux-ar71xx/linux-2.6.32.27/arch/mips/kernel/machine_kexec.c`
- Змінити рядок 55 на: `kexec_start_address = (unsigned long) phys_to_virt(image→start);`
- Файл: `./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`
- Змінити рядок 55 на: `kexec_start_address = (unsigned long) phys_to_virt(image→start);`
- Для підтримки USB:
- Файл: `./target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig`
- Додати новий рядок 176 під `config AR71XX_MACH_TL_WR741ND`: select AR71XX_DEV_USB`
- Файл: `./target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr741nd.c`
- Додати рядок 22 під includes: `#include “dev-usb.h”`
- Додати рядок 102 під функцією: `static void __init tl_wr741nd_setup(void)` `ar71xx_add_device_usb();`
- Запуск конфігуратора ядра:
make kernel_menuconfig- Обрати наступне:
Kernel type→Kexec system callGeneral setup→Support initial ramdisks compressed using LZMABuilt-in initramfs compression mode→LZMA
Device Drivers→SCSI device support→M SCSI device supportM SCSI disk supportProbe all LUNs on each SCSI device
Device Drivers→USB support→M Support for Host-side USBM OHCI HCD support→USB OHCI support for Atheros AR71xxM USB Mass Storage supportUSB announce new devices
Kernel hacking→Default kernel command string→ `rootfstype=ext2 noinitrd console=ttyS0,115200 board=TL-WR741ND`
- Зміни в `./package/base-files/files/etc/preinit`:
- Після рядка: `. /etc/diag.sh` додати: `rootfs=/dev/sda1`
- (Опційно) змінити файл: `./target/linux/generic-2.6/base-files/init`
- Змінити рядок 50 на: `mount $rootfs /mnt -o noatime`
- Флеш-пам’ять зношується швидше при записі кожного доступу до файлу*
- Очистити збірку та зібрати заново:
make clean && make V=s
- Повторити крок 5 *Clean очищає необхідне, але є обов’язковим для роботи USB патчів*
- Фінальна збірка:
make V=s
- Розбити зовнішній носій на розділи та відформатувати перший у ext2
- Розпакувати вміст `./bin/ar71xx/openwrt-ar71xx-rootfs.tar.gz` в корінь файлової системи
- Скопіювати файл `./bin/ar71xx/openwrt-ar71xx-vmlinux-initramfs.elf` у корінь файлової системи
(далі буде)