目 录CONTENT

文章目录

DSM 7.X 引导编译

华灯
2024-04-16 / 0 评论 / 0 点赞 / 19 阅读 / 10421 字

群晖的DSM 7.1正式版已经发布了,是时候编译一个来玩了(虽然RC的时候我就已经作死升级了主力机星际蜗牛,不过并没有发现什么Bug,一切正常。群晖的系统还是可以信赖的,毕竟发展到今天都更新到7.1了)。

本文将以使用pocopico在GitHub上的Redfill-Load库编译DSM7.1-42661 918+举例,其他型号引导的编译方法大同小异。而使用tinycore-redpill库来编译将在之后再写一篇文章来讲。需要注意的是,这种方法似乎无法编译3615以及3617的引导,如有需要,请使用tinycore-redpill库编译。

注意!!! 网络下载部份要自行处理(需要连接Github下载文件,国内的网络访问GitHub。。。懂得自然懂,我自己是全局加上修改GitHub的host-->参考这个,或者这个), 不然有可能会因为某些原因下载不到或是失败,最终导致编译报错。

网络上说会无法识别 Realtek NIC 和 HBA 卡(这点我没有测试)。应该只能继续使用 Intel NIC 和内部/外部 SATA,目前实测 Rtl8111 可以正常识别并使用 Intel 网卡也是可以使用的。

2022/04/10更新:测试虚拟机网卡工作正常,2.5G网卡工作正常,sas补丁未测试,关机键补丁工作正常,极少部分遇到端口错误无法安装

本人主力机星际蜗牛B单工作正常,网卡为Intel I211,硬盘为6*sata 1T

Photos套件补丁请移步:https://github.com/jinlife/Synology_Photos_Face_Patch,已支持0263版本

注意!AME套件2.0需配合DSM7.1正式版(42261)使用,官方说明如下:

注意事项
从 Advanced Media Extensions (AME) 2.0 及以上版本开始,您必须登录 Synology Account 才能授权下载 HEVC 及 AAC Codec。
相容性与安装
此版本兼容 DSM 7.1 及以上版本。
新功能
支持 AAC 格式

测试发现未洗白无登录账户默认无法使用解码,涉及套件为photos以及video station。

2022/04/13更新:https://github.com/AlexPresso/VideoStation-FFMPEG-Patcher能部分取代AME的功能,或者可以看看这篇文章:https://wp.gxnas.com/11491.html

2022/04/17更新:

Video Station 播放格式,需要使用Wrapper_VideoStation修正,除了HEVC不行外其他AAC都以可以正常播放。

定时开关机功能:定时关机是可以用的,,定时开机就必须去主机板的BIOS设定,并减8小时为单位设定。例如上午11点开机,那么BIOS里就设定3点开机即可,这个时间差异是因为UTC 与RTC 问题。
不是不能解决,只是解决了也不能让黑群晖使用定时开机功能所以就不予理会了(建议使用智能插座代替)。
解决方法:
开启群晖ssh功能,使用PuTTY软件(没有的去百度现在)登入管理员帐号,输入sudo -i,回车后输入密码进入ROOT 模式。

(1)查看初始系统时间:
date

(2)该时间为UTC时区:
host# cp /usr/share/zoneinfo/GMT /etc/localtime

(3)查询现在时区时间:
host# date

(4)修改时区时间:
host# date -s XX:XX (输入你要设定的时:分24小时制)。

(5)验证是否更改生效:
host# date

注意:需关闭群晖网络自动时间较正,因为它会把GMT又改回去。

以下是安装方法

