编辑
2025-03-03
记录知识
0
请注意,本文编写于 116 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一: 制作U盘启动盘
1.1 win上安装wic
1.2 linux上安装wic
二:Uboot shell操作
2.1 接入串口
2.2 进入uboot shell
2.3 开启识别usb
2.4 查看启动盘内容
2.5 修改启动参数
2.6 设置内核起始地址
2.7 设置设备树的起始地址
2.8 启动新内核
2.9 保存环境变量
三:U盘系统内操作
3.1 查看U盘根分区
3.2更新系统
3.2.1 解压wic的tar包
3.2.2 安装wic包
3.2.3 通过复制文件的方式安装
四:保存Uboot变量
4.1 sata启动
4.2 u盘启动
4.3 nvme启动
4.4 确定环境是否设置成功
4.5 登录
五:示例
5.1 设置U盘启动
5.2 刻录wic
5.3 重设为mmc启动
5.4 安装成功

飞腾E2000默认可以通过wic格式安装,wic格式按照的方式如下。

一: 制作U盘启动盘

1.1 win上安装wic

Win32DiskImager 可以烧录img格式文件。主要步骤如下

  • a 选择wic文件

  • b 选择需要刻录的设备

  • c 点击写入

image.png

1.2 linux上安装wic

将U盘插入机器,通过dd命令直接更新,如下:

sudo dd if=Kylin-embedded_vkylin_arm64-xxxx-rc1.wic of=/dev/sda status=progress

注意这里/dev/sda为U盘识别的块,而不是U盘识别的分区.如果插入U盘是sdb。则这里填写/dev/sdb 以此类推

二:Uboot shell操作

在启动过程中一直按着空格或者enter键,如果是uboot启动就会进入uboot模式

2.1 接入串口

E2000默认的串口波特率为115200,根据实际板子情况接入TTL串口,通过串口功能确保能够正常读写

2.2 进入uboot shell

开机一直按下ctrl+c,直到进入uboot shell,如下所示

image.png

2.3 开启识别usb

在 uboot shell中输入 usb start 能够开启USB功能,此时uboot阶段即可正常识别U盘设备,命令如下:

E2000#usb start starting USB... Bus usb3@31a00000: Register 2000110 NbrPorts 2 Starting the controller USB XHCI 1.10 Bus usb3@31a20000: Register 2000110 NbrPorts 2 Starting the controller USB XHCI 1.10 scanning bus usb3@31a00000 for devices... 5 USB Device(s) found scanning bus usb3@31a20000 for devices... 1 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found

这里如看到”scanning usb for storage devices... 1 Storage Device(s) found“ 字样,则代表U盘已经识别,如看不到,则检查硬件或uboot驱动

2.4 查看启动盘内容

通过ls 命令可以查看盘符内文件系统内容,如下

ls usb 0:1 / 为查看USB设备第一个盘符的文件内容 ls usb 0:2 / 为查看USB设备第二个盘符的文件内容 E2000#ls usb 0:1 / EFI/ System Volume Information/ 0 file(s), 2 dir(s) E2000#ls usb 0:2 / <DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found <SYM> 7 bin <SYM> 8 sbin <SYM> 7 lib 0 .exectl <DIR> 4096 var <DIR> 4096 usr <DIR> 4096 boot <DIR> 4096 dev <DIR> 4096 etc <DIR> 4096 home <DIR> 4096 proc <DIR> 4096 root <DIR> 4096 run <DIR> 4096 sys <DIR> 4096 tmp <DIR> 4096 mnt <DIR> 4096 srv <DIR> 4096 opt <DIR> 4096 media <DIR> 4096 download

2.5 修改启动参数

setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x2800d000 root=/dev/sda2 rw rootwait security=none';

在Uboot shell中敲入如上命令即可修改开机挂载root分区的具体位置

这里上述参数仅修改root=,用于指定内核挂载操作系统的真实根文件系统位置(root=/dev/sda2),这里通过u盘挂载,则默认可知rootfs位置为/dev/sda2

如不更新内核,在此步骤上,可以直接运行boot命令启动系统。这样能够达到在使用原内核直接启动/dev/sda2的系统的目的。

boot # 该命令使用原来内核启动系统

如果不使用kylin内核,则直接跳转到《三:U盘系统内操作》

2.6 设置内核起始地址

ext4load usb 0:2 $kernel_addr boot/uImage-5.4.18-63-generic;

