为什么 arm 架构的设备需要各种适配? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wszgrcy
V2EX    硬件

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

  •  
  •   wszgrcy 2020 年 12 月 3 日 via Android 5511 次点击
    这是一个创建于 1895 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    就是像我上边说的那样,定制化开发,只留用得到的,性能、稳定性、成本都是原因。
    cmostuor
        17
    cmostuor  
       2020 年 12 月 3 日
    @wszgrcy 嗯, 厂商们拿到 arm 授权的 core 就会基于 core 添加不同的 ip 核和为了项目优化而改动 ip 核一些参数也会改动或添加指令比如苹果 三星 华为 这样有能力设计芯片的大厂会在原有 arm 的 core 基础上扩展指令集. 手机的 SOC 就会偏向低功耗兼性能的方向优化, 机顶盒就会偏向视频处理优化. 似一块芯片但内部架构会非常的不一样 不能做到像 x86 那样通用. SOC 上本就不同更何况还有不同的外部组件而一些外部组件的源码是要商业授权才能用的. 看
    hjc4869
        18
    hjc4869  
       2020 年 12 月 4 日 via Android
    @cmostuor x86 cpu 移动端早就全 SoC 化了,没有什么本质上的变化…
    cmostuor
        19
    cmostuor  
       2020 年 12 月 4 日
    @hjc4869 x86 就算 SOC 也不像 arm 那样乱, x86 也就英特尔自家在设计芯片, 但 arm 可是有三种授权模式 用指令集授权的会增删或优化指令集 用 ip 授权的会添加不同的外部组件 芯片授权这就很少人用, 如果所有人都能用芯片授权那也会像 x86 那样只需要添加驱动.
    wanguorui123
        20
    wanguorui123  
       2020 年 12 月 4 日 via iPhone
    1 、Windows 打包了一堆通用驱动,外带在线补丁驱动
    2 、x86 平台的兼容从英特尔的芯片组到第三方厂家有一套兼容标准,升级比较平滑且向下兼容
    3 、ARM 的操作系统一般没打包那么多驱动,很多硬件都是定制驱动不太通用
    4 、ARM 起步晚生态和规范都是芯片厂家各玩各的
    5 、至于软件 x86 平台的机器码和 ARM 平台的机器码有本质区别,底层编译器也不一样
    billlee
        21
    billlee  
       2020 年 12 月 4 日
    1. 板级固件以标准化的 ACPI 接口提供了诸如内存的物理地址在哪里,插了那些 PCIe 设备等信息
    2. I/O 控制器的接口很多也是标准化的,如硬盘控制器都是 AHCI/NVMe, 显卡都兼容 VESA, 键盘鼠标都是 PS/2 或 HID
    3. bootloader 的接口也是标准化的,操作系统把自己的启动代码写到 EFI 分区 /MBR 就可以了
    nguoidiqua
        22
    nguoidiqua  
       2020 年 12 月 4 日 via Android
    arm 一般是用在低功耗且集成很多外围组件且硬件资源比较紧缺的设备上,且设备之间差异比较大,都有各自鲜明的定位。

    像手机的传感器比一台 PC 兼容机多多了,而且手机很多东西本身就是专门定制和别人不兼容的,谷歌发布系统的时候怎么能知道下游会搞出什么新硬件呢。

    而且由于低功耗和资源紧张的原因,开发商自己弄个集成一大堆用不上的驱动的系统不但浪费自己时间也会浪费用户的时间和硬件资源,甚至增加额外的问题。实际上有些 arm 设备倒有通用刷机包,那些一般都是换壳产品,硬件差异极小。
    singerll
        23
    singerll  
       2020 年 12 月 4 日 via Android   1
    @wszgrcy #13 不是只有网卡显卡才需要驱动,存储,内存,陀螺仪,相机,等等,甚至一个二极管都需要驱动,win 即插即用是因为都实现了 pcie,usb 这类通用接口,但大部分也需要安装厂家自己的驱动。
    julyclyde
        24
    julyclyde  
       2020 年 12 月 4 日
    各芯片之间的连接关系,在 x86 世界都是统一的
    嵌入式世界你可以随便接,然后就需要在软件层面也写成和硬件连接关系对应的

    这个东西叫 device tree bindings
    maemolee
        25
    maemolee  
       2020 年 12 月 4 日
    @julyclyde 没想到,bindings 这个词语,竟然是一个 base64 转码后的结果,非常巧合

    https://pic.railgun.tech/uPic/2020-12-04-rOz3cV.png
    xz410236056
        26
    xz410236056  
       2020 年 12 月 4 日
    因为 ARM 是 RISC 啊,X86 是 CISC 。没有指令怎么用?
    Cu635
        27
    Cu635  
       2020 年 12 月 28 日
    @xz410236056
    跟这个没啥关系……
    现在 RISC 和 CISC 也是在相互杂交,并不是原教旨主义的了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1553 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 16:28 PVG 00:28 LAX 08:28 JFK 11:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86