stretch 上的 arm64 debian-installer
映像未启用图形安装程序,所以会使用串行控制台。从固件中应该会自动检测出控制台设备,但如果没有,则从 GRUB 菜单启动 linux 后,您将看到一个 “Booting Linux” 的消息,然后就没了。
如果您遇到此问题,您需要在内核命令行上设置特定的控制台配置。在 GRUB 菜单中按 e
,以“编辑内核命令行”,然后将
--- quiet
更改为
console=<device>,<speed>
,例如
console=ttyAMA0,115200n8
。完成后,按 Control+x 使用新设置继续进行引导。
Juno 有 UEFI,所以安装很简单。最直接的方法是从 U 盘安装。您需要最新的固件以从 USB 启动。在 2015 年 3 月后的 http://releases.linaro.org/members/arm/platforms/latest/ 上测试成功。请参见有关文档更新 Juno 固件。
在 U 盘上准备一个标准的 arm64 CD 映像。将其插入背板 USB 口的其中之一。将串行电缆插入背板上的 9 针串行端口。如果您需要网络连接(网络启动映像),请将以太网电缆插入机器正面的接口中。
运行串行控制台,波特率 115200,8 位,无奇偶校验位,并启动 Juno。它应会从 U 盘启动到 GRUB 菜单。在 Juno 上检测不到正确的控制台配置,所以只是按下 Enter 将显示不了内核输出。将控制台设为
console=ttyAMA0,115200n8
(如第 5.1.1 节 “控制台配置”中所述)。Control+x 启动应该会显示 debian-installer
屏幕,然后您可以继续进行标准安装。
UEFI 可用于此机器,但通常随 U-Boot 一起提供,因此您首先需要安装 UEFI 固件,然后使用标准的引导/安装方法,或使用 U-Boot 引导方法。您必须使用串行控制台来控制安装,因为 arm64 架构上未启用图形安装程序。
推荐的安装方法是使用随机附带的 openembedded 系统,将 debian-installer
内核和 initrd 复制到硬盘驱动器上,然后从中启动以运行安装程序。或者使用 TFTP 复制 kernel/dtb/initrd 并启动(第 5.1.4.1 节 “在 U-Boot 中启动 TFTP”)。安装后,需要进行手动更改,取消从安装映像引导。
运行串行控制台,波特率 115200,8 位,无奇偶校验位,并启动机器。重启机器,当您看到 “Hit any key to stop autoboot:” 时,按下任意键,获得 Mustang# 提示符。然后使用 U-Boot 命令加载并引导内核、dtb 及 initrd。
从网络引导需要网络连接和一台 TFTP 网络引导服务器 (也可能是 DHCP、RARP 或 BOOTP 服务器,以进行自动网络配置)。
参见第 4.4 节 “为使用 TFTP 网络引导准备文件”设置用于支持网络引导的服务器端。
使用 U-Boot 固件上的网络引导需要三个步骤:a)配置网络,b)将映像(内核/初始化内存盘/dtb)加载到内存中,c)执行预加载的代码。
首先,您必须运行
setenv autoload no dhcp
使用 DHCP 自动配置网络,或者手动设置环境变量
setenv ipaddr <ip address of the client> setenv netmask <netmask> setenv serverip <ip address of the tftp server> setenv dnsip <ip address of the nameserver> setenv gatewayip <ip address of the default gateway>
如果您愿意,可以运行
saveenv
命令,保存这些设置。之后,您需要将映像(内核/初始化内存盘/dtb)加载到内存中。这可以通过 tftpboot 命令来完成,但该命令必须提供内存地址,然后将映像存储于此。不幸的是,内存映射因系统而异,所以没有一般规则可以预测哪些地址可用。
在某些系统上, U-Boot 预定义了一组环境变量,其中存有适当的加载地址:kernel_addr_r、ramdisk_addr_r和fdt_addr_r。您可以运行
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
,来检查它们是否已定义。如果未定义,则必须查看系统文档以获取适当的值并手动设置。对于基于 Allwinner SunXi SOC 的系统(例如Allwinner A10,架构名 “sun4i” 或 Allwinner A20,架构名 “sun7i”),您可以使用以下值:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
定义加载地址后,将映像加载到内存中,可以使用之前定义的 tftp 服务器
tftpboot ${kernel_addr_r} <内核映像文件名> tftpboot ${fdt_addr_r} <dtb 文件名> tftpboot ${ramdisk_addr_r} <初始化内存盘映像文件名>
第三部分是设置内核命令行并实际执行加载的代码。U-Boot 将 “bootargs” 环境变量的内容作为命令行传递给内核,因此内核和安装程序的任何参数(如控制台设备)(请参见第 5.3.1 节 “启动控制台”)或预设选项(请参见第 5.3.2 节 “Debian 安装程序的参数” >和附录 B, 使用预置自动进行安装) - 可以使用命令,如
setenv bootargs console=ttyS0,115200 rootwait panic=10
执行先前加载的代码的确切命令取决于所使用的映像格式。要使用 uImage/uInitrd,命令是
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
,若要使用原生 Linux 映像,则是
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
注意:引导标准的 linux 映像时,重要的是在内核和 dtb 之后加载初始化内存盘映像,因为 U-Boot 将 filesize 变量设置为最后一个加载文件的大小,并且 bootz 命令需要 ramdisk 映像的大小才能正常工作。在引导特定平台的内核时,即没有设备树的内核,省略 ${fdt_addr_r} 参数即可。
如果您的计算机可以从 USB 启动,这可能是最简单的安装方法。假设您已经准备好了从 第 3.6.1 节 “选择引导设备” 到 第 4.3 节 “为从 U 盘引导准备文件” 的所有步骤,只需插入 U 盘到一个空的 USB 口并重启。除非您使用了灵活方式创建 U 盘并不激活,系统应该引导,并看到一个 boot:
提示符。此时您可以输入一些引导选项,也可以直接按 Enter。