最近在研究群晖的内部工作原理,研究对象是 ds214play 。这个产品有个 nor flash 。根据启动 log 我们可以看到 nor flash 的分区表: [ 9.756626] m25p80 spi1.0: found n25q064, expected m25p80 [ 9.762133] m25p80 spi1.0: n25q064 (8192 Kbytes) [ 9.766993] Creating 6 MTD partitions on "spi1.0": [ 9.771814] 0x000000000000-0x0000000d0000 : "RedBoot" [ 9.781681] 0x0000000d0000-0x0000003d0000 : "zImage" [ 9.797184] 0x0000003d0000-0x0000007d0000 : "rd.gz" [ 9.823147] 0x0000007d0000-0x0000007e0000 : "vendor" [ 9.828372] vender Mac0 address : 00:11:32:42:cb:4f [ 9.834018] vender Mac1 doesn't set ucSum:0x00 Buf:0x00 Sum:0. [ 9.841107] vender Mac2 doesn't set ucSum:0x00 Buf:0x00 Sum:0. [ 9.847013] vender Mac3 doesn't set ucSum:0x00 Buf:0x00 Sum:0. [ 9.852842] serial number='1520LTN597904' [ 9.860050] 0x0000007e0000-0x0000007f0000 : "RedBoot Config" [ 9.876496] 0x0000007f0000-0x000000800000 : "FIS directory"
里面有存放 kernel ( zImage)和 ramdisk(rd.gz)。我解压了群晖的官方的 pat 文件,发现结构如图。 checksum.syno diskaction.tgz DiskCompatibilityDB.tar DSM_DS214play_25556.pat FileStation-i686-1.2.8-0293.spk hda1.tgz indexdb.txz LogCenter-i686-1.1.5-0129.spk OAuthService-i686-1.0.4-0031.spk rd.bin RedBoot.msys smartctl strings synofwupgrade synohdpack_img.txz Synology.sig SynologyUniversalSearch-i686-1.5.1-0316.spk updater USBCopy-i686-2.1.1-0081.spk VERSION zImage
我的问题是: 1.pat 文件里面的 zImage 和 rd.bin 应该就是对应的 nor flash 分区中的 zImage 和 rd.gz 吧? 2.hda1.tgz 就是安装到硬盘中的第一个分区中 rootfs ,是吧? 3.ds214play 升级的时候,kernel ( nor flash 分区表中的 zImage ) ,ramdisk ( nor flash 分区表中的 rd.gz )也会升级吗?如果中途断电,会怎样?会不会升级 kernel 的时候,断电导致变砖?我似乎也没有看到群晖有什么双分区保险机制。还是群晖在 load kernel 之前的 bootloader 里面做了类似能够进制恢复模式的设计? |
|