• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |
花生壳

建立一个qnap编译环境系统

威联通 QNAP  / 教程分享  / 只看大图  / 正序浏览   © 著作权归作者本人所有

#楼主# 2021-6-21 20:26

跳转到指定楼层
前言
  因为个人原因不再折腾qnap的系统了,本来温控驱动算最后一帖了。不过想了下,把不涉及qnap破解的 我的建立qnap编译环境系统的过程 也发给大家,大家可以继续研究下去。当然我也是刚接触Linux不久,也是个小白而已,很多不够专业,方法过程不是非常正确,如果你们有更好的办法或者指出我错误的地方,希望大家指出来,给后人少走弯路。

  先说说当初我为啥要建了一个qnap编译环境系统,不是可以交叉编译qnap的源码吗?交叉编译有很多的局限性,比如我们要移植nvidia amd的官方闭源驱动到qnap上就没办法了,比如要编译个自己定义的ffmpeg交叉编译移植到qnap上就会非常非常的麻烦。这些是我当初 编译移植jellyfin的过程中碰到的问题。我当时想,qnap官方应该有一个编译环境系统,可以在该环境下直接编译各种程序以及内核驱动,然后可以很方便的移植到qnap下,于是我尽量去模仿生成一个qnap编译环境系统。

  主要的思路在于gcc的版本,我记得qnap的gcc的4.9.2,debian8的gcc也是4.9.2,以debian8作为底版来建立。在debian8下编译qnap内核,生成 qnap的4.14..24版本内核bzImage来引导,那么在此基础的系统上编译的程序和驱动都可以无缝移植到qnap下运行了。


主要过程
建了虚拟机安装debian8,编译qnap对应版本源码,用编译好的内核进行引导系统


1.先建立个虚拟机安装debian8

esxi或者pve都可以,推荐用intel网卡和sata接口硬盘,当然你用实体机应该也可以.
在虚拟机上安装debian8,内核版本我记得应该3.6*,有点忘记了。不要安装带桌面的debian8,否则会有点麻烦,自己把桌面系统关了。
注意:Debian系统安装过程,选择分区模式,务必选择单个分区,不要选择其他诸如LVM之类分区模式
Debian8安装完成后自行安装openssh用root shell登陆,以下我全是root用户权限执行的。
修改/etc/apt/sources.list改成163的源
仅仅需要安装以下
apt-get install libncurses5-dev -y
apt-get install libelf-dev -y
apt-get install dpkg-dev -y
apt-get install dialog
apt-get install bc

其他程序尽量不要升级安装先

2.准备工作

2.1下载解压相关文件
我建了个/home/pcp目录
把qnap的x64工具链和对应版本的源码文件,自行下载
Cross Toolchain SDK (x86) 20180115.tgz
GPL_QTS-4.4.3-20201013_Kernel.tar.gz 版本你们随意,这里是4.4.3为例
上传到debian8的/home/pcp目录解压

2.2导入.config文件
然后把对应版本的qnap固件解压比如x72的4.4.3固件,把/lib/modules/.config拷贝出来,或者已经安装好的实体机对应版本的的/lib/modules/.config拷贝出来放入解压后kernel的目录。
我这里比如/home/pcp/GPL_QTS/src/linux-4.14/目录进行覆盖

这里需要特别注明的一点,每个机型每个版本的.config都是不一样的,尽量用该机型该版本的.config进行覆盖编译,否则有可能会这个版本可以使用,下个版本会出问题,qnap的4.4.*以上的版本问题都不大了,以前一个小版本的升级就会造成驱动不能跨级使用了

