中关村东路 发表于 2022-8-31 01:17

BeagleBone Black网桥体验

本帖最后由 中关村东路 于 2022-8-31 01:19 编辑

一直用x86带usb-iis界面做主力系统的roon bridge/naa,另外有一套系统用树莓派加hifiberry的gpio卡同轴输出做roon bridge再硬件升频。最近废物利用给真力2.1单独配了个拓品的解码当电视伴音,想补个网桥。正好看到门总推荐beaglebone black这款开发板,据说Bricasti也用的这个【1】,就买了一个,于是有了本文,基本上没什么逻辑就是流水账吧。
题外话,但是细想也和主题有密切关系,手头也正好有个要用深度学习做精密控制的课题,需要一边用Linux做有点复杂的计算一边又要超低延迟控制,单片机性能不够,Linux延迟不行,就想到了同厂的beaglebone AI这种ARM+TI PRU单元的产品【2】,大约原理就是主系统在ARM上跑Linux,用独立的硬件PRU, programmable real-time unit去降低控制延迟,可以把普通Linux的毫秒级延迟降低到个位数纳秒级。但这东西有个小坑,必须自己写软件去调用他的API才行,并不是简单的用了这硬件就降低了延迟。具体到网桥这个用途的话,那种下载来的软件,比如roon bridge,naa就没利用上这个PRU单元,专门为这个设备开发的程序才有可能利用上。所以我无责任估计,Bricasti和门总就是因为这个选择了这个方案,利用上这个PRU,开发的RoonReady软件,毕竟如果没利用上的话就是一个十年前的落后单核32位arm而已,可能比树莓派一代都不如。我买来这板子的主要目的也是写个调用PRU API的demo看看性能如何,能不能说服甲方用这个方案,他们有钱可以从德仪买高端板子。
回到主题,我其实买的是beaglebone black industrial【3】,是同系列稍微高端(贵)的版本,主要是对环境温度什么要求低些,32位单核1G ARM,500M内存,4G的ROM,当然,还有两个200Hz的PRU。到目前为止主要尝试了Debian, Archlinux,和门总推荐的pure【4】,之后会安装Gentoo长期使用,毕竟用了小二十年了习惯了。Debian和puredsd都是直接烧到tf卡里就可以刷进ROM,Archlinux麻烦一些,Gentoo就烦出天际了。先说结论吧,向不用Roon的普通发烧友推荐puredsd,向发烧友中的普通Linux用户推荐Archlinux,向DietPi爱好者推荐Debian,向发烧友中专门烧软件编译参数的重度Linux用户兼控制狂推荐Gentoo。
Debian是原厂的系统,2020年就不再维护了,毕竟这产品线也早就不维护了。原厂系统不但继承了Debian系统一贯的臃肿,还要加上一些IOT类的服务。带的是4.x的标准内核,我尝试更新一下,遇到了这板子的第一个大坑,性能太差:输入了apt search linux-image,卡到不能自理,等了好久还在慢慢涨完成百分比我就自闭了。Debian我也长时间作为唯一操作系统使用过,但实在是不能容忍他家依赖关系的繁琐,好些乱七八糟的东西非得装进来,还叫好意思叫base system。我虽然放弃了Debian,但是其实有一种我没有尝试的玩法向大家推荐,就是在此基础上运行一个脚本安装DietPi。喜欢DietPi的读者可以参考【5】自行尝试。
这板子的Archlinux系统是爱好者维护的,不是Arch社区维护的,做的比较糙。考虑到Arch用户基本上不能避免的AUR必须要编译才能使用,而这机器的性能又低下的超出地平线,AUR是不用想了,只能用基本的软件和商业软件了。这点上不如Gentoo,Gentoo是社区维护且很容易cross-compile。不过这个问题并不很大,Roon和NAA这种常用的软件都能有办法装上,upnp/airplay就麻烦些。我简单尝试了一下,遇到了第二个大坑,RoonBridge不能用。去Roon论坛上搜了一下,好家伙,和这板子有关的帖子基本上都是1.8之后就用不了了。我去找1.7版本的RoonBridge需要archive.org,实在太慢了,考虑到不用最新版对我简直是不能容忍的事,Archlinux也被我放弃了。但是试了一下,NAA是可以用的,可惜由于板子性能太差,遇到一个小坑,升频到DSD512/PCM768偶尔会有轻微爆音,CPU利用率达到百分之五十到七十(作为对比赛扬和树莓派应该都在10%以内),无奈只好弃用。
之后就安装了门总推荐的pure【4】。这软件是2021年5月份最后一次更新,安装很傻瓜化,体验不错。有实时内核和标准内核供选择,NAA/RoonReady/airplay/UPNP等服务都有。但是实际用起来,NAA继承了前面所说的不能支持高码率的问题,我手动更新到最新版问题依旧,只好放弃。RoonReady可以跑起来,“借用”hifiberry的验证,但是无法播放音乐,查了一下错误日志,是Roon Core向Endpoint提交时间同步请求时出了问题。我写段脚本手动同步Core/Bridge两台Linux机器的时间可以解决问题。但是这workaround好景不长,播放下一个文件时候就又报错了,只好放弃。突然想起,RoonBridge在Archlinux上不能装,在这个系统上总可以吧,我又试了一下,alsa版本不同,内核版本不同,报的错误居然都和Archlinux下一样的。之后启用了airplay,终于迎来了这次这次折腾的第一个也是唯一一个结果,it works! 无责任推测,upnp应该也是可用的,不过我都是苹果设备,似乎很难利用上就没尝试。
Google一下会发现这硬件在2013年到2016年之间还挺火的,好多人用来做网桥,甚至HQPlayer还专门开发了NAA OS,但到4.x年代就放弃了这条线。到此为止,我的beaglebone black的音乐之旅就结束了。再次总结,向不用Roon的普通发烧友推荐puredsd,向发烧友中的普通Linux用户推荐Archlinux,向DietPi爱好者推荐Debian,向发烧友中专门烧软件编译参数的重度Linux用户兼控制狂推荐Gentoo。最后,向所有有自己开发能力的厂商推荐这块板子,延迟之王。