上述参数,可以更换uboot启动过程中的内核加载uimage的实际文件。这里实际内核文件为uImage-5.4.18-63-generic,存放于usb设备的第二个分区的/boot目录。

注意:内核uImage需适配硬件,否则有概率启动失败

2.7 设置设备树的起始地址

ext4load usb 0:2 $ft_fdt_addr /boot/dtb-5.4.18-63-generic/device-tree/phytium/e2000d-demo-board.dtb

上述参数,可以更换uboot启动过程中加载设备树dtb的实际文件,这里实际设备树文件为e2000d-demo-board.dtb,存放于usb设备的第二个分区的/boot/dtb-5.4.18-63-generic/device-tree/phytium/目录

注意:内核设备树需适配硬件,否则有概率启动失败

2.8 启动新内核

bootm $kernel_addr -:- $ft_fdt_addr

上述参数可以直接将内核启动,通过如上方法,E2000可以正常启动为U盘(sda2)内的系统镜像

2.9 保存环境变量

saveenv

上述命令可以保存uboot中的环境变量,后续每次启动将自动启动,无需重复配置.

当一切就绪后,可使用此保存当前环境变量,U盘启动无需保存,因其仅启动一次,如设置nvme/sata/mmc启动则可保存,以免重复配置

三:U盘系统内操作

3.1 查看U盘根分区

在上述方式通过U盘进入系统之后,进入终端,可以发现系统是通过sda2挂载的。现在需要将其正式的更新到固定磁盘上。

root@kylinos:~# mount /dev/sda2 on / type ext4 (rw,relatime)

3.2更新系统

通过上述命令可以发现,现在已经进入U盘系统中,需要在U盘系统中将系统更新到emmc中,主要如下:

3.2.1 解压wic的tar包

tar xzvf Kylin-embedded_vkylin_arm64-xxxx-rc1.wic.tar.gz

3.2.2 安装wic包

# 目的盘为nvme sudo dd if=Kylin-embedded_vkylin_arm64-xxxx-rc1.wic of=/dev/nvme0n1 status=progress # 目的盘为sata sudo dd if=Kylin-embedded_vkylin_arm64-xxxx-rc1.wic of=/dev/sda status=progress

需要注意的是,这里的of=指定的是真实存在的物理设备,例如/dev/nvme0n1为机器的nvme盘,具体安装情况视当前硬件情况决定

3.2.3 通过复制文件的方式安装

如果不想dd wic文件,可以直接将U盘的根分区内容直接对拷到目的硬盘。例如

