w2861 发表于 2022-9-6 15:01:33

黑群晖DSM920+编译指南,4硬盘以上可用

本帖最后由 w2861 于 2022-9-6 16:45 编辑

最近在群里灌水,看了几篇DS920引导编译的帖子,感觉要么有些错误,要么有些复杂,要么不适用自己的主板。经过自己的琢磨,在自己的实体机上成功编译了黑群晖的DSM920+引导,并且成功实现了8硬盘的识别。于是整理一下,发个帖子,给各位老铁参考。
前言:
实体机配置
CPU:G4600,八代intel奔腾CPU
主板:华硕M9E(Z270芯片组)
存储:主板自带8个sata接口,其中4个由芯片组提供,4个由两个ASM1081芯片提供(每个芯片各两个)
内存:4GB

二、前期问题及准备工作
其实编译之前有几个问题还是需要弄清楚的:
1.ds920的dts文件编辑问题。
要想识别5个及以上硬盘,需要编辑dts文件,而编译dts文件的前提又需要知道主板sata接口的pcipath(pciroot),或者使用了sata扩展卡的也需要知道扩展卡sata的pcipath(pciroot),我之前刷了http://www.gebi1.com/thread-301338-1-1.html(主题:920+引导编译教程 小白也能编译)的铁子,作者说:“其实pocopico大神已经为我们自动获取到了自己nas的.dts文件,只是不太准确,硬盘的数量对不上,这个大家自行修改就行了,但是pci-root是正确的,这样大家只需要修改适合自己硬盘的数量就行了,比如5盘位,然后修改这个,复制5组数据,按照序列编号1-5就行了”
注意这里是不对的,模板ds920p.dts的pci-root也是错误的,需要根据主板实际的pciroot进行修改。
后来又参考了http://www.gebi1.com/thread-301598-1-1.html(主题关于DS920p和DS1621系列的dtb和dts(2022.5.24更新):)的帖子,这里获取pciroot的方法才是正确的,但是该帖子后半部分生成dtb的过程又太复杂,还需要安装ubutun虚拟机啥的,其实不用,咱们只参考该帖子里获取pciroot的方法就行了。
2.编译引导版本名称的问题
现在编译镜像版本众多,有时候很容易迷糊,什么这lake那lake的,到底哪个对应哪个,新手很容易迷糊。经过查找资料,就好像intel的CPU不同代的产品也有代号一样,原来群晖不同的产品也有代号,比如DS920+的套件架构是Geminilake,ds918+的套件架构则是Apollolake,RS3617xs的套件架构是Bromolow,RS3617xs+的套件架构则是Broadwell。所以当你刷帖子看到编译指令是某个架构的时候,就知道是编译什么版本的引导了。不同产品对应的套件架构,可以参考这个网页:http://www.92nas.com/forum.php?mod=viewthread&tid=35
3.需要准备的软硬件及网络环境
编译过程中需要ssh软件,我这里用的是xshell;还需要用到sftp软件,我这里用的是WINSCP,编辑dts文件使用记事本就可以,我用的是vscode别的软件暂时不需要了
硬件的话就是你的硬件环境,主板,硬盘什么的,以及路由器、网线、U盘什么的。还需要使用另一台电脑,用于ssh。
对于主板上有对个sata控制器的情况,建议每个sata控制器的一个sata口上都插一个硬盘,方便识别sata口所属控制器的pciroot

以下是正式教程:
一、下载编译环境
首先从https://github.com/pocopico/tinycore-redpill下载最新的编译img镜像,tinycore-redpill上的最新版本(截至9.6)是v0.8.0.0,但是这个帖子http://www.gebi1.com/thread-301698-1-1.html(主题:第1节课:群晖引导编译u盘镜像tinycore-redpill下载和刻录 )里有个最新的0.9.0.2的img镜像,不知道作者是在哪下载的。我用的就是这个最新的0.9.0.2的。
下载之后,使用rufus写入U盘,并启动,获取到IP地址,这里好多帖子说的都比较详细了,这里不赘叙了。
二、编译指令
1.替换rploader.sh文件解决github墙的问题
使用xshell登录编译环境,输入以下指令,替换为gebi国内优化版本的rploader.sh文件可以有效解决墙的问题:
wget https://gitee.com/gebi1/gebi1-redpill/raw/master/rploader%200.9.1.2.sh -O rploader.sh&&sudo chmod 700 rploader.sh这里下载的是截至目前(9.6)的最新版的rploader.sh文件,0.9.1.2版本,可以编译7.1.1rc-42951
2.更新编译包
./rploader.sh fullupgrade now当出现Should i update the sda with your current files? 的提示时,输入y回车即可
3.获取并更新usb的pid和vid
sudo ./rploader.sh identifyusb now4.更新主板的sn和mac
sudo ./rploader.sh serialgen DS920+ now5.获取硬盘sata口的satamap信息
sudo ./rploader.sh satamap now其中对于第5步,如果主板上有多个sata控制器,会告诉你每个sata控制器上有几个sata口,连了几个sata,有一个让你按回车确认的过程,比如我的主板上就有三个sata控制器,芯片组提供4个sata口,两个asm1081芯片组各提供两个sata口,DiskIdxMap的值就是000406,SataPortMap的值就是422参数说明:
SataPortMap描述sata控制器的数量及硬盘数量。该参数有几位数,就表示主板上有几个sata控制器。每位数的数值就表示该sata控制器有几个sata接口,注意pcie转sata扩展板的,看看扩展板上有几个sata控制器芯片,有几个,就要算几个。比如有3个控制器,第一个控制器有4个sata口,第二个控制器有2个sata口,第三个控制器有2个sata口,那么SataPortMap=422
DiskIdxMap描述每个sata控制器的起始序号(累加),是一个两位的16进制数,从00开始计算。比如DiskIdxMap=000406的意思是,第一个控制器的磁盘从序号00开始往后排,因为第一个sata控制器的sata数量是4个,所以到第二个控制器的时候,硬盘需要就应该从04开始了,第二个sata控制器的sata数量是2个,所以到第三个sata控制器的时候,就应该从06开始计算了。
3,4,5步骤中出现Should i update the user_config.json with thess values? 的提示时,选择y回车即可

