為什麼 linux 核心無法在我的新 Intel i7-6500U CPU 上啟動?
我知道,很難隔離 CPU,但我看到的錯誤表明這就是問題所在。
這絕對不是硬體故障/損壞問題。在過去的幾天裡,我整天都在執行 Windows 10,而且這東西速度很快!沒有崩潰。更重要的是,我執行了 Windows 記憶體檢查器。記憶力都很好。
機器規格
該機器是全新的聯想 Yoga 710 15"
x64 Intel i7-6500 CPU @ 2.50 GHz, 2601 Mhz, 2 Cores, 4 Logical Processors SMBIOS Version 2.8 BIOS Mode UEFI 16.0 GB DDR4 Ram 256 MB SSD
隔離到 linux 核心 (?)
我在兩者上都看到了相同的問題
- archlinux-2016.08.01-dual.iso
- ubuntu-gnome-16.04.1-desktop-amd64.iso
對於 Arch——問題只是在從 U 盤啟動時間歇性地出現。我設法將 Arch 安裝在驅動器上的 100GB ext4 分區上。該安裝在引導期間間歇性地(如 90% 的時間)存在相同的問題。如果我通過了引導,那麼在我執行的前幾個終端命令之後隨機出現問題,最終導致完全死鎖。
對於 Ubuntu——U 盤甚至無法啟動。我立即被這些相同的錯誤阻止。僵局…
這麼多錯誤…
每當發生這種情況時,日誌都會充滿與記憶體相關的錯誤,但我看到的關鍵錯誤是:
General protection fault 0000[#1] PREEMPT SMP
RIP kmem_cache_alloc
RIP kmem_cache_alloc_trace
對於這些錯誤,我已經多次看到一些相同的堆棧跟踪:
rbt_memtype_copy_nth_element on_each_cpu flusH_tbl_kernel_range __purge_umap_area_lazy um_unmam_aliases change_page_attr_set_clr set_memory_ro frob_text.isra module_enable_ro
kobject_create kobject_create_and_add load_module __symbol_put kernel_read sys_finit_module entry_SYSCALL_64_fastpath
kmem_cache_alloc_trace allocate_cgrp_cset_links ... sys_write entry_SYSCALL-64_fastpath
Linux 也一直承諾它正在解決這個問題
修復遞歸故障,但需要重新啟動!
我希望..
英特爾 ucode
我還嘗試
intel-ucode
在我的 Arch 安裝中安裝該軟體包。我在dmesg
日誌中看到微碼已更新,但不幸的是並沒有解決我的問題。可能是什麼問題?如何解決?
編輯
附加說明。
一般保護故障消息和“檢測到鎖定”類型的消息通常引用 CPU。我在這些消息中看到了
CPU0
、CPU1
和。似乎有什麼東西導致了 CPU 無法相處,就像他們都在試圖清除高速記憶體記憶體或其他東西時陷入僵局。CPU2``CPU3
編輯2
錯誤提及的 BIOS
我在一些錯誤中看到了這一點資訊:
LENOVO 80U01LENOVO YOGA710-1 BIOS OGCN20WW(v1.04) 6/30/2016
不確定這是否有助於專業人士理解這個問題……
編輯3
最大CPU=1
我在核心參數文件中尋找調試選項,發現
maxcpus
如果我將最大 cpu 設置為 1,那麼問題就會消失。所以看起來問題是某種共享記憶體記憶體違規。
編輯3
maxcpus=1 + Gnome = 又壞了
雖然
maxcpus=1
似乎只使用 1 個 CPU 就可以使系統工作,但我安裝了 gnome 然後執行systemctl enable gdm.service
現在,當我重新啟動時,我的所有錯誤又回來了,但這一次它們都發生在 CPU0 上
因此,即使使用 1 個 CPU,似乎仍有一些東西導致記憶體違規。
編輯4
諾拉皮克
所以使用
nolapic
似乎讓一切“工作”但是通過使用
nolapic
,我有效地禁用了我的另一個 CPU 和 1 個工作 CPU 中的所有多執行緒。我正在嘗試將其用於 OpenMP,並且在使用 啟動後
nolapic
,OpenMP 和 linux 核心只能找到 1 個執行緒、1 個 CPU。太糟糕了!我也試過
intel_idle.max_cstate=0
and1
,2
等。但這並不能解決啟動問題。還有什麼可能導致核心無法使用我的多核機器?
原來問題是
i2c_hid
這似乎是某種觸摸板驅動程序。出於某種原因,當我禁用它時,我仍然可以使用我的觸摸板。可能是筆記型電腦上的觸摸屏也使用了這個驅動程序,因為這不起作用。
無論如何,我不喜歡用指紋破壞我的筆記型電腦螢幕……所以再見
i2c_hid
!我通過將其添加到核心參數來修復它:
modprobe.blacklist=i2c_hid
儘管
nolapic
也有效,但它禁用了處理器中除 1 個核心之外的所有核心。我強烈建議其他任何人不要使用
apci=off
或nolapic
出於這個原因。使用這些選項是可能使您的機器工作的核武器,但您會損失很多性能和/或 i/o 設備作為附帶損害。這是啟動的一個很好的起點,然後你可以像我一樣通過 journalctl 來分析失敗的靴子。
祝找到這個的人好運。