2.3修改Makefile
把/home/pcp/GPL_QTS/src/linux-4.14/目录里面的cflag_kernel_qnap.mk里面的2行参数传入Makefile文件里面的CFLAGS_MODULE CFLAGS_KERNEL
前面几个参数自己对应机型cpu修正一下
CFLAGS_KERNEL     = -DTSX72 -DQNAP -DX86_COFFEELAKE -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY*************
CFLAGS_MODULE   = -DTSX72 -DQNAP -DX86_COFFEELAKE -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY*************
x72机型 cpu类型COFFEELAKE(cpu类型可以参考一下这个目录里面都有/home/pcp/GPL_QTS/src/linux-4.14/QNAP/)
Model文件里面改成TS-X72

2.4设定交叉编译环境变量,路径按你自己的设定

export PATH=$PATH:/home/pcp/x86_64-QNAP-linux-gnu/cross-tools/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/pcp/x86_64-QNAP-linux-gnu/cross-tools/lib/
export CROSS_COMPILE=x86_64-QNAP-linux-gnu-
export ARCH=x86_64
export SUPPORT_FAST_BLOCK_CLONE=yes
export SUPPORT_TPC_CMD=yes

备注:
最后两条设定,export SUPPORT_FAST_BLOCK_CLONE=yes和export SUPPORT_TPC_CMD=yes
其实我当初的解决办法是(如果上述环境变量指定无效导致报错可以一试)
修改/drivers/target/Makefile

# QNAP codes (Fast Block Clone)
ifeq ($(SUPPORT_FAST_BLOCK_CLONE),yes)
target_core_mod-$(CONFIG_MACH_QNAPTS)        += qnap/target_core_qfbc.o
endif

# QNAP codes (ODX)
ifeq ($(SUPPORT_TPC_CMD),yes)
target_core_mod-$(CONFIG_MACH_QNAPTS)        += qnap/target_core_qodx.o \
                                           qnap/target_core_qodx_core.o \
                                           qnap/target_core_qodx_lib.o \
                                           qnap/target_core_qodx_rb.o \
                                           qnap/target_core_qodx_vpd.o
endif
4行红字全部删除或者注释掉,export SUPPORT_FAST_BLOCK_CLONE=yes没测试过,今年有一次偶然在qnap官方论坛看到过,你们可以试试

3。编译
执行
cd /home/pcp/GPL_QTS/src/linux-4.14/
make clean
make menuconfig图形界面
device drivers---network device support-ethernet drvier support

intel网卡

intel网卡


把intel 千兆网卡全部选中m,退出保存,否则启动会找不到网卡,连不上网

make deb-pkg -j12
我这里开12个线程或者自己改大小,漫长的等待编译完成后,在/home/pcp/GPL_QTS/src/linux-4.14/上级目录生个数个deb文件

deb

deb



4。安装deb
回到上级包含deb目录,安装deb前最好做个虚拟机快照或者备份
第一次编译应该是qnap-1_amd64.deb这样文件名
dpkg -i linux-headers-4.14.24-qnap_4.14.24-qnap-3_amd64.deb
dpkg -i linux-libc-dev_4.14.24-qnap-3_amd64.deb
dpkg -i linux-image-4.14.24-qnap_4.14.24-qnap-3_amd64.deb
grub-mkconfig -o /boot/grub/grub.cfg
depmod

完成后千万千万不要重启!!!!!启动必挂。
执行 apt-get -f install
修改/boot/grub/grub.cfg,插入红色部分
        echo        '载入 Linux 4.14.24-qnap ...'
        linux        /boot/vmlinuz-4.14.24-qnap root=/dev/sda1 console=tty0  ro initrd=/install/initrd.gz quiet
        echo        '载入初始化内存盘...'

        initrd        /boot/initrd.img-4.14.24-qnap

保存后重启


5.手动添加swap文件,暂时解决一下。
重启时,滚动代码发现启动过程未找到swap交换分区
sudo swapon -show
free -m

发现swap分区为空,我这里是建个swap文件解决

创建一个8G的swap
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8196k
sudo chmod 600 /swapfile

格式化交换分区
sudo mkswap /swapfile
sudo swapon /swapfile

修改/etc/fstab
把swap修改为

swap

swap

红框中改成如下
/swapfile swap swap defaults 0 0


