[讨论/分享] 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楼 |
![]() 问一下楼主,我用上网本装的黑群,能不能编译个电池管理的驱动,显示电池电量? |
watermoon 发表于 2016-8-22 18:15 如果linux内核里有相应的驱动,或者相应电脑品牌或芯片的网站能找到对应的linux版驱动,就可以。不过你还要考虑以什么方式查看电量的问题,如果只是shell下面,可能直接使用或是单独安装相应的命令就可以,如果想在DSM的web界面下使用,应该还要自己编写相应的软件吧。 还有,nas用电池供电,还真是不多见啊。 |
本帖最后由 svdztn 于 2016-12-1 12:00 编辑
再来说说把驱动编译进内核的方式。 首先,当然是在内核选项中把相应驱动选项设置成“=y”了 具体操作:
设置好之后,还不能直接编译内核,因为这时候编译出来的内核是不能把硬盘的上的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目录下(也可以自己定义) 编译内核
重命名为zImage,用其替换XPEnoboot启动镜像中的zImage文件即可。 经测试XPEnology5.2-5592.2 和 5967.1 均成功启动,理论上5.2版都可用,但这里不作保证。 再提醒一句,数据无价,大家谨慎操作,由此导致的各种问题本人均不负责,哈哈。 个人水平有限,难免有出错之处,望大家见谅,大神指正。 |
个人觉得最难大家的还是网卡驱动不了的话黑裙就抓瞎了..................
|
avivi 发表于 2016-8-24 17:11 解压出来,重名名为 .config 放到内核源码目录下,这个是5967.1版内核的配置文件 |
支持 如果按照你这么说 那么 笔记本的无线网卡 都可以搞定了
用itx 的板子 然后上笔记本的硬盘 接着无线网卡 那么 啥都搞定了 |
如果有大大能搞一个win里用的懒人工具包就好了,对我这个门外汉来说,还是看不懂呢,但还是谢谢楼主!
|
msseed 发表于 2016-8-25 20:55 重新编译内核的话,理论上,只要内核支持,且有驱动代码,驱动层面的问题都可以解决。如果要用起来,当然还需要api库和应用软件的配套。 |
|