将 pocopico Redfill-Load GitHub 下载到单独的 Linux
这里有一个韩文的Linux系统,看得懂或不介意的可以下载使用(需使用魔法,建议直接使用Ubuntu)。 
https://drive.google.com/file/d/19XwxRTDcJwMPlJ7gLQIr9argi_jeSTtE/view
用户名:toolc 密码:P@ssw0rd
或准备好自己要用的 Linux 系统,例如我使用了Ubuntu。
下载 https://github.com/pocopico/redpill-load:
git clone https://github.com/pocopico/redpill-load
解压 redpill-load-master.zip 到系统根目录:
tar /redpill-load-master.zip
赋予管理员权限:
chmod -R 777 redpill-load-master
(这一步如果不会熟练使用Linux命令下载解压的,或者代码下载解压报错的,可以安装一个服务器管理面板,例如说国内常用的宝塔面板,安装教程:https://www.bt.cn/bbs/thread-79460-1-1.html,可视化编辑文件。如果连面板都不会用。。。。。。建议还是直接下载别人编译好的文件吧。)
编译环境准备,安装相应库
以下这六项只需要执行一次, 会安装到系统里。日后除非你现在在用的Linux环境重置了(例如重新安装了Linux系统), 不然都无需再次执行。代码每次复制一行运行一行:
sudo apt-get update
sudo apt install docker.io
sudo apt install jq
sudo apt install curl
sudo apt install device-tree-compiler
sudo apt-get install bsdiff
为DS918+准备user_config.json
cd /redpill-load-master
touch user_config.json
vi user_config.json
然后输入i,然后回车进入编辑模式,粘贴下面的代码。粘贴完按esc键,输入:,再输入wq!,然后回车,这样就保存退出了。
{
"extra_cmdline": {
"pid": "0x3333",
"vid": "0x3333",
"sn": "123456",
"mac1": "123456",
"SataPortMap": "2",
"DiskIdxMap": "00"
},
"synoinfo": {
"internalportcfg" : "0xffff",
"maxdisks" : "16",
"support_bde_internal_10g" : "no",
"support_disk_compatibility" : "no",
"support_memory_compatibility" : "no"
},
"ramdisk_copy": {}
} 

参数说明:
vid、pid:U盘的序号,使用ChipGenius可以查到,改成自己的
netif_num:网卡的数量,对应要编辑好mac1、mac2等等
sn、mac:自己找洗白码
synoinfo:引导安装过程修改/etc.defaults/synoinfo.conf中的参数
maxlanport:修改synoinfo里面网卡的数量
ramdisk_copy:拷贝文件到引导目录内

以上参数是我自己使用的,这部分请自行修改,或者去复制相同机型的参数也行。其中SataPortMap和DiskIdxMap这两个如果没有改好会导致启动时报错:在端口xx检查到错误)。SN和MAC以及pid和vid可以在生成img文件后再更改。
调整 buildpat-918p-7.1-42661.sh 权限以及解密pat文件
注意!直接从pocopico库下载的文件中只含有RC版(42621)的解码文件,不含有正式版(42661)的解码文件,因此需要自己创建:
以创建42661for918举例:
cd redpill-load-master/buildpat
touch buildpat-918p-7.1-42661.sh
按i键进入编辑模式,粘贴以下内容:
curl -L https://cndl.synology.cn/download/DSM/release/7.1/42661/DSM_DS918%2B_42661.pat -o ds.pat
mkdir synoesp
curl --location https://cndl.synology.cn/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat --output oldpat.tar.gz
tar -C./synoesp/ -xf oldpat.tar.gz rd.gz
cd synoesp
xz -dc < rd.gz >rd 2>/dev/null || echo "extract rd.gz"
echo "finish"
cpio -idm <rd 2>&1 || echo "extract rd"
mkdir extract && cd extract
cp ../usr/lib/libcurl.so.4 ../usr/lib/libmbedcrypto.so.5 ../usr/lib/libmbedtls.so.13 ../usr/lib/libmbedx509.so.1 ../usr/lib/libmsgpackc.so.2 ../usr/lib/libsodium.so ../usr/lib/libsynocodesign-ng-virtual-junior-wins.so.7 ../usr/syno/bin/scemd ./
ln -s scemd syno_extract_system_patch
cd ../..
mkdir pat
#tar xf ds.pat -C pat
ls -lh ./
sudo LD_LIBRARY_PATH=synoesp/extract synoesp/extract/syno_extract_system_patch ds.pat pat || echo "extract latest pat"
cd pat
tar -czvf archive.tar.gz ./
mv archive.tar.gz ../ds918p_42661.pat
cd ../
rm -r ds.pat oldpat.tar.gz pat synoesp

然后和上面一样保存退出即可。

buildpat-920p-7.1-42661.sh的内容如下:
curl -L https://cndl.synology.cn/download/DSM/release/7.1/42661/DSM_DS920%2B_42661.pat -o ds.pat
mkdir synoesp
curl --location https://cndl.synology.cn/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat --output oldpat.tar.gz
tar -C./synoesp/ -xf oldpat.tar.gz rd.gz
cd synoesp
xz -dc < rd.gz >rd 2>/dev/null || echo "extract rd.gz"
echo "finish"
cpio -idm <rd 2>&1 || echo "extract rd"
mkdir extract && cd extract
cp ../usr/lib/libcurl.so.4 ../usr/lib/libmbedcrypto.so.5 ../usr/lib/libmbedtls.so.13 ../usr/lib/libmbedx509.so.1 ../usr/lib/libmsgpackc.so.2 ../usr/lib/libsodium.so ../usr/lib/libsynocodesign-ng-virtual-junior-wins.so.7 ../usr/syno/bin/scemd ./
ln -s scemd syno_extract_system_patch
cd ../..
mkdir pat
#tar xf ds.pat -C pat
ls -lh ./
sudo LD_LIBRARY_PATH=synoesp/extract synoesp/extract/syno_extract_system_patch ds.pat pat || echo "extract latest pat"
cd pat
tar -czvf archive.tar.gz ./
mv archive.tar.gz ../ds920p_42661.pat
cd ../
rm -r ds.pat oldpat.tar.gz pat synoesp 

