有关树莓派的兼容性,各位可以举一些在 Linux 上能运行,树莓派不能运行的软件的例子吗?

2020-01-07 03:54:24 +08:00
 black11black

如题,平常前后端都开发了不少,感觉自己还挺熟练的,最近新入树莓派想做点人机交互的开发,发现较真起来啥也不懂,很蛋疼

接触到架构问题感觉又回到了小白时代,问一些浅显的问题

标题指的是各位有经验的话,能否举出一些在 x86 架构的 linux 发行版(比如 debian 8 )上能运行,但在树莓派上不能运行的程序例子?(因架构差异导致或因发行版差异导致都算)


起因是今天装 docker 的时候突然想到兼容性,问题有很多,比如

1、虽然 apt install 用了无数遍,但我不理解 apt 的源机制,比如如果在普通的 vps 上执行 apt install nginx 命令,那他下拉的应该是支持在 x86 架构上运行的二进制代码,那么显然拉到 arm 上就不能执行,那么为什么在树莓派上执行同样命令也会得到一个可运行的 nginx ?是因为默认下拉源不同吗

2、同理,平常经常使用容器,容器内二进制代码应该都是为 x86 设计的,那是否意味着 dockerhub 上的官方镜像在树莓派上集体挂了?

3、再同理,比如我在 pi 上架了个网站,希望开启 bbrplus 或者 bbr2,需要编译一些内核功能,那是否意味着以前收藏的官方镜像全挂了?


总之我感觉十分蛋疼,问题问的都比较白,各位有经验的看情况回答,勿喷,谢谢了

4131 次点击
所在节点    Raspberry Pi
11 条回复
ClarkAbe
2020-01-07 05:45:36 +08:00
你在下载系统的时候那个页面就会问你,你要 X86,x86_64 还是 arrch64,同理....包管理的源也会这样,根据自己架构进入各自的目录找包安装
alphatoad
2020-01-07 05:55:35 +08:00
Docker 有很多 arm64 的容器,即便没有大概率也可以自己 build
如果开发者是针对 x86_64 做了汇编优化的那是真的没办法
vinew
2020-01-07 06:41:38 +08:00
树莓派发热一直很迷,官方镜像空载下比配置差不多的 nanopi 高 10 ~ 20℃。
我是指加了风扇的树莓派 3b+和被动散热的 nanopi neo2。
不知道派 4b 表现怎么样,目前正在观望 nanopi m4v2
Buges
2020-01-07 06:46:26 +08:00
绝大多数情况没问题,少部分需要你重新编译。人生苦短,没特殊需求的话直接 x86 工控机板子一把梭,避免踩一些不必要的坑浪费时间。
Osk
2020-01-07 08:46:18 +08:00
qemu-kvm /滑稽 /
nevin47
2020-01-07 09:54:58 +08:00
越偏上层的应用,越感知不到平台的差异
BingoXuan
2020-01-07 10:06:15 +08:00
intel undervolt

1.apt 下载是分架构的,树莓派拉下来的是 arm 架构的二进制,而且还分 arm64 和 armhf 等不同细分
2.是的,你不能把 x86 的 docker image 泡在树莓派。如果可以的话,那么微软就不需要花那么大功夫做个 x86 指令集翻译 arm 指令集那么蛋疼的跨平台解决方案
3.官方镜像都提供 arm 版本软件分发,哪怕是 ppa 也有 arm 版本软件分发。而且自己编译肯定是交叉编译,难道还要用 arm 自己编译吗?这就是为什么 Linux 主流软件都有 arm 架构支持。反倒是 windows 搞出了翻译指令集这种工程量巨大的方案。

随着 arm 在服务器领域发力和开发者支持,arm 和 Linux 环境都会越来越好。某厂推出 arm 的主机还真是赶上好日子啊
hahasong
2020-01-07 10:50:09 +08:00
基本上日常的都能装,即使没有也可以从源码编译
black11black
2020-01-07 20:53:00 +08:00
@Buges
感谢,主要是自己是学软件的不是学电子的,树莓派这个不是确保配套,x86 板子一想到配套问题没啥概念,就不太敢买。比如要接个摄像头之类的,也不知道选啥元器件能接上
black11black
2020-01-07 20:55:59 +08:00
@BingoXuan
感谢,学到了

有关 x86 指令集翻译另外提一嘴,我粗浅的知识下感觉这个不就是底层把某些机器码替换成另外一些,为啥说是个工程量巨大的方案?
BingoXuan
2020-01-07 21:32:55 +08:00
@black11black
最核心的是用户使用只有运行时而没有编译时。也就是用户执行 x64_86 的二进制时候,arm 不可以先翻译二进制然后执行。x86 每一条指令所操作的数据格式和计算形式都不一定对应的 arm 指令,而且 x86 一条顶 n 条 arm 的。这个转换工作实时进行是很麻烦的。这就只能靠软件辅助加速,如 jit。就如多年前 ps3 用的破 power pc 架构到今天用最好 cpu 跑模拟器也不如原机。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX