由于 MIPS 端口kexec
不支持该--initrd
参数,我正在寻找模仿该功能的变通方法。据Linux的/ MIPS维基,MIPS内核的支持rd_start
和rd_size
内核的命令行参数用于指定的initrd的位置。我想知道是否可以将 initrd 加载到内存中并将其传递给内核参数?
如果可能,我应该在内存中的哪个位置加载文件以及如何加载它?我想将内核和 initrd 连接到一个文件中,但是如何获取kexec
加载新内核的地址?
一点背景知识:我有一个WNDR3700 wifi 路由器,它运行带有 kexec 内核的OpenWrt。我的目标是引导到存储在 USB 上的普通 OpenWrt 内核以简化升级。问题(目前)是 usb 模块没有构建到内核中,而是作为可加载的内核模块提供。我可以使用嵌入式 initramfs 从 USB 引导到另一个内核,但是使用 initramfs 需要我编译内核,不是吗?那么,或者,我是否可以将 initramfs/initrd 嵌入到现有的内核二进制文件/elf(没有任何 ramdisk)中并避免重新编译内核?
此外,显然将 usb 模块编译到内核中需要重新编译内核,所以这不是一个选项。