我正在尝试启动 Linux Live USB 以安装在我的旧 Microsoft Surface 2(一款配备 Nvidia Tegra 4 SoC 的平板电脑)上。显然,它需要SoC驱动程序来运行GPU。我有几个可以尝试启动的 Live USB 发行版。我尝试的第一个是 Debian 10 ARM HF。现在,我担心引导加载程序,它似乎需要该包:
https://packages.debian.org/buster/armhf/u-boot-tegra/
当然,这是一个先有鸡还是先有蛋的问题,因为我需要先安装发行版,然后才能使用这个软件包。那么,如何修改 Live USB 的引导加载程序以利用所述包内的这些二进制文件:
/usr/lib/u-boot/jetson-tk1/u-boot-tegra.bin
/usr/lib/u-boot/jetson-tk1/uboot.elf
如果可能的话,只需交换 Live USB 根目录中的文件?
来吧,每个人都想分散我的注意力。这是你的机会。
答案1
我知道 Surface 2 是具有 ARM 架构的 32 位 UEFI 系统,因此当命令从可移动媒体启动时,固件将查找\EFI\boot\bootarm.efi
它理解的任何文件系统类型(至少是 FAT32,但我想 Microsoft 固件也可能能够读取 NTFS?)。如果它在您的实时媒体上找到该文件,那么它应该认为该媒体可启动,加载文件并执行它。
rEFInd
会是一个不错的 UEFI 引导加载程序,但显然它仅在 x86 平台上支持 32 位硬件,因此不存在 32 位 ARM 版本。但 GRUBsystemd-boot
显然有 32 位 ARM 版本可用。
对于 UEFI,它确实可以像在 Live USB 根目录中创建适当的目录一样简单,并使用指定的文件名将引导加载程序的副本放置在指定的目录中(对于 32 位 ARM,\EFI\boot\bootarm.efi
)。其余的取决于引导加载程序实际上是什么:如果您使用 ARM 版本的 GRUB,您将需要至少编写一个最小的 GRUB 配置文件,该文件将告诉 GRUB 可以在实时位置找到内核和 initramfs 文件媒体。我不太熟悉systemd-boot
,但通常你必须将它期望找到的东西放在实时媒体上的预期位置。
另一方面,如果您正在开发嵌入式系统,则 U-boot 会很重要从裸机,使用 U-Boot 作为您自己的自定义固件的一部分。但听起来你并没有这样做。