【1】http://erji.net/forum.php?mod=viewthread&tid=2275335&extra=【2】https://training.ti.com/pru-training-series【3】https://beagleboard.org/black-industrial【4】http://puredsd.ru/【5】https://dietpi.com/docs/hardware/#make-your-own-distribution

中关村东路 发表于 2022-8-31 08:28

补充一下,翻出来audirvana,puredsd的upnp功能也可以正常使用。

中关村东路 发表于 2022-8-31 18:01

因为这台机器没有rtc时钟,导致每次开机都需要校对时间。但是一则有人的bridge是直连core而没有外网连接的,二则门总推荐的pure固件里并没提供ntp程序,导致了一些程序比如roon之类需要校对时间才能正常运行的时候会发现两台机器相隔20多年(初始时间2000年)。我为此写了如下脚本,开机之后执行以下,或者在init.d/inittab里设置一下自动执行即可:

# cat /opt/ntpd.sh

#!/bin/sh



r=`ssh username@ip date -u -R`

d=$(date -d "$r" -D "%a, %d %b %Y %T %Z" +'%Y-%m-%d %H:%M:%S')

date -s "$d"
其中username和ip分别是你Roon Core或者任意一台内网Linux机器的用户名和IP地址,当然,假定你的Roon Core打开了sshd。这段代码的意思大约就是,ssh登录到roon主机,执行date -u -R,把结果保存在r这变量里。之后在这个板子里用date命令把这段字符串转化为date -s要求的格式,然后用date -s设置日期。


上述代码需要ssh公钥登录,可惜pure固件里也没有提供ssh-keygen程序,可以用openssl工具手动生成。但是既然有Roon Core,我建议直接打开Roon Core来生成好了,ssh登录之后执行:

ssh-keygen -f id_rsa这样会在家目录生成两个文件id_rsa和id_rsa.pub,分别是秘钥和公钥。把公钥部署在Roon Core上,执行:
cat id_rsa.pub >> ~/.ssh/authorized_keys接下来还要把秘钥公钥传回开发板,本来想用scp的,但是pure里居然连这个都省了,真是精简。找了找发现带了rsync,也可以用来传文件,在Roon Core上执行:
rsync -a id_rsa* root@bbb_ip默认密码应该是root。之后登录开发板,输入:
mkdir ~/.ssh大功告成,现在试试执行
sh /opt/ntpd.sh可以看到结果:
# sh /opt/ntpd.sh
Wed Aug 31 10:00:00 UTC 2022现在你的Roon Core可以和RoonReady时间同步了。当然这个办法也适用于任何其他需要校对时间的情况。

中关村东路 发表于 2022-9-4 15:50

再补充一下吧,Gentoo是可以稳定使用pure提供的RoonReady的,但依然不能用RoonBridge,看来真是硬件或者内核patch有问题。

中关村东路 发表于 2022-9-4 16:00

本帖最后由 中关村东路 于 2022-9-4 17:31 编辑

总结一下遇到的坑,如果你都不介意,那可以看正文推荐的几个rom。