cp -raf /run/media/usb_storage/* /rum/media/nvme0np2/

这里/run/media/usb_storage/ 是U盘的根分区挂载,可以通过 mount /dev/sda2 /run/media/usb_storage/挂载

这里/rum/media/nvme0np2/

四:保存Uboot变量

通过上述操作,实际已经安装好系统,现在仅需要进入uboot中,保存自己需要启动的环境变量。从而做到每次开机自动加载即可。

4.1 sata启动

setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x2800d000 root=/dev/sda2 rw rootwait security=none'; setenv load_kernel 'ext4load scsi 0:3 $kernel_addr boot/uImage-5.4.18-63.52-e2000-rc15-generic'; setenv load_fdt 'ext4load scsi 0:3 $ft_fdt_addr boot/dtb/e2000d-demo-board.dtb'; saveenv

4.2 u盘启动

setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x2800d000 root=/dev/sda3 rw rootwait security=none'; setenv load_kernel 'ext4load usb 0:3 $kernel_addr boot/uImage-5.4.18-63.52-e2000-rc15-generic'; setenv load_fdt 'ext4load usb 0:3 $ft_fdt_addr boot/dtb/e2000d-demo-board.dtb'; saveenv

4.3 nvme启动

setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x2800d000 root=/dev/nvme0n1p3 rw rootwait security=none'; setenv load_kernel 'ext4load nvme 0:3 $kernel_addr boot/uImage-5.4.18-63.52-e2000-rc15-generic'; setenv load_fdt 'ext4load nvme 0:3 $ft_fdt_addr boot/dtb/e2000d-demo-board.dtb'; saveenv

4.4 确定环境是否设置成功

printenv可以打印变量,确定自己设置的和打印的是否一致即可。接下来就能正常启动新的系统了。

4.5 登录

第一次登录需要手动运行resize-assistant。用于扩大rootfs分区

默认密码 kylin qwer1234

五:示例

设置启动一共就三步,分别为,设置内核地址,设置设备树地址,设置启动命令,保存配置。通常仅修改加载内核和设备树的地址。 现在示例想系统更新到mmc盘符,主要操作如下: 打印uboot的所有配置:printenv,setenv args "contents"可以配置具体的环境变量,最后saveenv保存环境变量最后重启即可生效

如下是我们配置的usb启动的整个例子可以参考:

E2000#printenv arch=arm baudrate=115200 board=e2000 board_name=e2000 boot_os=bootm $kernel_addr -:- $ft_fdt_addr bootargs=console=ttyAMA1,115200 earlycon=pl011,0x2800d000 \\\ root=/dev/mmcblk0p1 rw rootwait security=none bootcmd=usb start; run load_kernel; run load_fdt; run boot_os bootdelay=2 cpu=armv8 distro_bootcmd=run load_kernel; run load_initrd; run load_fdt; run boot_os eth0addr=00:11:22:33:44:55 eth1addr=10:22:33:44:55:66 eth2addr=10:11:22:33:44:55 eth3addr=00:22:33:44:55:66 ethaddr=00:11:22:33:44:55 fdtcontroladdr=f9c3f7f0 fileaddr=90100000 filesize=17d0240 ft_fdt_addr=0x90000000 ft_fdt_name=boot/dtb/e2000.dtb gatewayip=202.197.67.1 initrd_addr=0x95000000 ipaddr=202.197.67.2 kernel_addr=0x90100000 load_fdt=ext4load usb 0:2 0x90000000 boot/e2000d-demo-board.dtb load_initrd=ext4load usb 0:2 0x95000000 initrd.img-5.4.18-65-generic load_kernel=ext4load usb 0:2 0x90100000 boot/uImage-kylin loadaddr=0x90000000 netdev=eth0 netmask=255.255.255.0 serverip=202.197.67.3 stderr=uart@2800d000 stdin=uart@2800d000 stdout=uart@2800d000 vendor=phytium Environment size: 1047/4092 bytes

备注:

bootargs=console=ttyAMA1,115200 earlycon=pl011,0x2800d000 \\\ root=/dev/mmcblk0p1 rw rootwait security=none

/dev/mmcblk0p1为系统分区,可以从内核串口log中可以看到,如果找不到rootfs可以查看此处

load_fdt=ext4load usb 0:2 0x90000000 boot/e2000d-demo-board.dtb load_kernel=ext4load usb 0:2 0x90100000 boot/uImage-kylin

e2000d-demon-board.dtb和uImage两个文件我们可以手动复制到u盘中的/boot/目录下,根据cpu的不同e2000d,e2000q,e2000s可以选择不同的dtb文件

5.1 设置U盘启动

setenv load_kernel 'ext4load usb 0:2 $kernel_addr boot/uImage-5.4.18-63-generic'; setenv load_fdt 'ext4load usb 0:2 $ft_fdt_addr boot/e2000d-demo-board.dtb'; setenv bootcmd 'usb start; run load_kernel; run load_fdt; run boot_os' setenv boot_os 'bootm $kernel_addr -:- $ft_fdt_addr' saveenv

这里设置了内核地址为U盘的 boot/uImage-5.4.18-63-generic,设备树地址为 U盘的 boot/e2000d-demo-board.dtb,启动命令为 bootm kerneladdr:kernel_addr -:- ft_fdt_addr

5.2 刻录wic

dd if=Kylin-embedded_vkylin_arm64_rc1_20230419.wic of=/dev/mmcblk0 status=progress

5.3 重设为mmc启动

setenv load_kernel 'ext4load mmc 0:2 $kernel_addr boot/uImage-5.4.18-63-generic'; setenv load_fdt 'ext4load mmc 0:2 $ft_fdt_addr boot/e2000d-demo-board.dtb'; setenv bootcmd 'usb start; run load_kernel; run load_fdt; run boot_os' setenv boot_os 'bootm $kernel_addr -:- $ft_fdt_addr' saveenv

5.4 安装成功

通过上述设置,下次启动则可以正常加载新的系统。

通常e2000的机器,设备树默认使用机器本身的,内核使用麒麟和客户自身的均可以,系统必须指定为麒麟系统即可完成正常安装