所在位置: 首页 固件讨论 QNAP QHora-321 OpenWRT固件教程

QNAP QHora-321 OpenWRT固件教程

2023年3月12日 14:16
阅读 6307
2

136E6D51D1F7409DB2167DDD01C51BFC.jpeg

这边会发布一个能正常使用的OpenWRT,系统内核依赖基本齐全,固件在稍后时间发布到固件服务器上。 后期iStoreOS适配后,可以玩到功能更全面的OpenWRT,并且通过iStoreOS的源码开放,开放自己编译系统,敬请期待。

刷机教程

从原厂固件刷机到OpenWRT。

1、需要准备一条TTL线连接到QHora-321,需要注意的是TTL的针脚间距是2.0mm。QHora-321的TTL线接口如下所示,针脚定义从左到右依次为Tx、Vcc、Rx、Gnd。只需要连接Tx、Rx、Gnd即可。 ttl.jpg

2、准备一个U盘,U盘必须为FAT32格式,里面存放如下刷机文件,并把U盘插到QHora-321内部的USB接口上。 cn9131-qhora-321.dtb和Image用于启动临时OpenWRT。 mmcblk0p1.img和mmcblk0p3.img为固件镜像文件。 image23.png 刷机文件可以在固件下载服务器下载到,也可以按下方第二部分教程自己制作。

3、使用波特率115200连接TTL线,给QHora-321上电,出现如下指令,快速按任意键,让QHora-321停止在U-Boot模式。

Hit any key to stop autoboot:  0 

4、输入如下命令启动U-Boot的USB功能。

usb start

5、依次输入如下命令,从U盘加载临时OpenWRT,并且启动临时OpenWRT

fatload usb 0:1 0x6500000 Image
fatload usb 0:1 0x6000000 cn9131-qhora-321.dtb
booti 0x6500000 - 0x6000000

6、在OpenWRT的CLI中输入如下命令,挂载U盘

mkdir /tmp/sda1
mount /dev/sda1 /tmp/sda1

7、(可选)备份原来emmc分区镜像,此步操作为可选执行

dd if=/dev/mmcblk0p1 of=/tmp/sda1/mmcblk0p1.img.bak
dd if=/dev/mmcblk0p3 of=/tmp/sda1/mmcblk0p3.img.bak

8、输入如下命令将OpenWRT新固件写入QHora-321的emmc存储

dd if=/tmp/sda1/mmcblk0p1.img of=/dev/mmcblk0p1
dd if=/tmp/sda1/mmcblk0p3.img of=/dev/mmcblk0p3

9、重启路由器,依然需要按键重新进入U-Boot

reboot

10、修改U-Boot的启动命令

setenv bootcmd 'ext4load mmc 0:1 0x6500000 Image; ext4load mmc 0:1 0x6000000 cn9131-qhora-321.dtb; setenv bootargs $console cpuidle.off=1 root=/dev/mmcblk0p3; booti 0x6500000 - 0x6000000'
setenv current_entry 0
saveenv

11、输入命令重启进入OpenWRT

reset

12、如果需要切换到原厂系统,只需要更改U-Boot的启动命令

setenv bootcmd ' ext4load mmc 0:2 0x6500000 Image; ext4load mmc 0:2 0x6000000 cn9131-db-A.dtb; setenv bootargs $console cpuidle.off=1; booti 0x6500000 - 0x6000000'
setenv current_entry 2
saveenv

刷机文件制作

前面刷机教程第2部提到了刷机需要4个刷机文件,这里讲下如何从OpenWRT编译的镜像制作4个刷机文件。 1、op编译出来ext4-sdcard.img.gz为固件文件。initramfs-kernel.bin为带全文件的内核镜像文件。

initramfs-kernel.bin重命名为Image

TIM截图20230312150447.png

2、使用7zip,解压ext4-sdcard.img.gz两次,得到0.img和1.img文件。

0.img重命名为mmcblk0p1.img
1.img重命名为mmcblk0p3.img

TIM截图20230312151602.png

3、使用7zip,解压上一部得到得到的mmcblk0p1.img,得到cn9131-qhora-321.dtb TIM截图20230312151844.png

至此获取到了上文教程中的刷机文件。 要说明的是,临时OpenWRT因为是全部加载内存运行,对文件大小有要求。大家刷自编译和自定义固件时候,临时OP可以使用固件服务器提供的最小OpenWRT。

QHora-321 分区和引导

这部分内容作为给后期想要折腾的朋友的,普通玩家跳过即可。

QHora-321有2个存储空间,一个4MB的SPI存储和一个4GB的emmc存储。 SPI存储里面存放了引导的U-Boot和U-Boot对应的ENV配置变量。 emmc存储里面存放固件。

SPI一共4个分区

0x000000000000-0x0000001f0000 : "U-Boot"
0x0000001f0000-0x000000200000 : "U-Boot ENV Factory"
0x000000200000-0x0000003f0000 : "Reserved"
0x0000003f0000-0x000000400000 : "U-Boot ENV"

U-Boot从emmc中启动系统依赖ENV中的bootcmd设置

原厂的bootcmd设置

bootcmd = ext4load mmc 0:2 0x6500000 Image; ext4load mmc 0:2 0x6000000 cn9131-db-A.dtb; setenv bootargs $console cpuidle.off=1; booti 0x6500000 - 0x6000000

OpenWRT的bootcmd设置

bootcmd =  ext4load mmc 0:1 0x6500000 Image; ext4load mmc 0:1 0x6000000 cn9131-qhora-321.dtb; setenv bootargs $console cpuidle.off=1 root=/dev/mmcblk0p3; booti 0x6500000 - 0x6000000'

引导过程最主要是指定dtb文件和内核镜像Image,使用不同固件dtb文件文件名不同时候需要对应修改。 OpenWRT的比起原厂多一个需要指定root=,用于指定OpenWRT的根分区。 QHora-321也能直接使用PUZZLE-M901的固件进行引导,但是会有点点小问题。

emmc默认分区格式如下

Disk /dev/mmcblk0: 3.69 GiB, 3959422976 bytes, 7733248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt

Device           Start     End Sectors  Size Type
/dev/mmcblk0p1      34  131105  131072   64M Linux filesystem
/dev/mmcblk0p2  131106  262177  131072   64M Linux filesystem
/dev/mmcblk0p3  262178 1310753 1048576  512M Linux filesystem
/dev/mmcblk0p4 1310754 2359329 1048576  512M Linux filesystem
/dev/mmcblk0p5 2359330 3407905 1048576  512M Linux filesystem
/dev/mmcblk0p6 3407906 3538977  131072   64M Linux filesystem
/dev/mmcblk0p7 3538978 7372833 3833856  1.8G Linux filesystem

p1 p2为Boot分区,p3 p4为系统的根分区 每个分区有2组实现双系统切换,因此刷OpenWRT时候都是写入到p1和p3分区。保证可以通过修改bootcmd可以切换2个系统。 p5为原厂固件用于存放日志的分区 p6位空预留 p7是原厂系统的实际运行的根分区

如果你要保留双系统,只需要按照教程刷写p1和p3分区即可,完全恢复出厂也是恢复p1和p3分区。 如果你希望把整个emmc用作OpenWRT的空间,想要大分区,你只需要重新格式化分区emmc即可,并修改对应的bootcmd。emmc使用GPT分区格式,重新分区在OpenWRT下操作也是非常简单。但是如果你重新格式化emmc,想要恢复原厂系统就不可能了。

    作者
    pufer
    暂无签名...
  • 文章 --
  • 阅读量 --
  • 获赞 --
  • 排名 --
    标签