XPEnoboot 5.2 驱动编译 & Mplayer 玩法
本帖最后由 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
本帖最后由 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楼
{:8_233:}好厉害!
问一下楼主,我用上网本装的黑群,能不能编译个电池管理的驱动,显示电池电量? {:8_225:}表示我想搞个32位的。, 厉害!谢谢分享! watermoon 发表于 2016-8-22 18:15
好厉害!
问一下楼主,我用上网本装的黑群,能不能编译个电池管理的驱动,显示电池电量? ...
如果linux内核里有相应的驱动,或者相应电脑品牌或芯片的网站能找到对应的linux版驱动,就可以。不过你还要考虑以什么方式查看电量的问题,如果只是shell下面,可能直接使用或是单独安装相应的命令就可以,如果想在DSM的web界面下使用,应该还要自己编写相应的软件吧。
还有,nas用电池供电,还真是不多见啊。 本帖最后由 svdztn 于 2016-12-1 12:00 编辑
再来说说把驱动编译进内核的方式。
首先,当然是在内核选项中把相应驱动选项设置成“=y”了
具体操作:
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目录下(也可以自己定义)
编译内核
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版都可用,但这里不作保证。
再提醒一句,数据无价,大家谨慎操作,由此导致的各种问题本人均不负责,哈哈。
个人水平有限,难免有出错之处,望大家见谅,大神指正。
Orz
看也看不懂啊,只好膜拜。 个人觉得最难大家的还是网卡驱动不了的话黑裙就抓瞎了.................. 谢谢分享!! config.gz,如何使用? avivi 发表于 2016-8-24 17:11
config.gz,如何使用?
解压出来,重名名为 .config 放到内核源码目录下,这个是5967.1版内核的配置文件 群晖新手。。没丝瓜下载不了附件 支持 如果按照你这么说 那么 笔记本的无线网卡 都可以搞定了
用itx 的板子 然后上笔记本的硬盘 接着无线网卡 那么 啥都搞定了
太高深,表示看不懂。纯支持。 如果有大大能搞一个win里用的懒人工具包就好了,对我这个门外汉来说,还是看不懂呢,但还是谢谢楼主! 板载usb3.0芯片不被5592支持,靠这个也能解决吧? msseed 发表于 2016-8-25 20:55
支持 如果按照你这么说 那么 笔记本的无线网卡 都可以搞定了
用itx 的板子 然后上笔记本的硬盘 接着无线网 ...
重新编译内核的话,理论上,只要内核支持,且有驱动代码,驱动层面的问题都可以解决。如果要用起来,当然还需要api库和应用软件的配套。 evilofstock 发表于 2016-8-26 07:49
板载usb3.0芯片不被5592支持,靠这个也能解决吧?
你可以打开内核选项看一下,并查找下USB3.0驱动相关资料
楼主可以发一下提取rd.cpio的方法吗?