虚拟机环境
基于wuwu的开源工程: ubuntu 22.04
用户:wuwu 密码:123456
21届走马观碑超级好用仓库开源啦?_哔哩哔哩_bilibili
1 写 uboot
原来loongOS 的久久派,按 C 进入PMON,修改IP
set ifconfig syn0:192.168.1.50
PC 机改IP为192.168.1.250, 开 tftp ,将 u-boot-spl-gz.bin 复制到 tftp 服务器打开的目录下
bash
fload tftp://192.168.1.250/u-boot-spl-gz.bin

2 更换 内核 和文件系统 启动
参考中科云 新世界: 【龙芯】久久派新世界系统烧录_哔哩哔哩_bilibili
bash
git clone https://gitee.com/Wuwu129/SmartCar_99Pai_OpenSource.git
1)tftp启动
虚拟机操作 更换内核:
(1) 将开源仓库下system/uImage 拷贝到虚拟机 ~/linux/tftpboots 将开源仓库下system/wuwusama_buildrootfs.tar 解压到虚拟机 ~/linux/nfs/lsrootfs
(2)命令如下 内核更新:
cp SmartCar_99Pai_OpenSource/system/uImage ~/linux/tftpboot/
(3) 系统更新:
1)先删除原来的系统文件
sudo rm ~/linux/nfs/lsrootfs/* -r
2)写入新的系统
tar -xvf SmartCar_99Pai_OpenSource/system/wuwusama_buildrootfs.tar -C ~/linux/nfs/lsrootfs/
开发板 uboot操作
uboot中设置久久派IP (IP根据自己网段修改, 保证局域网内没有其他设备使用)
setenv ipaddr 192.168.3.99
设置网关 (根据自己局域网设置)
setenv gatewayip 192.168.3.1
设置虚拟机当前IP (需要与久久派在同一网段下)
setenv serverip 192.168.3.90
设置通过网络挂在根文件系统 (实例中IP根据上述自行修改)setenv bootargs 'console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.3.90:/home/wuwu/linux/nfs/lsrootfs,vers=3,tcp ip=192.168.3.99:192.168.3.90:192.168.3.1:255.255.255.0::eth0:off'
设置TFTP下载内核
setenv bootcmd 'tftp {loadaddr} uImage; bootm {loadaddr}'
保存设置 (出错不需要重新设置)
saveenv
查看当前环境设置(可选)
printenv
启动系统
boot
2)U盘启动
内核与根文件系统配套使用,先加载内核后,枚举出 /dev/sda1 ,才能加载U盘的文件系统(wuwu的内核不能用U盘启动,只能tftp)
准备U盘
挂载ext4格式的U盘
sudo mount -t ext4 /dev/sda1 /mnt/usb
复制 rootfs.tar 到U盘根目录
cp rootfs.tar /mnt/usb
解压 文件系统 到U盘 根目录
sudo tar -xvf rootfs.tar
到 串口, 开机 99 派, 进入 #soc , 进行U盘 手动 启动
(1)配置为U盘启动
setenv bootargs root=/dev/sda1 rootdelay=5
(2)手动启动系统
ext4load usb 0:1 ${loadaddr} boot/uImage #加载固件文件到内存中 <设备编号>:<分区编号> <加载地址> <文件路径>
bootm KaTeX parse error: Expected 'EOF', got '#' at position 13: {loadaddr} #̲ 其中`{loadaddr}` 指定内核映像的加载地址
U盘自动启动:
(3)设置自动启动系统
setenv bootargs root=/dev/sda1 rootdelay=5
setenv bootcmd 'ext4load usb 0:1 {loadaddr} boot/uImage;bootm {loadaddr}'
saveenv
3)EMMC启动步骤1-烧写系统到EMMC
(1) 输入密码root进入系统
(2) 在虚拟机中将项目中system/ 拷贝至 ~/linux/nfs/lsroots (在虚拟机中操作)
cp system/ ~/linux/nfs/lsrootfs/root/ -r
(3) 输入y确认格式化
y
(4) 挂载emmc
mount /dev/mmcblk0 /mnt
(5) 将system/中wuwusama_buildrootfs.tar 解压至emmc根目录中
tar -xvf wuwusama_buildrootfs.tar -C /mnt
(6) 将新内核拷贝到emmc中
cp uImage /mnt/boot
(7) 取消emmc挂载
umount /mnt
此时已经成功将内核和系统烧写至EMMC
4)EMMC启动步骤2-U-BOOT设置EMMC启动
(1) reboot重新启动系统
reboot
(2) 按
c进入U-BOOT(3) 设置跟文件系统路径 rootdelay 参数用于设置U-BOOT等待时间
setenv bootargs root=/dev/mmcblk0
(4) 设置从EMMC中读取内核
setenv bootcmd 'ext4load mmc 0:0 {loadaddr} boot/uImage; bootm {loadaddr}'
(5) 保存参数
saveenv
(6) 启动系统
boot
3 启动总结
| 引导 | 内核 | 文件系统 | 交叉编译工具 | |
|---|---|---|---|---|
| 旧世界 | PMON | 4.19 | looonOS | loongson-gnu-toolchain-8.3 |
| 新世界 | uboot | 6.9 | buildroot_roootfs | loongson-gnu-toolchain-13.2 |
在新世界中,先用uboot引导 ,再加载内核 ,最后启动文件系统 。
(1)uboot引导 的文件是 u-boot-spl-gz.bin
这是写入到 GD32Q80芯片中的,可以在PMON中烧录 ,也可以用 编程器烧录 。
(2) 内核 uImage 加载
在 uboot启动后,加载内核 uImage 方法:
| 命令 | 说明 |
|---|---|
| setenv bootcmd 'tftp {loadaddr} uImage; bootm {loadaddr}' | tftp 加载,要配置tftp服务 |
| setenv bootcmd 'ext4load usb 0:1 {loadaddr} boot/uImage;bootm {loadaddr}' | U盘加载 |
| setenv bootcmd 'ext4load mmc 0:0 {loadaddr} boot/uImage; bootm {loadaddr}' | emmc加载 |
(3) 文件系统 rootfs.tar 启动
文件系统 rootfs.tar 要解压 到 NFS的 根目录下或者EMMC的根目录或者U盘根目录下。
在 uboot启动后,加载内核 uImage 结后,再加载文件系统 方法:
| 命令 | 说明 |
|---|---|
| setenv ipaddr 192.168.3.99 setenv gatewayip 192.168.3.1 setenv bootargs 'console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.3.90:/home/wuwu/linux/nfs/lsrootfs,vers=3,tcp ip=192.168.3.99:192.168.3.90:192.168.3.1:255.255.255.0::eth0:off' | nfs启动,要配置NFS服务 |
| setenv bootargs root=/dev/sda1 rootdelay=5 | U盘启动 |
| setenv bootargs root=/dev/mmcblk0 | emmc启动 |
(4) 组合使用
上面的 (2 里的三种选择一种) 和 (3 里的三种选择一种) 可随意组合使用,例如 使用 tftp加载内核,emmc的文件系统(常用的,因为要修改内核 )。
wuwu是 使用 tftp加载内核 , nfs 启动文件系统。
附录:
1 boot 启动参数
1 )${loadaddr}参数
执行编译命令: make uImage LOADADDR=0x00008000 生成的uImage文件位于arch/arm/boot/目录下。
ext4load usb 0:1 ${loadaddr} boot/uImage
加载固件文件 uImage 到内存中 <设备编号>:<分区编号> <加载地址> <文件路径>
bootm ${loadaddr}
其中${loadaddr} 指定内核映像的加载地址
setenv bootcmd tftp ${loadaddr} uImage
通过tftp 加载 uImage 到内存
2)setenv bootargs 'console=...'
ssetenv bootargs 'console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.3.90:/home/wuwu/linux/nfs/lsrootfs,vers=3,tcp ip=192.168.3.99:192.168.3.90:192.168.3.F1:255.255.255.0::eth0:off'
console=ttyS0,115200:指定串口终端设备为ttyS0,波特率为 115200,用于内核的日志输出和用户交互 4。root=/dev/nfs:表明根文件系统采用网络文件系统(NFS)。nfsroot=192.168.3.90:/home/wuwu/linux/nfs/lsrootfs:指定 NFS 服务器的 IP 地址是 192.168.3.90,以及根文件系统在服务器上的路径为/home/wuwu/linux/nfs/lsrootfs。vers=3:指定使用NFS 协议版本 3,NFSv3 是嵌入式开发中的稳定版本,兼容性好tcp:指定 NFS 使用TCP 传输协议,相比 UDP,TCP 提供可靠传输ip=192.168.3.99:192.168.3.90:192.168.3.1:255.255.255.0::eth0:off:配置开发板的网络参数,其中192.168.1.50是开发板的 IP 地址,192.168.3.90是 NFS 服务器的 IP 地址,192.168.3.1是网关地址,255.255.255.0是子网掩码,eth0是网络设备名,off表示不使用 DHCP 自动获取 IP 地址 。