大坑:性能太差,安装软件很慢,编译就别想了,交叉编译部署过来都嫌慢;Roon官方应该是不再维护针对这个板子的RoonBridge了,只能用pure或者hifiberry os等提供的RoonReady客户端,其实就是盗版,而且更新很不积极。

小坑:因为性能太差的副作用,做naa等只能稳定播放dsd256,高了偶尔爆音;这板子主打的PRU单元,必须写专门的代码,无法透明使用,想借此降低延迟的就别想了;连硬件时钟单元都省掉了,最易用的rom pure又没自带ntp矫时软件,但可以用我写的校本对付。

中关村东路 发表于 2022-9-8 15:40

本帖最后由 中关村东路 于 2022-9-8 15:45 编辑

如果用过pure这个固件就会发现他提供的airplay客户端是aac压缩的版本。我交叉编译了一个专用于pure的airplay服务,支持alac无损解码,针对pure的旧版本glibc-2.30/2.31,针对beaglebone black系列CPU优化,一般来说在其他arm32开发板上不能使用,当然也可能巧合。自取。
https://github.com/zhjie/shairplay-sync-bin

写个简单的安装的使用说明吧。因为pure里没有打包scp,不支持git,甚至wget都不支持https,我推荐使用rsync上传。

首先备份之前的版本:
cp /usr/bin/shairport-sync /opt/之后用电脑下载
http://github.com/zhjie/shairplay-sync-bin/archive/refs/heads/main.zip在电脑上解压缩之后上传到BeagleBone Black,这里假定你的BeagleBone Black IP地址是PureIPAddress,注意最后有个:符号
rsync -a 3.3.9-alac-libdaemon-OpenSSL-Avahi-ALSA-glibc-2.31 root@PureIPAddress:
登录复制过去就可以了。在BeagleBone Black上执行
cd /ropot/3.3.9-alac-libdaemon-OpenSSL-Avahi-ALSA-glibc-2.31
chmod +x shairport-sync
cp shairport-sync /usr/bin
cp libalac.so.0 /usr/lib/执行以下试试:
# /usr/bin/shairport-sync -v
/usr/bin/shairport-sync: /usr/lib/libasound.so.2: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /usr/lib/libasound.so.2: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /usr/lib/libasound.so.2: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /lib/libstdc++.so.6: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /lib/libstdc++.so.6: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /lib/libstdc++.so.6: no version information available (required by /usr/bin/shairport-sync)
/usr/bin/shairport-sync: /lib/libstdc++.so.6: no version information available (required by /usr/lib/libalac.so.0)
/usr/bin/shairport-sync: /lib/libstdc++.so.6: no version information available (required by /usr/lib/libalac.so.0)
         0.002110709 "shairport.c:1729" Started!
         0.001000500 "shairport.c:1756" software version: "3.3.9-alac-libdaemon-OpenSSL-Avahi-ALSA-sysconfdir:/etc"
         0.000397541 "shairport.c:1762" log verbosity is 1.

……

         0.000227209 "shairport.c:1877" zeroconf regtype is "_raop._tcp".
         0.000053625 "shairport.c:1878" decoders_supported field is 3.
         0.000044833 "shairport.c:1879" use_apple_decoder is 1.
         0.000042542 "shairport.c:1880" alsa_use_hardware_mute is 0.
         0.000043041 "shairport.c:1884" no special mdns service interface was requested.
         0.000348375 "shairport.c:1887" configuration file name "/etc/shairport-sync.conf" resolves to "/etc/shairport-sync.conf".
         0.000230250 "shairport.c:1917" loudness is 0.
         0.000055084 "shairport.c:1918" loudness reference level is -20.000000
         0.019686375 "mdns_avahi.c:375" avahi_dacp_monitor_start Avahi DACP monitor successfully started
虽然报了最开始报了几个warning,但最终还是成功启动了。






中关村东路 发表于 2022-9-26 16:15

我编译了一个稳定一些的内核,现在可以稳定播放PCM768/DSD256文件了。把原/boot文件夹备份之后,替换其中三个文件即可

https://github.com/zhjie/shairplay-sync-bin

zhuyunbin 发表于 2022-8-31 08:55

太专业了,学习 学习

门的耳朵 发表于 2022-8-31 10:07

树莓派这么贵,还有什么可以做网桥的开发板? (erji.net)

门的耳朵 发表于 2022-8-31 10:08

千元预算搭建DIY超值LMS罗技网播系统推荐方案 (erji.net)

门的耳朵 发表于 2022-8-31 10:31