再次查看
sudo swaposwapn -show
free -m

sudo sysctl vm.swappiness=10

再次reboot后正常。

6.关于glibc版本

进入系统后看一下内核版本已经是qnap-4.14.24,唯一的缺点是
glibc版本是2.19我记得,而qnap系统glibc应该是2.21
因为2.19和2.21直接差异非常小,基本我上我使用下来,几乎没有碰到问题
用低版本的2.19编译的程序和驱动都可以在2.21上运行

然后我就只能用笨办法解决了,只是不建议这么做

第一个是自己手动编译安装glibc2.21,中间过程很艰辛,其实编译不是问题,安装非常麻烦,几乎都是不提倡自己编译升级glibc
最后按照这个连接https://blog.51cto.com/u_13740724/2353937这个教程终于编译安装glibc2.21完成升级.

第二个办法是去
http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/下载编译好的glibc-2.21安装

这些只是我瞎折腾的东西,还是建议不要升级glibc。

关于glibc,希望有懂的网友下面补充一下.

7.最后

现在你可以在这个系统里面编译完成的程序都可以直接移植到qnap的4.14.24机型上运行,这个跟机型就无关了
如果有缺失的so库文件同步复制过去就行了,指定一下环境变量就行了。

驱动类的话 这个就要注意了
跟你当时使用的何种机型.config文件就要匹配了

比如你这个系统是用的4.4.3的x72机型的.config文件
你可以在这个编译amd nv等等官方闭源驱动,然后直接移植到4.4.3的x72机型上加载了。
又比如有些驱动是dkms方式的,都只要直接make就行了。
比如我前面的it87.c驱动直接make就行了

当然在编译的时候 如果
make bzImage -j12
生成的/home/pcp/GPL_QTS/src/linux-4.14/arch/x86/boot/bzImage,替换对应qnap机型版本固件2-3分区boot目录里面的bzImage,做自己的定制引导系统,当然还不是很完美,毕竟qnap没有提供完整的内核源码。


以上应该有很多不足或者错误的地方,你们继续吧

评分

参与人数 1云币 +50 贡献 +50 收起 理由
mojelly + 50 + 50 技术才是王道~其他神马都是浮云

查看全部评分

那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

0

精华

409

回帖

1000

积分

发烧玩家

Rank: 2

云币
0
贡献
30
活跃
643
精华
0
茄子jun 发表于 2024-2-21 14:18 来自 中国山东青岛

啥也不说了,感谢楼主分享哇!
回复 支持 反对 印象

使用道具 举报

0

精华

409

回帖

1000

积分

发烧玩家

Rank: 2

云币
0
贡献
30
活跃
643
精华
0
茄子jun 发表于 2024-2-21 14:18 来自 中国山东青岛

啥也不说了,感谢楼主分享哇!
回复 支持 反对 印象

使用道具 举报

0

精华

71

回帖

545

积分

入门用户

Rank: 1

云币
0
贡献
6
活跃
478
精华
0
jimmyUC 发表于 2023-1-2 21:37 来自 中国北京
smc326 发表于 2022-8-8 21:34
[  114.842206] ===== Laojifuli patch start =====
[  114.847948] it87: it87 driver version v1.0-52-g ...

5.0.10 的编译有没有其他坑啊?
我只是换成了4.5.3的linux_4.14, 编译就碰到了modpost 错误, 这东西在LZ 教程里就没有, 在Knat的那篇里也没有。卡住我了
回复 支持 反对 印象

使用道具 举报

0

精华

55

回帖

423

积分

入门用户

Rank: 1

云币
10
贡献
22
活跃
282
精华
0
smc326 发表于 2022-8-8 21:34 来自 中国辽宁盘锦
本帖最后由 smc326 于 2022-8-8 21:38 编辑