至以上步骤,已经更新完了user_config.json文件的sn、mac、usb的pid和vid等,如果此时有ds920的正版序列号想洗白黑群晖,就需要使用winscp,把user_config.json文件里的sn和mac改为正版的sn和mac了。(在ssh环境直接使用vi命令应该也是可以的)。
6.编译DS920+ 7.1.1 42951版本
./rploader.sh build geminilake-7.1.1-42951输入这个编译命令几分钟后,才会看到执行动态,需要耐心等待。当出现Want to use firmware files from /home/tc/custom-module/*.pat ? :时,输入y并回车。

编译完之后,会生成引导的img镜像,并已经自动写入到U盘里了,此时重启主板,即可使用群晖助手搜索发现IP了。
但这会儿我们还没编辑dts文件,没法使用5个及以上的硬盘。根据前文的描述,可以使用以下方法获取每个硬盘控制器的pciroot。
需要安装的主机,接上硬盘,每个控制器接上一个硬盘就可以,全接上也无所谓。比如主板上自带6sata和一张5口的sata扩展卡,其实就各接一个sata硬盘就可以,因为主要是需要查看每个控制器的pcie位置。接好硬盘,启动U盘引导,等待群晖助手可以发现IP之后,在浏览器地址栏输入以下url并回车:
IP:5000/webman/start_telnet.cgi
注意IP要改为你的群晖获取到的IP,正常情况下,浏览器会返回:{"success": true}:
使用xshell,telnet登录IP,用户名root,密码为空,输入:
ls /sys/block/正常情况下,会返回一些信息,其中包含了你连接的sata硬盘,会以sata1、sata2等字样表示,接了几个sata硬盘,就有几个sata数。
继续输入以下指令:
cat /sys/block/sata1/device/syno_block_info正常情况下,输出的信息里,会包括pciepath的信息,这里就是你当前sata 硬盘的pciepath了。所以每个控制器接一个硬盘的目的就是为了查看每个硬盘的paiepath。这里我的主板返回的三个控制器的pciepath分别是:
00:17.0
00:1c.6,00.0,05.0,00.0
00:1c.6,00.0,07.0,00.0由此也可得,pciepath没什么格式特征,不一定都是00.0结尾的,长度也不是严格一致,所以想推测pciepath的,可以洗洗睡了获取到sata控制器的pciepath之后,就可以编辑dts文件了,并且需要重新编译引导,此时不用重写U盘,重启主板,出现引导选择的时候,选择最下边的选项,会重新进入编译环境,此时重新执行指令1-5,但别执行指令6。然后使用winscp将模板dts文件下载下来,参照已有的sata格式,增加sata数量即可。比如我这里前四个sata的pciepath是00:17.0,第五第六个是00:1c.6,00.0,05.0,00.0,第七第八个是00:1c.6,00.0,07.0,00.0。具体怎么修改,回头有时间开个贴子详细说一下。注意这里边有的数值是保持不变的,有的是需要依次增加的。还有以0x打头的的是16进制,比如0x19再增加的话应该是0x1a,而不是0x20
修改完,保存,重新上传覆盖,然后执行第6条指令,就可以编译5硬盘及以上的ds920黑群晖引导了。经过实测,我的主板可以成功识别8个硬盘。
至此,该贴就算完事了。当前目前还有一些问题可能会存在,比如nvme是否可以识别我还没测试过。因为dts文件里我看有nvme的pciepath,可能大概率也是错误的,但是我手头没有nvme硬盘,所以就没测试修改。






mrli868 发表于 2022-9-7 23:28:10

优质好贴,收藏了,感谢分享

cheong0hk 发表于 2022-9-8 07:30:03

收藏了,感谢分享

wjq_xp 发表于 2022-9-8 22:26:43

你在pocopico大佬的github切换到develop分支,就可以下载0.9.0.2版本了,因为0.9.0.2是测试版,所以master分支放的是0.8.0.0的正式版。要是不会切换的话,也可以打开下面的链接直达:
https://github.com/pocopico/tinycore-redpill/tree/develop

wcg928 发表于 2022-9-13 16:31:37

小白看不懂啊。

donxu 发表于 2022-9-18 12:56:39

我那个帖子,适合直接获取到dtb文件,然后再进行在线的编译。其实过程一点都不麻烦,比如帮别人定制dtb并定制引导文件,不需要使用tinycore。另外,虚拟机也好,直接ubuntu的安装u盘启动也好,也很方便。dts文件是最简单的,直接模版就可以进行编辑和修改。另外,nvme是可以修改并正确识别的,已经测试成功,不需要像918机型在版本升级时重新打nvme补丁(如7.1升级到7.1.1)

qq597875766 发表于 2022-9-23 01:31:26

学习学习!!!

cxx0233@qq.com 发表于 2022-10-30 20:00:46

楼主发贴辛苦了,谢谢楼主分享!
页: [1]
查看完整版本: 黑群晖DSM920+编译指南,4硬盘以上可用