buildpat-3622p-7.1-42621.sh的内容如下:
curl -L curl -L https://global.download.synology.com/download/DSM/release/7.1/42621/DSM_DS3622xs%2B_42621.pat -o ds.pat
mkdir synoesp
curl --location https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat --output oldpat.tar.gz
tar -C./synoesp/ -xf oldpat.tar.gz rd.gz
cd synoesp
xz -dc < rd.gz >rd 2>/dev/null || echo "extract rd.gz"
echo "finish"
cpio -idm &1 || echo "extract rd"
mkdir extract && cd extract
cp ../usr/lib/libcurl.so.4 ../usr/lib/libmbedcrypto.so.5 ../usr/lib/libmbedtls.so.13 ../usr/lib/libmbedx509.so.1 ../usr/lib/libmsgpackc.so.2 ../usr/lib/libsodium.so ../usr/lib/libsynocodesign-ng-virtual-junior-wins.so.7 ../usr/syno/bin/scemd ./
ln -s scemd syno_extract_system_patch
cd ../..
mkdir pat
#tar xf ds.pat -C pat
ls -lh ./
sudo LD_LIBRARY_PATH=synoesp/extract synoesp/extract/syno_extract_system_patch ds.pat pat || echo "extract latest pat"
cd pat
tar -czvf archive.tar.gz ./
mv archive.tar.gz ../ds3622xsp_42621.pat
cd ../
rm -r ds.pat oldpat.tar.gz pat synoesp 

创建好文件后,就可以运行了:
chmod +x buildpat-918p-7.1-42661.sh
./buildpat-918p-7.1-42661.sh
这样就重新创建了未加密的 ds918p_42661.pat
(注意!最后安装DSM的时候pat文件不能使用这个pat,否则会报错安装失败!此文件仅用于编译img,安装请从官方下载pat文件安装)。
将重新生成的 ds918p_42661.pat 文件移动到cache文件夹中
sha256sum ds918p_42661.pat
(此步用于生成DS918p_42661.pat 的 sha256sum数值, 那个数值就是要代换的值, 复制下来备用)。
mv ds918p_42661.pat ../cache
cd ..
修改 config.json 档里的 SHA256 值校准 (在 /redpill-load-master/config/DS918+/7.1.0-42661)
vi config.json
在下列字串 修改sha256数值:
"id": "ds918p_42661",
"pat_url": "https://global.download.synology.com/download/DSM/release/7.1/42621/DSM_DS918+_42661.pat",
"sha256": "e7fa975757d5faa6a275b68b130e7fd552263157a39bc71507ea6f2f466bb359"
(用步骤5的数值代换掉"sha256"后面的引号中的那一长串)。
加入 redfill-linux-v4.4.180+
在以下路径下载文件后,将解压后的redpill.ko重命名为 redpill-linux-v4.4.180+.ko
https://github.com/pocopico/rp-ext/blob/main/redpill/releases/redpill-4.4.180plus.tgz
复制到 /redpill-load-master/ext/rp-lkm 目录。
增加扩展驱动(具体添加的引导看文件名,每一行代码代表添加一个驱动,不要一次性全复制了!)
chmod +x ext-manager.sh
---------------虚拟机用扩展 ---------------
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/e1000e/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/e1000/rpext-index.json 
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/vmxnet3/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/redpill-load/master/redpill-virtio/rpext-index.json
---------------网卡驱动扩展---------------
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/r8125/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/r8152/rpext-index.json (这个错误问题很多, 斟酌使用)
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/r8169/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/r8168/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/igb/rpext-index.json
---------------一定要装区---------------
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/redpill-load/master/redpill-acpid/rpext-index.json
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/redpill-load/master/redpill-misc/rpext-index.json
---------------选择区(视需求加入)---------------
./ext-manager.sh add https://raw.githubusercontent.com/pocopico/rp-ext/master/mpt3sas/rpext-index.json
注意!尽量只添加自己需要的驱动!!否则有可能会造成img里的驱动包装档过大而失败!
编译 DS918 开机引导
chmod +x build-loader.sh
./build-loader.sh DS918+ 7.1.0-42661
检查构建的镜像,复制本地PC,并记录USB
redpill-DS918+_7.1.0-42661_**********.img 结果存在于 /redpill-load-master/images 目录中(******为随机生成的)。
备注:
DS920 编译的部份还需要针对要安装的主机取得设备树(device-tree-compiler 也就是dtc,会输出为dts)并转译为dtb (一种二进位档)
在加上dtb 扩展编译后才可以引导并找到硬盘
这个编译方式, 目前大概主流的编译引导器都有支持,只是指令可能不一样而已
而且因为他是硬件位址线直接对应sata,也跟着导致它不能加入其它扩展(加入会变成找不到硬盘)
这部份相当麻烦,因为必须具备硬件位址分析能力,要会看总位址线分布方式,不然改不出符合的dts
当然也就会转不出正确的dtb 档案
目前需要使用dtb 档案的机种为DS920 跟DS1621+ 两款,全部都编译成功,也都具有acpid 功能
同时,需要注意的是,编译一次后如需再次编译,删除custom/extensions里面的redpill-boot-wait目录!!!

部分引导和解码sh:链接: https://pan.baidu.com/s/1Eikh5eYCG4OPJQZ44SbQQw?pwd=p4ir 提取码: p4ir 复制这段内容后打开百度网盘手机App,操作更方便哦

0

评论区