Arm 公司凭什么就让海思、三星、联发科、高通等等公司只能向它买授权,而不是独立山头自己搞呢?

2021-02-04 14:10:33 +08:00
 Pzdmultiverse

如题,小弟没理解,为什么 Arm 可以一直收授权费,自己了解了下,Arm 指令集相对来说不复杂,而微架构像海思、三星、高通、联发科也可以自己搞,为什么这些拿 arm 授权的公司不自己搞一个指令集呢?这当中的技术壁垒在哪里呢?求大神科普,万分感谢!

4876 次点击
所在节点    问与答
40 条回复
wy315700
2021-02-04 18:51:48 +08:00
@Pzdmultiverse
屏蔽了指令集对 APP 的区别的不是操作系统,而是编程语言。比如 java 、python 、php 之类。
systemcall
2021-02-04 20:12:40 +08:00
@Pzdmultiverse #17
安卓当年本来就有对应很多 CPU 架构的版本。涉及到很多底层的东西,不是换个驱动重新编译就可以解决的。你要是有兴趣的话,可以试着编译一下 OpenWRT,之后在 MIPS, X86, ARM 架构的设备上面跑一下,东西也都很便宜。买有官方支持的设备就行了,最好是不用改造的那种
把 Android 移植到 X86 上,得到的是可以运行 Android X86 版本软件的 Android X86 版本系统。比如 Linux 就可以移植到很多不同的 CPU 上,移植过后软件通常是要重新编译才可以用的,当然如果涉及到了内联汇编或者是对寄存器操作的那种,重新编译也没用,得重新写
但是当时 Android 下的软件大部分都是跑在 Dalvik VM 上的,本身被编译成了与 CPU 无关的字节码,所以移植了 Dalvik VM 就可以了。不过,很多软件都通过 Android NDK 调用了一些.so 的二进制文件,这个是和架构有关的,是原生代码而不是需要虚拟机进行翻译的字节码。特别是游戏引擎由于效率的原因一般是用 Android NDK 来调用原生代码
安卓的软件基本上都是跑在用户态的,用户态提供二进制翻译是有很多办法的,Intel 在那个时候做了 Houdini,可以解决大部分时候的问题。不过 Android X86 版本的 SDK 和 NDK 早就有了吧,感觉要比 Houdini 早出一些
异构虚拟化的性能损失非常大,以前没有普及 llvm 甚至 jit 都不普及的时候是非常慢的,这点和通过处理器自己的硬件虚拟化特性来运行同构的虚拟机是不一样的
至于指令集不一样无法运行,我以前遇到过不少。在很多年以前 ARM 架构还不像这么普及,还有不少 MIPS 架构的产品。哪怕 ARM 本身,也存在着互不兼容的 ARM9 ARM11 ARMv6 ARMv7,还存在着是否有硬件 FPU 的区别。在安装 APK 的时候,如果软件使用了 NDK,会检查是否有对应架构的二进制文件,没有的话会拒绝安装。哪怕是现在,也有 ARMv7 和 ARMv8 这 2 种,不过 ARMv8 一般是 64 位的(也有 32 位的 Cortex A32 架构以及许多采用了 Cortex A53 甚至更好的架构的产品中使用了 32 位 Android 所以无法支持 64 位 ARMv8 软件的情况)。大部分的 ARMv8 CPU 是支持 ARMv7 的,安卓系统也是支持的,所以软件只用做 ARMv7 的就可以跑了,但是如果是 ARMv8 的软件,装在 ARMv7 的设备上是不能跑的,一般连安装都不行
xumng123
2021-02-04 20:12:42 +08:00
生态好,不吃独食。
Osk
2021-02-04 23:13:30 +08:00
看到上面 ARMv6 我想起了我第一个安卓机就是 ARMv6 的, 大概是 PXA??? SoC 。我的青春啊。。。

话说 Intel 当年把 ARM 架构的 pxa 系列 SoC 给卖了,不过 Intel 搞 ARM 确实有点尴尬
Jooooooooo
2021-02-04 23:37:40 +08:00
"并不复杂" "可以自己搞"

所以楼主还不快去应聘这些公司, 这得给公司省多少钱啊

