我們從前面的章節知道:在蘋果系統中,能用上的硬體是有限制的
當我們想安裝一些PC上不太常見的硬體,如 10G高速網卡、Thunderbolt擴充卡、SAS陣列卡 之類時,該如何選擇呢?
一般來說,會先檢查蘋果是否有用過該型號晶片,或同晶片廠商的近似型號
以10G高速網卡為例:
在蘋果上出現過的有 Intel 的 X500系列(8259x), Aquantia 的 AQC-107 型號
有供應過給蘋果的廠商分別是 SmallTree,SolarFlare,Tehuti,Sonet 等
這幾家好像很少聽過,是吧? 沒關係,我們只要找跟這些廠商用一樣晶片型號的網卡即可(嗎?)
收張Intel X520(SFP+ port)或 X540(RJ45 port),單port或雙port皆可,若能收到以上幾家的卡,那就不用大費周章的改ID,直接使用原廠的macOS驅動即可
但,市面上大多都不是啊~~
由於這些卡跟我們要上的驅動內ID不一致(PCI ID裡的子系統識別碼SUBSYS ID),所以需要"手動"修改一下,
下載Ubuntu ISO,製作Ubuntu開機碟,不需要安裝進電腦,只要進到Ubuntu Live環境即可
進入 Ubuntu 後,開啟Terminal終端機
輸入:
ip a
出現類似此畫面
ubuntu@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 74:d4:35:f9:e1:dc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global dynamic noprefixroute enp2s0
valid_lft 604683sec preferred_lft 604683sec
inet6 fe80::cd60:85d0:9505:9a18/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp5s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:1b:21:7e:4c:f2 brd ff:ff:ff:ff:ff:ff
確認目前10G網卡的資訊,如範例中enp2s0是主機板內建的Gb網卡,而 enp5s0 則是10G網卡的名稱
修改ID前我們先將原始韌體備份起來,安裝所需要的工具:
sudo apt-get install ethtool
安裝好後,輸入以下指令將網卡韌體備份到目前的桌面(或指定放到其他隨身碟上,不然重開機後Live桌面的資料會消失!)
sudo ethtool -e 網卡名稱編號 raw on > /備份位置
EX:
sudo ethtool -e enp5s0 raw on > ~/Desktop/Intel_X520_enp5s0.bin
若,該網卡為雙port則兩個名稱都要備份一次,後續的修改也是要改兩個地方
如:enp5s0、enp5s1 兩個port的名稱編號都要記住
接下來確認 ID:
lspci -nn -vvv
找到:
05:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
Subsystem: Dell 82599ES 10-Gigabit SFI/SFP+ Network Connection [1028:7b10]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at df200000 (64-bit, non-prefetchable) [size=512K]
Region 2: I/O ports at d000 [size=32]
Region 4: Memory at df300000 (64-bit, non-prefetchable) [size=16K]
Expansion ROM at df280000 [disabled] [size=512K]
Capabilities: <access denied>
Kernel driver in use: ixgbe
Kernel modules: ixgbe
Vendor ID:Device ID = 8086:10fb
可以看到這是Intel公司(8086)出產的10G網卡晶片(10fb)型號是82599ES
Sub Vendor ID:Sub Device ID = 1028:7b10
由Dell公司(1028)生產的10G網卡型號(7b10),接口是SFP/SFP+型態
再來要搜尋這個網卡的Subsystem ID在網卡韌體的哪個位置,
需要先把byte兩兩對調:
sudo ethtool -e PORT-NAME | grep "SUBSYS_ID_IN_REVERSE"
EX: Sub Vendor ID 1028 > 28 10
sudo ethtool -e enp5s0 | grep "28 10"
若是找不到,有可能剛好斷在換行處,這時改搜尋另一組:
Sub Device ID 7b10 > 10 7b
sudo ethtool -e enp5s0 | grep "10 7b"
以此卡為例,在這個地方找到:
0x0320: 03 00 1f 00 00 00 00 00 03 13 10 7b 28 10 a6 10
可以看到,符合搜尋條件的只有這一個
我們要把7b10替換成0005也就是 05 00
原10 位於0x320的第十一個Byte 即是 0x32A(0x320=該行第一個)位置,替換成05
原7b 位於0x320的第十二個Byte 即是 0x32B(0x320=該行第一個)位置,替換成00
再來看看更改的指令格式:
sudo ethtool -E <Ethernet name> magic 0x<Device id><Vendor id> offset 0x<Offset> length 1 value 0x<Value>
套用上面記下的 enp5s0
套用上面記下的 10fb
套用上面記下的 8086
套用上面記下的 0x32A (0x32B 要再另外執行一次)
套用上面記下的 0x05 (0x00 要再另外執行一次)
修改好指令後如下:
sudo ethtool -E enp5s0 magic 0x10fb8086 offset 0x032A length 1 value 0x05
sudo ethtool -E enp5s0 magic 0x10fb8086 offset 0x032B length 1 value 0x00
執行後,再次確認一次有修改到
sudo ethtool -e enp5s0 | grep "28 10"
0x0320: 03 00 1f 00 00 00 00 00 03 13 05 00 28 10 a6 10
可以看到,修改的位置已是 05 00
重開機後,回到蘋果系統,使用DPCIManager或Hackintool看PCI List或PCIe分頁的資訊:
再來,將從SmallTree下載的kext驅動檔:SmallTreeIntel8259x.kext
放進 /EFI/EFI/OC/Kexts 資料夾裡,
並修改config.plist,加進 Kernel > Add 裡,如:
重開機後,就可以在"系統偏好設定"裡的"網路",看到此10G高速網卡了~