V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
debuggerx
V2EX  ›  Linux

红米笔记本 air 使用 Linux ,启动时内核会卡住 30 秒,求解决方案或思路

  •  
  •   debuggerx · 2021-06-30 17:46:37 +08:00 · 4686 次点击
    这是一个创建于 1231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新买了台红米 air 笔记本,cpu 是 i7-10510Y,希望可以日常使用 Linux,尝试了多个发行版基本都能正常使用,唯一的问题就是启动时,当在 GRUB 选择系统页面选择系统后,画面会停留在 GURB 主题背景页面长达 30 秒,然后才能继续开机流程。

    尝试了最新的 Ubuntu 系统,也是类似的问题,唯一的区别是 Ubuntu 下是选择系统后电脑黑屏 30 秒然后出现加载信息。

    查看 dmesg 信息可以看到如下错误:

    [    0.244480] Simple Boot Flag at 0x44 set to 0x1                                                                                                                                                                                     │
    [    0.244480] ACPI: bus type PCI registered                                                                                                                                                                                           │
    [    0.244480] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5                                                                                                                                                               │
    [    0.244480] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)                                                                                                                              │
    [    0.244480] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820                                                                                                                                                           │
    [    0.244480] PCI: Using configuration type 1 for base access                                                                                                                                                                         │
    [    0.244621] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'                                                                                                                                                                    │
    [    0.248307] Kprobes globally optimized                                                                                                                                                                                              │
    [    0.248314] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages                                                                                                                                                            │
    [    0.248314] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages                                                                                                                                                            │
    [    0.248314] ACPI: Added _OSI(Module Device)                                                                                                                                                                                         │
    [    0.248314] ACPI: Added _OSI(Processor Device)                                                                                                                                                                                      │
    [    0.248314] ACPI: Added _OSI(3.0 _SCP Extensions)                                                                                                                                                                                   │
    [    0.248314] ACPI: Added _OSI(Processor Aggregator Device)                                                                                                                                                                           │
    [    0.248314] ACPI: Added _OSI(Linux-Dell-Video)                                                                                                                                                                                      │
    [    0.248314] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)                                                                                                                                                                            │
    [    0.248314] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)                                                                                                                                                                             │
    [    0.358456] ACPI: 17 ACPI AML tables successfully acquired and loaded                                                                                                                                                               │
    [    0.362525] ACPI: EC: EC started                                                                                                                                                                                                    │
    [    0.362527] ACPI: EC: interrupt blocked                                                                                                                                                                                             │
                                                                                                                                                                                                                                           │
    [   30.376923] No Local Variables are initialized for Method [ECMD]                                                                                                                                                                    │
                                                                                                                                                                                                                                           │
    [   30.376927] Initialized Arguments for Method [ECMD]:  (1 arguments defined for method invocation)                                                                                                                                   │
    [   30.376928]   Arg0:   0000000036f30172            Integer 000000000000001A                                                                                                                                                     │
                                                                                                                                                                                                                                           │
    [   30.376940] ACPI Error: Aborting method \_SB.PCI0.LPCB.H_EC.ECMD due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)                                                                                                 │
    [   30.376960] fbcon: Taking over console                                                                                                                                                                                              │
    [   30.376972] ACPI Error: Aborting method \_TZ.FNCL due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)                                                                                                                │
    [   30.376986] ACPI Error: Aborting method \_TZ.FN00._OFF due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)                                                                                                           │
    [   30.376997] ACPI Error: Aborting method \_SB.PCI0.LPCB.H_EC._REG due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)                                                                                                 │
    [   30.377037] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62                                                                                                                                                                               │
    [   30.377038] ACPI: EC: Boot ECDT EC used to handle transactions                                                                                                                                                                      │
    [   30.379873] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored                                                                                                                                                                    │
    [   30.426569] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.426598] ACPI: SSDT 0xFFFF89BC00C45800 000507 (v02 PmRef  Cpu0Ist  00003000 INTL 20160527)                                                                                                                                       │
    [   30.429939] ACPI: \_PR_.PR00: _OSC native thermal LVT Acked                                                                                                                                                                         │
    [   30.433359] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.433378] ACPI: SSDT 0xFFFF89BC011D2C00 0003FF (v02 PmRef  Cpu0Cst  00003001 INTL 20160527)                                                                                                                                       │
    [   30.436652] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.436670] ACPI: SSDT 0xFFFF89BC0148D6C0 0000BA (v02 PmRef  Cpu0Hwp  00003000 INTL 20160527)                                                                                                                                       │
    [   30.439724] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.439742] ACPI: SSDT 0xFFFF89BC00C41800 000628 (v02 PmRef  HwpLvt   00003000 INTL 20160527)                                                                                                                                       │
    [   30.443600] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.443622] ACPI: SSDT 0xFFFF89BC011C1000 000D14 (v02 PmRef  ApIst    00003000 INTL 20160527)                                                                                                                                       │
    [   30.448401] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.448419] ACPI: SSDT 0xFFFF89BC011D0000 000317 (v02 PmRef  ApHwp    00003000 INTL 20160527)                                                                                                                                       │
    [   30.451771] ACPI: Dynamic OEM Table Load:                                                                                                                                                                                           │
    [   30.451788] ACPI: SSDT 0xFFFF89BC011D2800 00030A (v02 PmRef  ApCst    00003000 INTL 20160527)                                                                                                                                       │
    [   30.461796] ACPI: Interpreter enabled 
    

    通过传递 acpi=off 参数给内核可以跳过卡住的过程,但是开机后触摸板不可使用,且发热严重,根据日志错误信息查阅大量资料后,基本都是说升级 BIOS 以解决 ACPI 的错误,但是这款笔记本没有 BIOS 更新而且很有可能以后也不会有,所以求助各位大神,有没有什么解决这个问题的方法或者思路?

    第 1 条附言  ·  2021-07-01 18:54:10 +08:00

    感谢各位大佬提供的线索和思路,更新下我这边的进度: 昨晚尝试了安装4.x的内核,发现启动时就不会卡那30秒了,虽然本子的触摸板、喇叭和麦克风都不能用了,但也说明确实可以通过修改kernel来解决/绕过/缓解这个问题。

    下载了5.12的内核源码,通过搜索 “AE_AML_LOOP_TIMEOUT” 这个错误的定义,顺藤摸瓜找到如下定义: root/include/acpi/acconfig.h

    /* Maximum time (default 30s) of While() loops before abort */
    
    #define ACPI_MAX_LOOP_TIMEOUT           30
    

    所以在出现某种错误的时候才会有卡住30秒的表现。 虽然本人能力有限可能无法解决问题,但是猜测把这里的值改小,应该缩短加载内核时卡住的时间,只要影响不大我也就能接受这样用下去了……

    第 2 条附言  ·  2021-07-02 16:19:53 +08:00

    汇报下上面修改方法的效果: 果然如预期一样,把超时时间从30秒改为3秒之后,启动信息如下:

    [    0.246981] ACPI: Added _OSI(Processor Device)
    [    0.246981] ACPI: Added _OSI(3.0 _SCP Extensions)
    [    0.246981] ACPI: Added _OSI(Processor Aggregator Device)
    [    0.246981] ACPI: Added _OSI(Linux-Dell-Video)
    [    0.246981] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
    [    0.246981] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
    [    0.359506] ACPI: 17 ACPI AML tables successfully acquired and loaded
    [    0.363549] ACPI: EC: EC started
    [    0.363550] ACPI: EC: interrupt blocked
    
    [    3.375610] No Local Variables are initialized for Method [ECMD]
    
    [    3.375613] Initialized Arguments for Method [ECMD]:  (1 arguments defined for method invocation)
    [    3.375615]   Arg0:   0000000095332ad2 <Obj>           Integer 000000000000001A
    
    [    3.375626] ACPI Error: Aborting method \_SB.PCI0.LPCB.H_EC.ECMD due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)
    [    3.375646] fbcon: Taking over console
    [    3.375657] ACPI Error: Aborting method \_TZ.FNCL due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)
    [    3.375671] ACPI Error: Aborting method \_TZ.FN00._OFF due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)
    [    3.375682] ACPI Error: Aborting method \_SB.PCI0.LPCB.H_EC._REG due to previous error (AE_AML_LOOP_TIMEOUT) (20200925/psparse-531)
    [    3.375723] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62
    [    3.375724] ACPI: EC: Boot ECDT EC used to handle transactions
    [    3.378597] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
    

    修改前的开机耗时:

    Startup finished in 2.553s (firmware) + 12.865s (loader) + 35.965s (kernel) + 19.797s (userspace) = 1min 11.181s 
    graphical.target reached after 19.790s in userspace
    

    修改后:

    Startup finished in 2.553s (firmware) + 7.104s (loader) + 10.335s (kernel) + 12.147s (userspace) = 32.141s 
    graphical.target reached after 12.139s in userspace
    

    先这样用了,有空再慢慢折腾,看看以后会不会官方更新BIOS或者内核升级可以彻底解决问题~~

    42 条回复    2021-07-04 23:08:45 +08:00
    feelinglucky
        1
    feelinglucky  
       2021-06-30 17:49:15 +08:00
    看起来是 ACPI 的问题,试试 BIOS 里面设置 XHCI Handoff 为 Enabled 看看?
    debuggerx
        2
    debuggerx  
    OP
       2021-06-30 17:54:00 +08:00
    @feelinglucky 笔记本 BIOS 里什么选项都没有,只有个安全启动开关和 usb 充电选项,也都切换试过了,没用 /(ㄒoㄒ)/~~
    generic
        3
    generic  
       2021-06-30 18:18:55 +08:00
    内核命令行参数 acpi_osi=Linux 试一下?
    debuggerx
        4
    debuggerx  
    OP
       2021-06-30 18:29:58 +08:00
    @generic 试过了的,没有效果。。。
    kokutou
        5
    kokutou  
       2021-06-30 18:37:56 +08:00
    试试 archlinux 带的是最新的内核.
    iceecream
        6
    iceecream  
       2021-06-30 18:41:56 +08:00
    只能等 bios 和 EC 更新了
    scybhe
        7
    scybhe  
       2021-06-30 19:27:46 +08:00 via Android
    shayuvpn0001
        8
    shayuvpn0001  
       2021-06-30 20:43:16 +08:00
    输入 systemd-analyze blame

    看看哪个占用了最长时间
    ihipop
        9
    ihipop  
       2021-06-30 22:33:38 +08:00 via Android
    最新内核也不行的话,试试 acpi osi 改 Windows 呢?
    germain
        10
    germain  
       2021-06-30 23:31:54 +08:00
    grub (modprobe.blacklist) 里面 block 你的 nv 的 module 就行了。
    redeemer
        12
    redeemer  
       2021-07-01 07:19:46 +08:00 via iPhone
    好像是 EC 的 interrupt blocked 占用了 30 秒。是不是内核没有适配你这个笔记本 EC 的驱动啊
    imnpc
        13
    imnpc  
       2021-07-01 08:49:49 +08:00
    看日志 应该是 BIOS 配置的时候没有考虑到 Linux 或者没有做最新匹配
    正常出厂的时候会针对 windows linux 的一些不同做好匹配的
    他这个笔记本可能只考虑支持 windows
    debuggerx
        14
    debuggerx  
    OP
       2021-07-01 10:42:27 +08:00
    @kokutou 回头试试编译和最新内核看看情况会不会好点吧
    debuggerx
        15
    debuggerx  
    OP
       2021-07-01 10:43:36 +08:00
    @iceecream 空等啥时候是个头啊 T_T 有啥反馈途径能联系到开发么 小米社区现在基本就是废的。。。
    debuggerx
        16
    debuggerx  
    OP
       2021-07-01 10:44:39 +08:00
    @shayuvpn0001 systemd-analyze blame 是看开启启动服务占用时长的 我是加载内核的时候就出问题咯
    debuggerx
        17
    debuggerx  
    OP
       2021-07-01 10:46:17 +08:00
    @ihipop 试了几个,也是没有效果,Windows 2009/2012/2015 等等。。
    debuggerx
        18
    debuggerx  
    OP
       2021-07-01 10:46:48 +08:00
    @germain 核显轻薄本,没有独显的……
    debuggerx
        19
    debuggerx  
    OP
       2021-07-01 10:47:19 +08:00
    @xiadong1994 这个我也搜到过,可是我的机器没独显的……
    debuggerx
        20
    debuggerx  
    OP
       2021-07-01 10:48:48 +08:00
    @redeemer 对的,我猜也是这样,现在就在想有没有啥改善的方法,只要能跳过这个恶心的 30 秒就行,其他使用起来感觉都还好。
    debuggerx
        21
    debuggerx  
    OP
       2021-07-01 10:51:46 +08:00
    @imnpc 翻车了 T_T 趁着 618 买了这台红米和宏碁的 swift3 pro,就想对比着选个跑 Linux 更完美的,结果 swift 那边直接装不上,折腾了好几天没解决,红米这边只是会开机卡一会儿,我就以为只是小问题好解决……结果现在过了 7 天无理由退货,才发现问题没有那么简单,只能硬着头皮解决了……
    aneostart173
        22
    aneostart173  
       2021-07-01 11:03:30 +08:00
    11 代 intel 大部分 linux 发行版都有问题,据说是 intel 新驱动的锅。
    germain
        23
    germain  
       2021-07-01 11:18:56 +08:00
    @debuggerx 不好意思没细看 log,看着差不多就回了。 你这能退货就赶紧退货吧。BOIS 的锅一般不是其它软件能解决的。

    https://bugzilla.kernel.org/show_bug.cgi?id=109511
    debuggerx
        24
    debuggerx  
    OP
       2021-07-01 11:29:58 +08:00
    @germain 看#21,已经超过退货时间了 T_T 而且这台本子除了这个问题 其他方面我还都挺满意的……
    这个 bug 处理链接我也看过了,可我还没找到一个能和红米笔记本的开发进行沟通的有效途径,目前的想法是看看通过编译自定义内核能不能绕过或者缓解这个问题。
    germain
        25
    germain  
       2021-07-01 11:41:15 +08:00
    @debuggerx 你可以尝试一下 Enable "EC read/write access through /sys/kernel/debug/ec"

    CONFIG_ACPI_EC_DEBUGFS: 默认关闭 │
    libook
        26
    libook  
       2021-07-01 12:30:23 +08:00
    笔记本硬件有很多是专用硬件,有的不够开放,相应的会难以适配 Linux,这方面 Ubuntu 出了个认证项目(可以去 Ubuntu 官网查),通过 Ubuntu 认证的才会保证跑 Ubuntu 没问题,其他的设备基本都是看运气。

    红米本还是个冷门本吧,这东西是销量越高相应的 Linux 适配资料就越多,前提是能 Hack,有的极度封闭的设备完全封禁了适配 Linux 的门路。

    看有什么需求必须用 Linux,如果仅仅是想用 Linux 开发环境开发一些应用级别的项目,其实可以用 Win10+WSL2,这块越来越成熟了,我现在开发 Web 全栈项目 WSL2 是完全能胜任的。

    不过如果开发系统级别的项目和硬件项目的话 WSL 可能无法满足需求,此时可以考虑虚拟机,只不过会比较耗电,但能解决所有硬件适配问题。
    generic
        27
    generic  
       2021-07-01 13:27:40 +08:00
    @debuggerx 我红米 pro15 amd 版也有问题,比如特定内核版本上才能 suspend-resume 成功,比如合上屏幕不产生事件。bios 设置也是什么选项都没有。要 Linux 兼容性还是 dell 或者联想好一点。
    generic
        28
    generic  
       2021-07-01 13:29:07 +08:00
    @debuggerx 硬核搞法就是自己去改 bios acpi 字节码: https://wiki.archlinux.org/title/DSDT
    shayuvpn0001
        29
    shayuvpn0001  
       2021-07-01 14:27:06 +08:00
    @debuggerx 恩,没仔细看。EC 是 Embedded Controller,这个东西是很多低级功能的掌控者,电压控制,休眠,部分外设都是通过它来控制的,现在的 UEFI   BIOS,好多都把 EC 的 Firmware 版本单独列出来了。比如联想现在发布 Thinkpad BIOS:

    <1.52>
    UEFI: 1.52 / ECP: 1.20
    -[重要] 安全修复地址 LEN-22133 推测执行侧信道变体 4and 3a (CVE-2018-3639, CVE-2018-3640).有关更多信息请参阅联想安全咨询页面:( https://support.lenovo.com/product_security/home)

    <1.51>
    UEFI: 1.51 / ECP: 1.20
    - [重要] 安全补丁修复 LEN-19568 Intel Active Management Technology MEBx Access Control Bypass.

    <1.50>
    UEFI: 1.50 / ECP: 1.20
    - [重要] 解决 CVE-2017-5715.

    前面是 UEFI,后面这个 ECP 就是 Embedded Controller Program 的缩写。很多高阶的电源管理功能,比如 USB 口关机给外设充电,限制电池充电上限,都是放在 ECP 里面控制的。这个如果是 ECP 里面的 Bug,你确实只能等厂家修复,个人没办法。有的笔记本提供降级功能,可以试着降回去再看看。

    现在计算机需要的功能太多,随之带来的 BIOS 也变得太复杂。
    sprite82
        30
    sprite82  
       2021-07-01 16:26:37 +08:00
    退不了了,那就直接 win+wsl 或者直接 VMware 资源都给虚拟机
    debuggerx
        31
    debuggerx  
    OP
       2021-07-01 18:34:59 +08:00
    @germain #25 感谢!有时间试试这个慢慢调,现在准备直接粗暴一点,把那个 AE_AML_LOOP_TIMEOUT 改小试试
    debuggerx
        32
    debuggerx  
    OP
       2021-07-01 18:37:50 +08:00
    @libook 就是习惯 Linux 了吧,顺手,Deepin 快 10 年的老用户了~
    主要是过去 5 年用的小米笔记本 air13,体验很棒(因为当时 deepin 有给专门适配过),这次就误以为自家的红米也能愉快 Linux 了。。。
    debuggerx
        33
    debuggerx  
    OP
       2021-07-01 18:41:11 +08:00
    @generic 试了下修改 DSDT 的教程,发现反编译哪一步就过不去,貌似小米的本子不是用的 Intel/Microsoft 的编译器,而是 XMCC ? 现在还是准备从 kernel 下手了。
    debuggerx
        34
    debuggerx  
    OP
       2021-07-01 18:42:22 +08:00
    @shayuvpn0001 是的,谢谢,感觉确实个人没法彻底解决,只能想办法看能不能尽量优化了
    generic
        35
    generic  
       2021-07-01 19:07:58 +08:00 via Android
    @debuggerx 你参考我这个试试 https://zhuanlan.zhihu.com/p/385750248
    不过我的问题有明确的报错,你是卡住超时,估计比较难定位。
    danc
        36
    danc  
       2021-07-01 20:32:24 +08:00
    我是 i7-10750H 装的 ubuntu 20.04 ,适配的还挺好的,唯有键盘灯颜色目前还没得调整。还有,如果是单核显说着混合模式,关机时会卡主 30s,这个倒影响不大。
    danc
        37
    danc  
       2021-07-01 20:33:59 +08:00
    @danc 如果是单开核显,或者混合模式
    danc
        38
    danc  
       2021-07-01 20:40:22 +08:00
    对了,还有一些软件方面的问题。在混合模式下,大部分应用启动时可以选择“使用独立显卡启动”,vscode“使用独立显卡启动”代码编辑区域是黑屏
    debuggerx
        39
    debuggerx  
    OP
       2021-07-02 15:19:31 +08:00
    @generic 感谢,试了下你的思路,然而没能找到问题代码,情况没有改善
    james122333
        40
    james122333  
       2021-07-03 12:38:45 +08:00
    所以 uefi 十分讨厌
    而 arm 设备搞签名验证的也是
    levinit
        41
    levinit  
       2021-07-03 12:45:25 +08:00
    新本子,上新内核 用 arch 之类的
    liuxu
        42
    liuxu  
       2021-07-04 23:08:45 +08:00
    ubuntu21.04 还有问题话基本就只能等更新内核了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5718 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:38 · PVG 14:38 · LAX 22:38 · JFK 01:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.