对公司来讲, 能在原来必须花钱的地方省钱是求之不得的事情
leavic
2021-02-04 23:39:25 +08:00
python 用起来也不难,为什么我不自己写一套 python 来用呢?因为我不傻。
agagega
2021-02-05 00:40:48 +08:00
小道消息:Apple 内部有团队在自研指令集。不过这也就是内部研究,可能永远不会启用。Google 啥的肯定也有人马干这件事
Tink
2021-02-05 00:44:16 +08:00
@Pzdmultiverse 生态就是别人是否会针对你的架构开发操作系统
DoctorCat
2021-02-05 01:32:31 +08:00
The remarkable story of ARM
ref: https://medium.com/swlh/the-remarkable-story-of-arm-85760399c38d

里面提到了几段:ARM 作为 RISC 芯片的优点、ARM 母公司拆分、与 Apple 早期合作。

This was a critical part of their success — licensing the processor design to anyone who wanted to make their own versions of the chip.

The happy accident that ARM processors had the best MIPS/Watt (highest performance for the lowest power) is the key thing that propelled their processor to success in the exploding world of smart phones.
Of course now ARM are focused almost entirely on that MIPS/Watt figure because that’s what customers are demanding — longer battery lives for their laptops, phones and watches.

总结起来,个人理解是:ARM 标准的优势是有 Apple 、三星等大厂合作的案例,而且符合当今商业时代的要求。
DoctorCat
2021-02-05 01:34:43 +08:00
抛开生态,谈你提出的这个问题: “为什么这些拿 arm 授权的公司不自己搞一个指令集呢?”
- 要抄袭么?这有知识产权问题。
KHfqLAYYS6BKJT3R
2021-02-05 02:15:57 +08:00
中国为什么不做一个真正自己的系统?
wunonglin
2021-02-05 02:49:08 +08:00
@cjzlol #31 气抖冷
Pzdmultiverse
2021-02-05 09:52:54 +08:00
@wy315700 #21 那这样不更说明应用不依赖指令集了吗~
wy315700
2021-02-05 10:07:01 +08:00
@Pzdmultiverse
按照 Google 最初的设想,Android 程序用 java 开发,的确是指令集无关的,应用可以很方便的在各个平台上运行。
问题是 Android 应用不全是用 java 开发的。部分性能依赖的程序用了 C++,甚至还有用汇编的。。
Pzdmultiverse
2021-02-05 10:13:41 +08:00
@wy315700 #34 C/C++是依赖指令集的吗? 汇编我理解就是指令集的一种助记符,所以是和指令集强相关的。
那 Android 系统在研发的时候,因为可能要用到汇编,所以有可能是先选择 CPU 架构,再开始开发的吗?
Pzdmultiverse
2021-02-05 10:14:52 +08:00
@Pzdmultiverse #35 不好意思,第二个问题,我看错了,请忽略
wy315700
2021-02-05 10:45:23 +08:00
@Pzdmultiverse
C/C++会编译成二进制代码而不是中间代码,所以是目标程序指令集依赖的,移植到另一个平台需要进行重新编译。。
让大家对程序进行重新编译,,需要强大的号召力,当然也要看市场份额。微软这么多年依旧没有抛弃 32 位系统就是因为大量的程序是用 32 位开发编译的,源代码没有人维护甚至已经丢失。而苹果就可以果断抛弃 32 位。



当然如果直接能编译,那还是好事,更多的情况是写程序的过程中有依赖于本平台的设计导致需要重新编码。

举个最简单的例子。gcc 编译器下,X86 平台的 long 和 int 一样都是 32 位的整数,而 X64 平台中 long 是 64 位的整数,int 依旧是 32 位。如果代码里混用了 int 和 long,,,那就等着推倒重写吧。。。。
weksomnus
2021-02-05 13:07:40 +08:00
对于 SoC 来说,Arm 提供的不仅是 CPU 核 /ISA 授权,同时提供了配套的 SoC 外围 IP ( Bus 、NoC 、Cache 、DebugInterface 等)、软件工具链。如果用自己的 ISA 或者 RV ISA 的 IP 核,与之匹配的 IP 资源匮乏。
对于 Android 来说,存量 App 中的 Native Lib 过多,对于消费者产品需要推动开发者依据不同的后端( ISA 后端)进行重新编译、打包、发布。
顺便 Arm AArch64 系列的 ISA 已经很优雅了。
Pzdmultiverse
2021-02-05 14:14:15 +08:00
@wy315700 #37 感谢大佬解答,学习很多~
Pzdmultiverse
2021-02-05 14:14:32 +08:00
@systemcall #22 感谢大佬解答,学些到很多~

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

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

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

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

© 2021 V2EX