为什么 arm 架构的设备需要各种适配?

2020-12-03 21:57:30 +08:00
 wszgrcy

对于一个普通的电脑用户,我对 cpu 的理解基本上就处在他就是一个用于计算的……

cpu 从赛扬换成酷睿(同主板),直接开机就 ok,哪怕是换主板了,把原来硬盘换上去,也可以开机(当然,并不是 100%…)

但是到了 arm 这里,不说手机,因为不同的驱动太多,没法照顾。

一些开发板,或者机顶盒,比如 s905 到 s912 固件就不通用,甚至不同厂商同一处理器也不行,又或者 rk3288 rk3399 他们的固件也并不对等的……

不知道为什么会这样?我想程序员应该不是会偷懒把固件写死型号把……那么造成这个问题的是什么?

4709 次点击
所在节点    硬件
27 条回复
feather12315
2020-12-03 22:01:19 +08:00
因为 x86 有 uefi,arm 流行 fdt,在推 uefi
yogogo
2020-12-03 22:10:06 +08:00
看看计算机组成原理?
zhangkai_ch
2020-12-03 22:14:28 +08:00
我怎么理解如果都是 c 语言开发的,只要编译器支持这个平台拿来编译就可以了。只不过有图像界面的需要适配啊。
singerll
2020-12-03 22:18:02 +08:00
机顶盒,手机啥的,同一处理器都是在适配外围驱动,没人适配 cpu 。电脑也需要适配,要不为什么不是所有电脑都能装黑苹果。二楼说的对,建议看下计算机原理。
hoyixi
2020-12-03 22:39:12 +08:00
x86 方便是因为操作系统帮你干了一些活,比如 windows 装好就自带(装)一些硬件的通用驱动,本质和 CPU 没啥关系。只能说:x86 下的操作系统方便。

arm 下的操作系统,很多都是各厂商自己定制的,再根据不同型号手机 or 设备,有啥硬件就带啥驱动,小型便携设备不会给你自带一大堆通用驱动。
wy315700
2020-12-03 22:43:52 +08:00
因为 X86 本身就是以兼容性强还便宜 才抢占的市场
jim9606
2020-12-03 22:48:51 +08:00
差不多就是你说的问题。
以前 linux 得在内核加 mach-XXX 这样的板级代码来支持特定的开发板,后来 Torvalds 对此破口大骂一顿之后换成 dts,不过还是等于内核得预先把设备树写好。
所以现在 ARM 推出了 SBSA 和 EBBR 标准解决这个问题,用上了 ACPI 和 UEFI 。驱动的话很多厂商的平台都不太好追 linux 主线,也就 Rockchip 的平台比较好。
wolong
2020-12-03 23:13:45 +08:00
不懂,只知道一个是精简指令集一个是复杂指令集
murmur
2020-12-03 23:15:25 +08:00
不是 arm 需要各种适配,是 windows 太牛逼了,换系统自带驱动,多少年的老驱动都带着

同样 x86,换到苹果上 nv 显卡没法驱,intel 网卡没法驱
cmostuor
2020-12-03 23:18:24 +08:00
SOC 化是会有这样的问题的, x86 为主的 cpu 就只是单纯的 CPU 没集成太多的组件进去. 而 ARM 的 cpu 会因为厂家的不同而基于 ARM 的 Core 集成不同的组件或添加不同的指令定制化做成不同的 SOC 在外接其他组件时也会不同, 如果厂家不提供源码或详细的芯片手册是很难适配的.
cmostuor
2020-12-03 23:23:13 +08:00
@yogogo 外加 Arm System-On-Chip Architecture 兼容 ARM9 的软核处理器设计:基于 FPGA CPU 源代码分析与芯片设计及 Linux 移植
cmostuor
2020-12-03 23:24:36 +08:00
@cmostuor 外加 <Arm System-On-Chip Architecture> <兼容 ARM9 的软核处理器设计:基于 FPGA> <CPU 源代码分析与芯片设计及 Linux 移植>
wszgrcy
2020-12-03 23:27:44 +08:00
@singerll 手机我理解,机顶盒顶天就是有线网卡和无线网卡驱动?难道厂家每次用的硬件都是冷门的,没法统一吗?
wszgrcy
2020-12-03 23:31:02 +08:00
@cmostuor 也就是虽然我以为那块黑黑的芯片只有计算能力,实际上里面还集成了一些其他的东西?就相当于在标品进行了定制化开发?……额,不过好像也没对应标品的公板……蛋疼
eGlhb2Jhb2Jhbw
2020-12-03 23:39:05 +08:00
我尽可能的用通俗的例子说清楚,有些细节问题不准确请见谅,大差不差。

1. 关键还是机器属性决定的,x86 很早就被赋予兼容机的属性。你可以插上扫码枪、收银盒,安装上驱动,把它变成一个收银机器。也可以接上多网卡的网口,把它变成一个路由器。
但是收银台不需要 CPU 高速的运算和一些视频相关等复杂指令,也不需要内存和硬盘有多高速的存取,需要的是稳定性,怎么提高稳定性,那就是把不需要的都裁剪掉。
同样的,如果是来做路由器,需要的是高速的运算带来的数据吞吐能力,裁剪掉其他的来提升稳定性和缩减成本。
裁剪到极致就和 ARM 现在在做的事情比较一致了。
2. 举个例子,近几年各个平台都比较火的专门用于机器学习的核心,有几款的机器学习性能甚至超过了 i9,但是比 i9 价格低很多。是他们造计算芯片的能力超过了 Intel 了吗?
3. 你说的相近的硬件为什么不做兼容,因为做了兼容,人工成本不说,做兼容还容易引来 bug,随之驱动大小增加,固件大小增加,闪存的大小就要增加,成本增加。
eGlhb2Jhb2Jhbw
2020-12-03 23:45:41 +08:00
@wszgrcy #12
@wszgrcy #13

就是像我上边说的那样,定制化开发,只留用得到的,性能、稳定性、成本都是原因。
cmostuor
2020-12-03 23:52:35 +08:00
@wszgrcy 嗯, 厂商们拿到 arm 授权的 core 就会基于 core 添加不同的 ip 核和为了项目优化而改动 ip 核一些参数也会改动或添加指令比如苹果 三星 华为 这样有能力设计芯片的大厂会在原有 arm 的 core 基础上扩展指令集. 手机的 SOC 就会偏向低功耗兼性能的方向优化, 机顶盒就会偏向视频处理优化. 似一块芯片但内部架构会非常的不一样 不能做到像 x86 那样通用. SOC 上本就不同更何况还有不同的外部组件而一些外部组件的源码是要商业授权才能用的. 看
hjc4869
2020-12-04 00:10:35 +08:00
@cmostuor x86 cpu 移动端早就全 SoC 化了,没有什么本质上的变化…
cmostuor
2020-12-04 00:18:11 +08:00
@hjc4869 x86 就算 SOC 也不像 arm 那样乱, x86 也就英特尔自家在设计芯片, 但 arm 可是有三种授权模式 用指令集授权的会增删或优化指令集 用 ip 授权的会添加不同的外部组件 芯片授权这就很少人用, 如果所有人都能用芯片授权那也会像 x86 那样只需要添加驱动.
wanguorui123
2020-12-04 00:37:52 +08:00
1 、Windows 打包了一堆通用驱动,外带在线补丁驱动
2 、x86 平台的兼容从英特尔的芯片组到第三方厂家有一套兼容标准,升级比较平滑且向下兼容
3 、ARM 的操作系统一般没打包那么多驱动,很多硬件都是定制驱动不太通用
4 、ARM 起步晚生态和规范都是芯片厂家各玩各的
5 、至于软件 x86 平台的机器码和 ARM 平台的机器码有本质区别,底层编译器也不一样

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

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

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

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

© 2021 V2EX