找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问移动社区

查看: 33016|回复: 134

[分享] 为群晖DSM增加自己需要的HBA卡驱动

 火... [复制链接]
  • TA的每日心情
    慵懒
    2014-3-25 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    186

    丝瓜

    29

    回帖

    1

    精华

    普通用户

    发表于 2013-4-29 03:26:01 | 显示全部楼层 |阅读模式

    注册后可查看完整内容!

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    本帖最后由 suqianstone 于 2013-4-29 03:52 编辑

    首先,我语言组织能力很差,如果有不明白的,欢迎提问,请勿骂街。另外要感谢已经放出4.1和4.2破解的国外高人,本文仅仅是翻译个补充原文,且用另外投机取巧方式实现驱动加载。适用于任何可以以insmod方式加载驱动的任何硬件,大家有什么网卡,阵列卡的都可以上啦。欢迎大家试验反馈。


    Part 1. 准备工作
    Linux 系统  x86_64 (架构) (本文采用Ubuntu 12.10)
    安装一些必要软件: git, libc6-i386, ncurses, build-essential archivemount
    1. sudo apt-get install git libc6-i386 build-essential libncurses5-dev archivemount
    复制代码
    http://sourceforge.net/projects/dsgpl/files/ 下载DSM 4.1 tool chain文件解压至 /usr/local 下. 版本为“Intel x86 Linux 3.2.11 (Bromolow)” ,压缩包文件名为 gcc420_glibc236_x64_bromolow-GPL.tgz.
    https://github.com/andy928/xpenology复制XPEnology linux 3.x内核源代码
    1. sudo git clone https://github.com/andy928/xpenology.git linux-3.x
    复制代码
    Part 2. 编译内核
    如果你一些非官方支持的硬件,可以将其编译进内核,用如下命令编辑您需要的硬件配置:(我这里选了我自己的LSI 1068e SAS HBA卡【刷成了IT模式】)
    1. sudo make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- menuconfig
    复制代码
    编译内核
    1. sudo make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- modules
    复制代码
    这步过后,在linux-3.x/drivers下有我们刚才第1小步选择过的HBA 卡模块了。总计是3个,分别是mptbase.ko mptscsih.ko mptsas.ko,复制出去备用
    生成 bzImage文件:(我这里采用了将驱动以模块insmod方式载入。所以这个步骤已经不是必须的了)
    1. make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- bzImage
    复制代码
    当编译完成,会在 “linux-3.x/arch/x86/boot/”目录下生成“bzImage”文件,您需要将其修改名称为“zImage”
    Part 3. Synobios 文件破解
    首先,您需要从rd.gz 或者 hda1.tgz文件内复制一份synobios.ko 文件出来,他们可以从官方的DSM pat文件内获得,windows环境请将.pat后缀的文件修改为.rar,使用winrar打开即可得到rd.tgz和hda1.tgz文件。
    这里需要说明一下,大家现在所安装的黑群晖,实际上synobios.ko文件已经修改过了,所以我就没有再自己去下载官方的pat文件去编辑,而是直接使用了破解过的dsm pat 文件里的rd.gz 和 hda1.tgz,只是将我需要的SAS HBA卡驱动加进上述两个文件的lib/modules目录下。(多说一句,应该只加进rd.gz文件里即可),所以下面这些如果是跟我一样做法的网友就无需再继续修改了。可以跳过这个修改synobios.ko文件,同时忽略下文中任何关于synobios.ko的相关内容.......
    Let SetMicropId() function return a valid NAS ID
    .text:0000000000002370                                         public SetMicropId
    .text:0000000000002370                         SetMicropId     proc near               ; DATA XREF: .data:synobios_ops_0 o
    .text:0000000000002370
    .text:0000000000002370                         var_18          = qword ptr -18h
    .text:0000000000002370
    .text:0000000000002370 48 83 EC 18                             sub     rsp, 18h
    .text:0000000000002374 0F B6 15 1D 33 00 00                    movzx   edx, cs:syno_module+8
    .text:000000000000237B 0F B6 05 17 33 00 00                    movzx   eax, cs:syno_module+9
    .text:0000000000002382 48 C7 04 24 00 00 00 00                 mov     [rsp+18h+var_18], 0
    .text:000000000000238A C0 EA 04                                shr     dl, 4
    .text:000000000000238D 83 E0 0F                                and     eax, 0Fh
    .text:0000000000002390 48 C1 E0 04                             shl     rax, 4
    .text:0000000000002394 0F B6 D2                                movzx   edx, dl
    .text:0000000000002397 48 09 D0                                or      rax, rdx
    .text:000000000000239A 04 01                                   add     al, 1
    .text:000000000000239C 74 15                                   jz      short loc_23B3
    .text:000000000000239E 31 D2                                   xor     edx, edx
    .text:00000000000023A0 81 3D F2 32 00 00 FF 00+                cmp     cs:MpId_20729, 0FFh
    .text:00000000000023AA 74 1C                                   jz      short loc_23C8
    .text:00000000000023AC                         loc_23AC:                               ; CODE XREF:
    .text:00000000000023AC 89 D0                                   mov     eax, edx
    .text:00000000000023AE 48 83 C4 18                             add     rsp, 18h
    .text:00000000000023B2 C3                                      retn
    .text:00000000000023B3                         loc_23B3:                               ; CODE XREF:
    .text:00000000000023B3 48 C7 C7 FE 45 00 00                    mov     rdi, offset aGetMicropFail ; "get microp fail\n"
    .text:00000000000023BA 31 C0                                   xor     eax, eax
    .text:00000000000023BC E8 9B 42 00 00                          call    printk
    .text:00000000000023C1 BA FF FF FF FF                          mov     edx, 0FFFFFFFFh
    .text:00000000000023C6 EB E4                                   jmp     short loc_23AC
    .text:00000000000023C8                         loc_23C8:                               ; CODE XREF:
    .text:00000000000023C8 48 C7 C6 13 46 00 00                    mov     rsi, offset aR  ; "R"
    .text:00000000000023CF 48 89 E2                                mov     rdx, rsp
    .text:00000000000023D2 B9 08 00 00 00                          mov     ecx, 8
    .text:00000000000023D7 48 89 F7                                mov     rdi, rsi
    .text:00000000000023DA E8 81 FE FF FF                          call    ReadUart
    .text:00000000000023DF 85 C0                                   test    eax, eax
    .text:00000000000023E1 BA FF FF FF FF                          mov     edx, 0FFFFFFFFh
    .text:00000000000023E6 75 C4                                   jnz     short loc_23AC
    .text:00000000000023E8 0F BE 04 24                             movsx   eax, byte ptr [rsp+18h+var_18]
    .text:00000000000023EC 31 D2                                   xor     edx, edx
    .text:00000000000023EE 89 05 A8 32 00 00                       mov     cs:MpId_20729, eax
    .text:00000000000023F4 EB B6                                   jmp     short loc_23AC
    .text:00000000000023F4                         SetMicropId     endp
    Code at offset 000023E6 must be changed to
    .text:00000000000023E6 48 31 C0                                xor rax, rax
    .text:00000000000023E9 B0 42                                   mov al, 042h
    .text:00000000000023EB 90                                      nop
    Full list of available NAS ID's is enumerated as SYNO_MICROP_ID and it can be obtained in “linux-3.x/include/linux/synobios.h” file.
    Switching off “buzzer stop button pressed” logging message:
    .text:0000000000000395 80 7C 24 17 00                          cmp     [rsp+28h+var_11], 0
    .text:000000000000039A 74 D4                                   jz      short loc_370
    to
    .text:0000000000000395 80 7C 24 17 00                          cmp     [rsp+28h+var_11], 0
    .text:000000000000039A EB D4                                   jmp     short loc_370
    Part 4.生成rd.gz和DSM PAT文件
    DSM_DS3612xs_2668.pat file, 里大概有如下这些文件,
            checksum.syno    // files' checksums
            grub_cksum.syno  // zImage and rd.gz checksums that are used in GRUB
            hda1.tgz         // system image
            rd.gz            // ram disk image
            updater          // WEB version of the installer (instead of Synology Assistent)
            VERSION          // DSM version
            zImage           // kernel image
    其中rd.gz文件在我们安装的黑群晖引导盘第一分区,第二分区内都有,同时在DSM文件里也会有一份,3个文件完全一样。我们在得到rd.gz后可以复制该文件至引导盘的两个分区,然后再把该文件替换至DSM PAT文件包内。

    首先将 synobios.ko 文件替换至RAM disk镜像中. 步骤:
    1.         sudo mkdir /mnt/ramdisk
    2.         sudo gunzip /tmp/rd.gz
    3.         sudo mount -t ext2 -o loop rd /mnt/ramdisk
    复制代码
    复制编辑好的synobios.ko 到 /mnt/ramdisk/lib/modules下
    (还记得我们第一步里编译得到的1068e的驱动吗?现在一样复制到上述目录下来)

    编辑/mnt/ramdisk下linuxrc.syno文件,在第一个段落里增加几个语句,注意载入顺序,不要问我为什么,请参考您扩展卡的官方驱动说明文件。
    if [ "bromolow" = "$UniqueRD" ]; then
            insmod /lib/modules/e1000.ko
            insmod /lib/modules/r8168.ko
    insmod /lib/modules/mptbase.ko
                    insmod /lib/modules/mptscsih.ko
                    insmod /lib/modules/mptsas.ko

    fi
    看到这里,您应该明白,为什么这个破解的版本,只支持有限的网卡了吧?
    1. sudo umount /mnt/ramdisk
    2. sudo gzip /tmp/rd
    复制代码
    得到rd.gz备用
    将rd.gz复制至USB引导盘的第1跟第2分区
    1. sudo mkdir /mnt/hdd
    2. sudo archivemount /tmp/hda1.tgz /mnt/hdd
    复制代码
    复制修改过的synobios.ko 到 /mnt/hdd/lib/modules下,复制前面的3个ko文件到/mnt/hdd/lib/modules (个人觉得没必要,没测试)
    1. sudo umount /mnt/hdd
    复制代码
    在/tmp目录下将hda1.tgz 改名为 hda1,并使用xz压缩
    1. sudo mv /tmp/hda1.tgz /tmp/hda1
    2. xz -z9 /tmp/hda1
    复制代码
    将hda1.xz文件改名为hda1.tgz
    生成cksum校验文件
    1. sudo git clone https://github.com/andy928/synochecksum.git synochecksum
    2. cd synochecksum
    3. sudo make
    4. sudo chmod +x synochecksum-emu1
    复制代码
    新建一个目录,将我们从破解过的DSM PAT文件包里获得的文件全部集中在一起,用前面得到的rd.gz和hda1.tgz文件替换同名文件。
    在当面目录下
    1. sudo ./synochecksum-emu1 *
    复制代码
    将显示的结果编辑进checksum.syno,删除不必要的行,格式类似如下:
    3766610713 196 VERSION 211 258
    2107446070 64153468 hda1.tgz 72145747 564
    4294967295 2503792 zImage 4062935 356
    113736571 5966614 rd.gz 8338569 693
    3449851895 3189108 updater 5632471 361
    1629449639 23207883 indexdb.tgz 40490275 440
    #Synocksum 298516414 388040049 1960
    完成后移除synochecksum-emu1文件,开始打包
    1. tar cvf system.tgz *
    复制代码
    将得的system.tgz文件改名为PAT后缀。

    这样,您就成功的替换了usb引导分区中的rd.gz,也重新生成了DSM的pat文件包了。
    重启群晖后您使用SSH方式登录后,使用命令lsmod检查模块是否正确加载。
    希望这篇教程能举一反三,让大家增加自己需要的驱动。您可以以内核方式,也可以按照我的insmod方式载入模式。抛砖引玉,希望大家喜欢,有问题可以提问。在这里感谢大力帮助我试验的"想得太美"同学。
  • TA的每日心情
    慵懒
    2014-3-25 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    186

    丝瓜

    29

    回帖

    1

    精华

    普通用户

     楼主| 发表于 2013-4-29 03:34:36 | 显示全部楼层
    1.jpg
    回复

    使用道具 举报

  • TA的每日心情

    2014-5-29 00:28
  • 签到天数: 163 天

    [LV.7]常住居民III

    783

    丝瓜

    456

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 06:08:18 | 显示全部楼层
    沙发啊,顶楼主,终于看到教程了,谢谢啦
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-28 13:14
  • 签到天数: 66 天

    [LV.6]常住居民II

    822

    丝瓜

    312

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 10:43:09 | 显示全部楼层
    顶楼主 步骤真详细

    要好好学习一下
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-29 07:17
  • 签到天数: 100 天

    [LV.6]常住居民II

    1105

    丝瓜

    603

    回帖

    1

    精华

    贡献会员

    Medal No.1Medal No.2Medal No.3Medal No.4Medal No.5

    发表于 2013-4-29 10:56:27 | 显示全部楼层
    非常感谢楼主啊,hba卡有希望了
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-5-26 09:14
  • 签到天数: 125 天

    [LV.7]常住居民III

    1727

    丝瓜

    699

    回帖

    1

    精华

    贡献会员

    Medal No.1Medal No.2Medal No.3Medal No.4Medal No.5

    发表于 2013-4-29 10:57:10 | 显示全部楼层
    很详细的教程 多看几遍 慢慢消化
    回复

    使用道具 举报

    头像被屏蔽
  • TA的每日心情

    2014-5-27 08:57
  • 签到天数: 58 天

    [LV.5]常住居民I

    504

    丝瓜

    268

    回帖

    0

    精华

    禁止发言

    发表于 2013-4-29 11:08:00 | 显示全部楼层
    一大早就看到这么给力的教程。。
    按照这个方法应该可以把大多数常用硬件的驱动都加进去做一个整合包了
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-5-26 08:49
  • 签到天数: 37 天

    [LV.5]常住居民I

    351

    丝瓜

    114

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 11:10:10 来自手机 | 显示全部楼层
    凌晨3点啊
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-9-15 19:33
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    1042

    丝瓜

    187

    回帖

    1

    精华

    贡献会员

    Medal No.1Medal No.2Medal No.3Medal No.4Medal No.5

    发表于 2013-4-29 12:21:55 | 显示全部楼层
    楼主乃真高人,厉害!感谢分享教程!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-27 11:41
  • 签到天数: 147 天

    [LV.7]常住居民III

    1050

    丝瓜

    659

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 13:33:15 来自手机 | 显示全部楼层
    比较详细的教程了。
    回复

    使用道具 举报

    头像被屏蔽
  • TA的每日心情
    开心
    2014-5-28 09:07
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    158

    丝瓜

    45

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 21:22:10 来自手机 | 显示全部楼层
    提示: 该帖被管理员或版主屏蔽
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-3-25 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    186

    丝瓜

    29

    回帖

    1

    精华

    普通用户

     楼主| 发表于 2013-4-29 21:28:21 | 显示全部楼层

    不客气,我希望能有闲时间的朋友能把常见的各种HBA卡,各种网卡驱动编译出来,加进rd.gz重新打包跟大家分享。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-5-23 14:59
  • 签到天数: 110 天

    [LV.6]常住居民II

    553

    丝瓜

    131

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 21:37:50 | 显示全部楼层
    楼主真的是大牛啊
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-1-21 22:08
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    314

    丝瓜

    43

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 21:56:53 | 显示全部楼层
    sas卡当硬盘扩展卡很好用 希望lz造福大家 呵呵 我手头上只有m1015和m5015 需要测试的时候通知一声
    回复

    使用道具 举报

  • TA的每日心情

    2014-5-12 18:20
  • 签到天数: 68 天

    [LV.6]常住居民II

    243

    丝瓜

    175

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 23:36:48 | 显示全部楼层
    想得太美 不会是ROS和m0n0china里的吧?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-27 11:41
  • 签到天数: 147 天

    [LV.7]常住居民III

    1050

    丝瓜

    659

    回帖

    0

    精华

    普通用户

    发表于 2013-4-29 23:51:45 来自手机 | 显示全部楼层
    suqianstone 发表于 2013-4-29 21:28
    不客气,我希望能有闲时间的朋友能把常见的各种HBA卡,各种网卡驱动编译出来,加进rd.gz重新打包跟大家分 ...

    LZ,希望你在空闲的时间,编译加上BCM的57788网卡,好些人需要。
    万分感谢!
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-5-28 01:25
  • 签到天数: 173 天

    [LV.7]常住居民III

    6675

    丝瓜

    962

    回帖

    9

    精华

    贡献会员

    Medal No.1Medal No.2Medal No.3Medal No.4Medal No.5Medal No.6Medal No.7Medal No.8Medal No.9Medal No.10

    发表于 2013-4-30 02:57:41 | 显示全部楼层
    HBA driver insmod 進去, 但能用嗎?
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-3-25 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    186

    丝瓜

    29

    回帖

    1

    精华

    普通用户

     楼主| 发表于 2013-4-30 08:06:14 | 显示全部楼层
    fyjsy 发表于 2013-4-29 23:36
    想得太美 不会是ROS和m0n0china里的吧?

    恭喜你,答对了,我就是routerclub的另外一个叫zsk2000
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-5-29 08:39
  • 签到天数: 146 天

    [LV.7]常住居民III

    945

    丝瓜

    262

    回帖

    0

    精华

    普通用户

    发表于 2013-4-30 11:12:54 | 显示全部楼层
    高手终于现身了,支持
    回复

    使用道具 举报

  • TA的每日心情

    2014-5-28 19:33
  • 签到天数: 74 天

    [LV.6]常住居民II

    406

    丝瓜

    862

    回帖

    0

    精华

    普通用户

    发表于 2013-5-1 00:51:14 | 显示全部楼层
    汇编是一窍不通。楼主乃真高人,厉害!
    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|第一纳斯网 ( 粤ICP备19046372号 )

    GMT+8, 2024-4-19 06:41

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表