2025-02-27

MacBook與Linux kernel

 之前在一台退休的Intel MacBook跑Linux Live系統都只是用USB隨身碟開機進入使用,完全沒動到它的SSD,因為老機器RAM很少,不能用"toram"來載入,因此全程都要掛一支USB碟在機器上,其實有些不方便也不好看。

 後來這台MacBook的macOS已經無法再升級(其實硬要升級還是有辦法,只是已經對使用macOS沒什麼興趣)。個人在各種機器上使用Linux Live system已經二十幾年了,想到這台老MacBook的touchpad觸感不錯,重量相對的輕,電池續航力也有三個多小時,偶而帶它外出也蠻好用,現在把它的SSD割了10GB一小塊,打算用來塞入Live system(只是單純從USB copy到SSD, 不是執行正常的Linux install)。

 之前做的USB開機碟可以支援MacBook本身的Wifi以及Camera,更新到最後是Ubuntu 20.04.4,可以看到MacBook的SSD無誤,但有一陣子沒再用它,加上20.04有點年紀了,某些軟體無法換用新版本,於是這次改用Debian Trixie來開機,並且做好Wifi以及Camera(Mac叫做FacetimeHD)的支援,MacBook的硬體都能用到。

只是用它開機完成後,發現完全看不到MacBook已經割好的SSD!就是說用cat /proc/partitions時除了USB隨身碟之外完全看不到MacBook的SSD partition。變成使用的全程要一直依賴插一支支USB隨身碟。

 這時再降回去用Ubuntu 20.04.4開機,卻是可以在/proc/partitions看得到SSD,先懷疑Trixie包的initrd方式不同,於是拆除initrd裡的early,early2,再試還是一樣!看來不是initrd裡面的問題。

 搜尋網路上的相關Linux以及MacBook的資訊,但看到一堆都是講怎麼用apfs-fuse來mount,而我遇到的問題是完全看不到SSD,跟mount的問題無關。

 接著分別找了Arch,Debian,Ubuntu相關或衍生的distribuion的kernel/initrd (4.x或5.x以及6.x)來開機比對,發現只有5.x能看到SSD,而4.x跟6.x都看不到,真的是很奇怪的問題?

 又在網路上陸續找一些相關MacBook問題,最後找到一篇小小的文裡提到解決方法是在boot option加上intel_iommu=off

 加了這個option的Trixie 6.x kernel開機後果然能看到MacBook的SSD。

 那麼隨機找幾個不同kernel版本來看看它是怎麼定義"intel_iommu"的?

  • 4.9.0
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 4.15.0-20
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 5.10.188
    CONFIG_INTEL_IOMMU_DEFAULT_OFF=y
  • 5.19.0-32
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 6.1.0-29
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.11.5
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.12.6-1
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 6.13.2
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y

 以上各版本kernel在不加任何boot option的情況下,只有5.10.188可以看得到MacBook SSD, 因為只有它是CONFIG_INTEL_IOMMU_DEFAULT_OFF=y 也就相當於在開機時加上 intel_iommu=off

 其它版本有幾個都是相當於
intel_iommu=on
或可以說,沒定義成off 就看不到SSD了。

 根據kernel文件提到「The Intel IOMMU driver allocates a virtual address per domain. Each PCIE device has its own domain.」
如果想進一步研究,可以參考以下文件:
http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/vt-directed-io-spec.pdf

沒有留言: