天气与日历 切换到宽版
扫描二维码关注官方公众号
123下一页
返回列表 发布新帖

[讨论/分享] XPEnoboot 5.2 驱动编译 & Mplayer 玩法

15504 45
发表于 2016-8-22 18:08:00 | 显示全部楼层 阅读模式

来吧兄弟,一起玩一起讨论!

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

×
本帖最后由 svdztn 于 2016-10-18 10:14 编辑

首先,感谢XPEnoboot制作组的大神们的工作和分享精神,让我们能在更多的平台上使用DSM。

一直苦于板载声卡不能用,最近,XPEnoboot 5.2-5967.1发布的同时,制作组放出了相应的内核源码,这样就可以编译我们自己的驱动了。
DSM 5.2 使用的内核版本号为3.10.35,理论上此次放出的内核对DSM 5.2版本均可使用。(我只测试了5529和5967,其他版本不保证一定可用,测试过的朋友请告知下)
驱动加载有两种方式:一种是编译进内核,另一种是编译成模块,在内核外加载。
对于这两种方式,经测试均可。

编译进内核的方式,需要重新编译内核,然后替换启动U盘中的zImage内核映像,相比加载模块来说风险更大些,所以我们后面再介绍此种方式。

编译成模块的方式,只需要编译我们需要的驱动,然后放进NAS中加载即可,更方便、安全。
就具体编译方式来说,也有两种:在内核代码下,使用make modules编译;自己下载相应的驱动代码,单独编译。其实这两种方式是一样的,比如我这次编译的声卡驱动,内核代码中本来就有,只需要把menuconfig中相应选项打开,编译一下就可以了,但如果你需要的驱动内核中没有,那就只能自己单独编译了。

下面以编译板载声卡驱动为例,介绍编译驱动的过程,编译其他驱动也与之类似。