卡农,是做过ROON认证的,ROON给卡农的ROON做个了各种测试的
是符合ROON的播放要求的

中关村东路 发表于 2022-8-31 10:39

门的耳朵 发表于 2022-8-31 10:31
卡农,是做过ROON认证的,ROON给卡农的ROON做个了各种测试的
是符合ROON的播放要求的

我说的不是roon认证,说的是roon认证的代码里调用pru才能降低延迟,否则就是一块普通的两百块钱的垃圾单核开发板,在这价位是站得住的,但是值钱的东西没用上

lxgxing 发表于 2022-8-31 12:06

这块板子的pru对usb输出也有用吗?我记得usb输出还得经过usb主控吧。还是说说同等条件下对比树莓派有没有提升,不然这cpu性能当桥都觉得嫌弃

中关村东路 发表于 2022-8-31 12:42

lxgxing 发表于 2022-8-31 12:06
这块板子的pru对usb输出也有用吗?我记得usb输出还得经过usb主控吧。还是说说同等条件下对比树莓派有没有提 ...
原文写了,PRU需要特地为这板子写代码才能支持,只有厂商支持或者爱好者Patch的开源软件才行。常见商业软件都不支持。性能上比树莓派差的多。优势是自己可玩性高,以及价格极端便宜,新的四百,遍地是二手拆机板子估计只要一百多。

lxgxing 发表于 2022-8-31 15:19

老哥,我主要想问这块板子对比树莓派有没有音质优势。树莓派确实是没有性价比了,所以我把树莓派卖了玩rock64,rock64拆机板也是一百多,当桥用不比树莓派4b差

中关村东路 发表于 2022-8-31 15:39

lxgxing 发表于 2022-8-31 15:19
老哥,我主要想问这块板子对比树莓派有没有音质优势。树莓派确实是没有性价比了,所以我把树莓派卖了玩rock ...

音质不便评价,每个人都有偏好,对我来说,随便放点airplay听个响是可以接受的。但性能和树莓派差十年,单核也是绝对的硬伤。而且我的树莓派改了电源,供电,时钟和数字输出,也不在手头,不太好和这个直接比较。你说的rock我没用过。

如果让我买来用,我会选树莓派改电或者nuc改无扇。这张卡纯粹是买来玩的,加了个lt3042带的电池组,一个铝合金外壳,rom里刷一个系统,tf卡用另外一个,拿来做控制系统也很方便

中关村东路 发表于 2022-8-31 15:58

lxgxing 发表于 2022-8-31 15:19
老哥,我主要想问这块板子对比树莓派有没有音质优势。树莓派确实是没有性价比了,所以我把树莓派卖了玩rock ...

建议你看一下原贴的两个大坑两个小坑,能接受的话,那个pure rom做的还是不错的。其实还有一个坑忘了写,这机器没有硬件时钟,需要软件对时,而pure又没自带ntp程序,我只好自己写了一个校时的脚本,晚上我会发上来。

lxgxing 发表于 2022-8-31 19:29

中关村东路 发表于 2022-8-31 15:39
音质不便评价,每个人都有偏好,对我来说,随便放点airplay听个响是可以接受的。但性能和树莓派差十年, ...

我的rock64已经改了at切ocxo,也就问问而已,换板子是不可能换的,倒是pure可以试试,看看跟我现在用的moode哪个好听

中关村东路 发表于 2022-8-31 19:54

lxgxing 发表于 2022-8-31 19:29
我的rock64已经改了at切ocxo,也就问问而已,换板子是不可能换的,倒是pure可以试试,看看跟我现在用的mo ...

刷不了

中关村东路 发表于 2022-8-31 19:55

中关村东路 发表于 2022-8-31 19:54
刷不了

也不能这么说,不能直接刷吧,可能得改一些东西才能跑起来

lxgxing 发表于 2022-8-31 20:20

中关村东路 发表于 2022-8-31 19:55
也不能这么说,不能直接刷吧,可能得改一些东西才能跑起来

我看到列表里有rock64,先试试看

中关村东路 发表于 2022-8-31 20:26

lxgxing 发表于 2022-8-31 20:20
我看到列表里有rock64,先试试看

试试,只从程序角度,这rom水平很高。

shush0206 发表于 2022-9-2 19:20

楼主,按(5)链接,下午把电视盒子从armbian刷成了dietpi。下周时间跟帖详细讲一下。

Frank75 发表于 2022-9-2 20:03

好文,动手实验,有理论有结论,连参考文献都没漏了,学术严谨{:4_94:}
页: [1] 2 3 4
查看完整版本: BeagleBone Black网桥体验