[  114.842206] ===== Laojifuli patch start =====
[  114.847948] it87: it87 driver version v1.0-52-g2b8b4fe
[  114.853693] it87: Found IT8689E chip at 0xa40, revision 1,Patched by R-mt for QNAP
[  114.861934] it87: Beeping is supported

这个是加载上了还是没加载上?
lsmod里面看不到,是不是就是没加载上?

点评

5.0.10 的编译有没有其他坑啊? 我只是换成了4.5.3的linux_4.14, 编译就碰到了modpost 错误, 这东西在LZ 教程里就没有, 在Knat的那篇里也没有。卡住我了  详情 回复 发表于 2023-1-2 21:37
回复 支持 反对 印象

使用道具 举报

0

精华

55

回帖

423

积分

入门用户

Rank: 1

云币
10
贡献
22
活跃
282
精华
0
smc326 发表于 2022-8-5 17:06 来自 中国辽宁盘锦
r-MT 发表于 2022-8-3 01:18
5.10环境最好用debian8.11,只为获得deb的话docker其实也可以
环境变量类似,改成自己目录

Linux version 5.10.60-qnap (root@debian) (x86_64-QNAP-linux-gnu-gcc (toolchain config: [gcc-4.9.2 binutils-2.25 glibc-2.21]) 4.9.2, GNU ld (GNU Binutils) 2.25) #1 SMP Fri Aug 5 09:29:04 CST 2022

编译成功了,跟大佬学习了,接下来研究uhd750和IT8689E这两个可恶的东西
回复 支持 反对 印象

使用道具 举报

0

精华

55

回帖

423

积分

入门用户

Rank: 1

云币
10
贡献
22
活跃
282
精华
0
smc326 发表于 2022-8-4 23:08 来自 中国辽宁盘锦
r-MT 发表于 2022-8-3 01:18
5.10环境最好用debian8.11,只为获得deb的话docker其实也可以
环境变量类似,改成自己目录

再三感谢  太详细了  下个系统先
回复 支持 反对 印象

使用道具 举报

2

精华

46

回帖

4524

积分

技术达人

Rank: 6Rank: 6

云币
301
贡献
320
活跃
2697
精华
2
r-MT 发表于 2022-8-3 01:18 来自 中国江苏无锡
本帖最后由 r-MT 于 2022-8-3 01:24 编辑
smc326 发表于 2022-8-2 20:41
还是同样问题,感觉环境有问题,用得威联通的虚拟机,可能有问题

5.10环境最好用debian8.11,只为获得deb的话docker其实也可以
  1. apt-get install libncurses5-dev libelf-dev dpkg-dev rsync kmod cpio -y
  2. apt-get install dialog bc bison flex libssl-dev autoconf -y
复制代码
环境变量类似,改成自己目录
  1. export PATH=$PATH:/root/CT/x86_64-QNAP-linux-gnu/cross-tools/bin
  2. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/CT/x86_64-QNAP-linux-gnu/cross-tools/lib
  3. export CROSS_COMPILE=x86_64-QNAP-linux-gnu-
  4. export ARCH=x86_64
复制代码

做个彻底clean
  1. make clean
  2. make mrproper
复制代码

从kernel_cfg目录里面cp conifg

  1. make menuconfig