1.编译环境搭建
(参考http://xpenology.com/wiki/en/building_xpenology
我使用的Ubuntu 12.10虚拟机(可以用更新一点的版本,老版本的源不好找)
最好再装上VMware Tools,方便使用。

安装一些工具。(有几个我觉得没啥必要)
sudo apt-get install git libc6-i386 build-essential libncurses5-dev

下载群晖官方放出的GCC编译链,我用的是:DSM Beta 5.2 Tool Chains -> Intel x86 Linux 3.10.35 (Bromolow) -> bromolow-gcc473_glibc217_x86_64-GPL
http://sourceforge.net/projects/dsgpl/files/
使用 tar -Jxf 把gcc包解压到自己喜欢的位置,(我放到/usr/local/下)
如果以后使用gcc时不想每次都用绝对路径,可以将 x86_64-pc-linux-gnu/bin 添加进环境变量$PATH中

下载XPEnoboot5.2内核源码,http://xpenology.com/forum/viewtopic.php?f=2&t=5026
使用 tar -Jxf 把源码包解压到自己喜欢的位置,(我放到/usr/src/下)


喜欢的话,可以从装好的XPEnology5.2-5967中,/proc目录下,将config.gz复制出来,这就是XPEnoboot-5967的内核配置文件。(后面我会放到附件里)
解压后重命名为 ".config",放到内核源码目录下

2.编译驱动
在内核源码目录下

编辑配置文件(未编辑环境变量的,使用类似 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- 的绝对路径)
make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu- menuconfig
将自己需要的驱动设置为“M”

编译驱动
make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu- modules

编译完成后,生成的.ko文件分别在各自的源码目录下
可使用 find -name *.ko 查找其位置
之后可以手动或使用脚本将其复制到同一目录下

2*.
单独下载驱动代码包编译

在解压好的驱动代码目录下运行./configure 配置相应参数,如输出路径,依赖路径,编译器等
如我编译ens1371声卡驱动
./configure --prefix=[.ko文件的输出路径] --with-kernel=/usr/src/linux-xpenoboot-5.2.5967.1 --with-cards=ens1371 --with-cross=x86_64-pc-linux-gnu-

编译
make

导出驱动
make install

单独编译的好处是生成的ko文件可以直接输出到指定目录下
(或许在内核目录下编译也可以,高手请指教)

3.目标平台加载驱动
把相应的ko文件传到nas的/lib/modules/[自定义一个目录]/
注意,一定要在modules下新建一个目录,对于我编译的声卡驱动来说,生成新的snd.ko文件,但nas中原来就有此文件,但其中缺少对新编译驱动的支持,如果直接替换,每次关机重启后,新的snd.ko文件会被启动U盘中原来的snd.ko文件覆盖。


对于我编译的声卡驱动
lsmod |grep snd
如果snd.ko已经被加载,就使用rmmod将它以及依赖它的模块卸载
使用modprobe 加载我们编译好的新驱动
比如:我编译的虚拟机中使用的声卡驱动为snd-ens1371.ko
modprobe snd-ens1371.ko
就可以将它以及它依赖的驱动加载上


查看/dev/snd目录下多了 pcmC0D0c,pcmC0D0p等,几个文件,就说明声卡驱动已经加载上了。
也可以使用lspci -v 查看声卡信息

至此,声卡驱动编译,加载完成,但想让它出声音,还需要alsa-lib和alsa-utils,如果想听歌或是流媒体的话,还需要播放器,我使用的是mplayer,每天定时播放电台广播,用来当闹钟,嘿嘿。
这些就后面开贴再做介绍吧。



XPEnologyXPEnology

config.gz

25.69 KB, 下载次数: 28, 下载积分: 丝瓜 -5 条

XPEnoboot 5.2-5967.1内核配置文件

评论45

svdztn楼主Lv.5 发表于 2016-8-22 18:08:24 | 显示全部楼层
本帖最后由 svdztn 于 2016-10-28 14:51 编辑

占楼,待续。。。

补充内容 (2016-8-23 15:00):
貌似不能重新编辑帖子,只能补充,哎。。。

补充内容 (2016-8-23 15:06):
内核编译部分见7楼

补充内容 (2016-9-14 14:15):
rd.cpio获取方法,见21楼

补充内容 (2016-9-14 16:14):
alsa-lib、alsa-utils编译,见30楼

补充内容:
mplayer编译,见39楼

补充内容:
mplayer的玩法,和一些脚本,见40、41楼

补充内容:
mplayer随机播放修改,见42楼


回复 点赞

使用道具 举报

watermoonVIPLv.9 发表于 2016-8-22 18:15:19 | 显示全部楼层
好厉害!
问一下楼主,我用上网本装的黑群,能不能编译个电池管理的驱动,显示电池电量?
回复 点赞

使用道具 举报

liangzhukunLv.3互助团队 发表于 2016-8-23 00:34:48 | 显示全部楼层
表示我想搞个32位的。,
回复 点赞

使用道具 举报

liusongLv.7 发表于 2016-8-23 06:03:26 | 显示全部楼层
厉害!谢谢分享!
回复 点赞

使用道具 举报

svdztn楼主Lv.5 发表于 2016-8-23 13:43:18 | 显示全部楼层
watermoon 发表于 2016-8-22 18:15
好厉害!
问一下楼主,我用上网本装的黑群,能不能编译个电池管理的驱动,显示电池电量? ...

如果linux内核里有相应的驱动,或者相应电脑品牌或芯片的网站能找到对应的linux版驱动,就可以。不过你还要考虑以什么方式查看电量的问题,如果只是shell下面,可能直接使用或是单独安装相应的命令就可以,如果想在DSM的web界面下使用,应该还要自己编写相应的软件吧。

还有,nas用电池供电,还真是不多见啊。
回复 点赞

使用道具 举报

svdztn楼主Lv.5 发表于 2016-8-23 15:02:40 | 显示全部楼层
本帖最后由 svdztn 于 2016-12-1 12:00 编辑

再来说说把驱动编译进内核的方式。

首先,当然是在内核选项中把相应驱动选项设置成“=y”了
具体操作:
  1. make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu- menuconfig
复制代码
将相应选项设置成 [ * ]

设置好之后,还不能直接编译内核,因为这时候编译出来的内核是不能把硬盘的上的DSM引导起来的(当然也编译不过去。。。),因为还缺少了一个很重要的东西,就是initrd。
initrd是一个磁盘映像,系统启动时,引导程序会将它加载到内存中,内核会先将它加载成根文件系统,执行其中的init脚本,在正式的文件系统加载前,先加载一些必要的驱动。
其实官方的系统安装包.pat文件里,就有一个rd.gz文件,这就是压缩了的initrd文件,它解压出来的格式是cpio。通过对比会发现,XPEnoboot的cpio文件比官方的cpio文件中增加了很多驱动程序(当然也修改了部分初始化代码和驱动),这正是XPEnoboot支持更多的平台和硬件的原因。
XPEnoboot将cpio文件和内核映像一起压缩到了zImage中,这也是XPEnoboot中zImage文件比.pat文件里的大很多的原因。

在内核选项,
General setup ---> Initramfs source file(s)
选项中,XPEnoboot设置为../../tmp/rd.cpio
可以看出,制作组是先把rd.cpio映像制作好,在编译内核时直接加载的。

可是,制作组并未单独放出rd.cpio文件,我们就只能通过解压XPEnoboot中的zImage文件获得了。
使用的工具是7-Zip和UltraEdit,主要就是去掉文件头和尾的一些额外数据。
现在级别不够,貌似发不了这么大的附件,以后可以的话我会把扒出来的rd.cpio文件发上来。

解压出rd.cpio文件后,放到/usr/tmp目录下(也可以自己定义)
编译内核
  1. make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu- bzImage
复制代码
生成的压缩内核文件bzImage在arch/x86/boot目录下
重命名为zImage,用其替换XPEnoboot启动镜像中的zImage文件即可。

经测试XPEnology5.2-5592.2 和 5967.1 均成功启动,理论上5.2版都可用,但这里不作保证。
再提醒一句,数据无价,大家谨慎操作,由此导致的各种问题本人均不负责,哈哈。
个人水平有限,难免有出错之处,望大家见谅,大神指正。




回复 点赞

使用道具 举报

watermoonVIPLv.9 发表于 2016-8-23 15:14:57 | 显示全部楼层
Orz
看也看不懂啊,只好膜拜。
回复 点赞

使用道具 举报

byteway110Lv.10 发表于 2016-8-23 17:33:17 | 显示全部楼层
个人觉得最难大家的还是网卡驱动不了的话黑裙就抓瞎了..................
回复 点赞

使用道具 举报

aviviLv.5 发表于 2016-8-24 17:08:30 | 显示全部楼层
谢谢分享!!
回复 点赞

使用道具 举报

aviviLv.5 发表于 2016-8-24 17:11:19 | 显示全部楼层
config.gz,如何使用?
回复 点赞

使用道具 举报

svdztn楼主Lv.5 发表于 2016-8-24 17:19:53 | 显示全部楼层
avivi 发表于 2016-8-24 17:11
config.gz,如何使用?

解压出来,重名名为 .config 放到内核源码目录下,这个是5967.1版内核的配置文件
回复 点赞

使用道具 举报

东莞丨玩家国度Lv.1 发表于 2016-8-24 18:24:30 | 显示全部楼层
群晖新手。。没丝瓜下载不了附件
回复 点赞

使用道具 举报

msseedLv.10 发表于 2016-8-25 20:55:18 | 显示全部楼层
支持 如果按照你这么说 那么 笔记本的无线网卡 都可以搞定了
用itx 的板子 然后上笔记本的硬盘 接着无线网卡 那么 啥都搞定了
回复 点赞

使用道具 举报

shenkuantipangLv.4 发表于 2016-8-25 22:11:50 | 显示全部楼层
太高深,表示看不懂。纯支持。
回复 点赞

使用道具 举报

na008Lv.10 发表于 2016-8-25 22:32:06 | 显示全部楼层
如果有大大能搞一个win里用的懒人工具包就好了,对我这个门外汉来说,还是看不懂呢,但还是谢谢楼主!
回复 点赞

使用道具 举报

evilofstockLv.10 发表于 2016-8-26 07:49:40 | 显示全部楼层
板载usb3.0芯片不被5592支持,靠这个也能解决吧?
回复 点赞

使用道具 举报

svdztn楼主Lv.5 发表于 2016-8-26 09:26:57 | 显示全部楼层
msseed 发表于 2016-8-25 20:55
支持 如果按照你这么说 那么 笔记本的无线网卡 都可以搞定了
用itx 的板子 然后上笔记本的硬盘 接着无线网 ...

重新编译内核的话,理论上,只要内核支持,且有驱动代码,驱动层面的问题都可以解决。如果要用起来,当然还需要api库和应用软件的配套。
回复 点赞

使用道具 举报

svdztn楼主Lv.5 发表于 2016-8-26 09:41:19 | 显示全部楼层
evilofstock 发表于 2016-8-26 07:49
板载usb3.0芯片不被5592支持,靠这个也能解决吧?

你可以打开内核选项看一下,并查找下USB3.0驱动相关资料
QQ截图20160826093911.jpg
回复 点赞

使用道具 举报

likewhmLv.3 发表于 2016-8-27 15:37:12 | 显示全部楼层
楼主可以发一下提取rd.cpio的方法吗?
回复 点赞

使用道具 举报

回复

懒得打字嘛,点击右侧快捷回复 【本站酷狼4T,750元】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

投诉/建议联系

support@gebi1.cn

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 隔壁网 版权所有 All Rights Reserved. 粤ICP备14056481号-1
关灯 快速发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表