复制代码
选中如下
Device Drivers > SCSI device support > QNAP SCSI device support
       
  • Virtual DISK support   
           
  •    Virtual DISK Extention
           
  • Virtual JBOD support


    用linux-5.10里面的cflag_kernel_qnap.mk修正makefile

    或者直接
    1. make CFLAGS_KERNEL='-DTSX72 -DQNAP -DX86_COFFEELAKE -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY -DQNAP_SEARCH_FILENAME_CASE_INSENSITIVE -DQNAP_HAL -DSUPPORT_VAAI -DQNAP_I2C_MV9235 -DSUPPORT_FAST_BLOCK_CLONE -DSUPPORT_LOGICAL_BLOCK_4KB_FROM_NAS_GUI -DSUPPORT_CONCURRENT_TASKS -DSUPPORT_SINGLE_INIT_LOGIN -DVIRTUAL_JBOD -DSUPPORT_VOLUME_BASED -DQTS_HA -DSUPPORT_TP -DNFS_VAAI -DNFS_VAAI_V3 -DQNAP_SNAPSHOT -DISCSI_MULTI_INIT_ACL -DUSE_BLKDEV_READPAGES -DUSE_BLKDEV_WRITEPAGES -DKSWAPD_FIX -DQNAP_KERNEL_STORAGE_V2' CFLAGS_MODULE='-DTSX72 -DQNAP -DX86_COFFEELAKE -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY -DQNAP_SEARCH_FILENAME_CASE_INSENSITIVE -DQNAP_HAL -DSUPPORT_VAAI -DQNAP_I2C_MV9235 -DSUPPORT_FAST_BLOCK_CLONE -DSUPPORT_LOGICAL_BLOCK_4KB_FROM_NAS_GUI -DSUPPORT_CONCURRENT_TASKS -DSUPPORT_SINGLE_INIT_LOGIN -DVIRTUAL_JBOD -DSUPPORT_VOLUME_BASED -DQTS_HA -DSUPPORT_TP -DNFS_VAAI -DNFS_VAAI_V3 -DQNAP_SNAPSHOT -DISCSI_MULTI_INIT_ACL -DUSE_BLKDEV_READPAGES -DUSE_BLKDEV_WRITEPAGES -DKSWAPD_FIX -DQNAP_KERNEL_STORAGE_V2 -DMODULE' deb-pkg -j$(nproc)
    复制代码
    其中X72和COFFEELAKE改成你的机型
    X72               参考固件/etc/config/uLinux.conf    Model = TS-X72
    COFFEELAKE 参考固件/etc/platform.conf            Platform = X86_COFFEELAKE



    需要注意的,qnap-5.10.60重启进系统后
    /usr/src/linux-headers-5.10.60-qnap/include/generated/autoconf.h会丢失

    会造成dkms驱动编译失败
    再次安装一下头文件,即可
    dpkg-i linux-headers-5.10.60-qnap_5.10.60-qnap-1_amd64.deb
    原因不明 懒得去找了

    其他跟4.x一样






  • 点评

    Linux version 5.10.60-qnap (root@debian) (x86_64-QNAP-linux-gnu-gcc (toolchain config: [gcc-4.9.2 binutils-2.25 glibc-2.21]) 4.9.2, GNU ld (GNU Binutils) 2.25) #1 SMP Fri Aug 5 09:29:04 CST 2022 编  详情 回复 发表于 2022-8-5 17:06
    再三感谢 太详细了 下个系统先  详情 回复 发表于 2022-8-4 23:08
    回复 支持 反对 印象

    使用道具 举报

    2

    精华

    46

    回帖

    4524

    积分

    技术达人

    Rank: 6Rank: 6

    云币
    301
    贡献
    320
    活跃
    2697
    精华
    2
    r-MT 发表于 2022-8-3 00:48 来自 中国江苏无锡
    smc326 发表于 2022-8-2 20:41
    还是同样问题,感觉环境有问题,用得威联通的虚拟机,可能有问题

    make -j12 bindeb-pkg

    用bindeb-pkg也可以
    回复 支持 反对 印象

    使用道具 举报

    0

    精华

    55

    回帖

    423

    积分

    入门用户

    Rank: 1

    云币
    10
    贡献
    22
    活跃
    282
    精华
    0
    smc326 发表于 2022-8-2 20:41 来自 中国辽宁盘锦
    本帖最后由 smc326 于 2022-8-2 20:43 编辑
    r-MT 发表于 2022-8-1 21:09
    5.10内核
    要如下依赖

    还是同样问题,感觉环境有问题,用得威联通的虚拟机,可能有问题
    回复 支持 反对 印象

    使用道具 举报

    123下一页
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回列表 搜索 官方QQ群
    懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图