Mac mini 2006(初代Intel)安装黑群晖,交叉编译内核驱动
背景
去年,我收藏的iMac Intel 初代因为长时间没开机,加上受潮,屏幕出现了竖线。我的初代Intel Mac Pro 也因为长时间不用,突然开机崩坏了2个电源了,但是你要开它吧,性能孱弱,MacOS X 10.11也很多软件不兼容了,况且很费电,干脆不开了,留着今后改机箱吧。但是Mac mini不占地方,功率也低,为了防止它崩掉,打算把它利用起来。
配置
CPU:T7200,64位,由T2300升级
内存:2G DDR2
硬盘:500G机械
这套配置在06,07年的时候还是相当不错的,直到MacOS X 10.6 时代都是能够流畅使用的。现在只能算是古董,收藏价值大于实用价值。
版本选择和引导
介于这台机器的性能还是选择DSM5.2吧,下载DS3615的5.2的引导,打开看看里面是什么:
很简单了,BIOS的syslinux。但是,这台Mac mini采用了32位的uefi,很鸡肋。而且Mac不是随便识别MBR引导的。于是我们祭出Mac平台引导管理神器(曾经):rEFIT。
首先,给U盘分个区,MBR格式,先建立2个分区。1个FAT32,用来放5.2引导的文件。第二个分区按照rEFIT的要求,格式化为HFS+也就是MacOS扩展,把rEFIT的efi文件夹复制进去,然后在MacOS中执行enable.sh。不出意外的话,重启Mac mini,按alt,就能看见rEFIT了。不过不急,先去Windows用bootice安装syslinux的分区引导。安装完成后,将5.2的引导文件放入FAT32分区。这下就能正常引导DSM5.2的安装了,这里安装过程就不赘述了。安装好后没什么大问题:只是风扇狂转,这对老Mac来说显然是不健康的,必须解决。
编译AppleSMC驱动,解决风扇问题
给Mac装过Linux应该知道,控制Mac风扇的软件:mbpfan。在GitHub上找到它的主页看看说明:需要applesmc和coretemp这两个模块。可以用lsmod | grep -e applesmc -e coretemp检查是否被加载。applesmc肯定是没有的,我们需要自己编译。applesmc有个依赖:input-polldev.ko也需要编译。
在群晖中执行命令:uname -a,得到内核版本:3.10.35 并将/proc/config.gz复制出来。这个是内核的配置文件,后面会用到。
applesmc.ko这个模块在许多大的Linux发行版都是默认启用了的,但是3.10.35的版本比较老,我找了许多Linux发行版都没有找到现成模块,只能自己编译了。先去source forge的群晖主页(dsgpl)下载DSM5.2的源码(5565是5.2的,这里吐槽一下老版的源码是大包1.6g,实际上我们只需要内核源码,如果你要编译6.2.3的内核,只下载Linux开头的就行了)DS3615xs代号bromolow,就下载bromolow-source.txz。再下一个编译工具吧,在DSM 5.2 Tool Chains目录里面没有bromolow,没关系Intel x86 Linux 3.10.35 (Braswell)是可以的,都是x86。
接下来就是编译了,3.10.35的内核比较老了,稳妥起见我们在Ubuntu14.04中编译。将源码和编译工具导入到Ubuntu中,解压。
安装编译工具:sudo apt-get install libc6-i386 build-essential libncurses5-dev
cd 到source/linux-3.10.x,解压之前从群晖中复制的config.gz到这里,命名为.config
make ARCH=x86_64 CROSS_COMPILE=/path_to_your_toolchain/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- menuconfig
进入配置菜单在Device Drivers > Hardware Monitoring support 中找到 Apple SMC按M选择。
在Device Drivers > Input device suppert 找到Polled input device skeleton 按M 选择。
Save,Exit。
make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- modules 开始编译。
编译结束后复制drivers/input/input-polldev.ko和/drivers/hwmon/applesmc.ko 到群晖的/lib/modules/下,安装内核:
insmod /lib/modules/input-polldev.ko
insmod /lib/modules/applesmc.ko
接下来编译mbpfan,放到群晖,运行试一下:mbpfan -t -v
出错了!mbpfan could not detect any temp sensor. Please contact the developer.
这一句Using new sensor path for kernel >= 3.15.0 or some CentOS versions with kernel 3.10.0让我感到很迷。内核明明3.10.35啊,被它判断错了。3.15.0以上的内核温度传感器位置变了,这样是找不到传感器的。于是打开mbpfan的源码看看:
它这一段读取内核版本号的判断在群晖上是会出错的,不过没关系,暴力一点,不管新版老版都把传感器的路径设置老版的路径就行了。也可以直接删除这段if,直接将正确的路径赋给“path_begin”这个变量。改完后编译,重新放入群晖,再来
风扇瞬间安静了。(这里我没有导入配置文件,可以按照mbpfan主页说明,将mbpfan.conf按自己的温控需求修改 复制到 /etc/下)
再测试一下:
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
以上命令会让群晖的CPU达到100%,观察温度:
cat /sys/devices/platform/coretemp.0/temp2_input
不错,温度上来了,观察风扇速度(也可以耳朵听,哈哈):
cat /sys/devices/platform/applesmc.768/fan1_output
转速也上去了,关闭测试进程:
pkill -9 dd
再看看温度和风扇速度,都下去了。完美!
最后:将一下命令加入开机脚本
insmod /lib/modules/input-polldev.ko
insmod /lib/modules/applesmc.ko
/your_path/mbpfan
总结
对于Mac,网上大多教程都是用虚拟机安装群晖,但是既然是老Mac了,性能本来就out了,再用虚拟机损耗太大了。经检验,老Mac mini直接安装黑群晖是可行的。我这里以5.2版本为例,抛砖引玉。如果你也有老Mac且是UEFI64位的,可以尝试安装6.2以上。引导可以使用rEFIT的新衍生版: rEFInd。重点就是要交叉编译applesmc。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
公羽启皓
校验提示文案
东德洋子
校验提示文案
分手后别把锅拿走
校验提示文案
仙_人_掌
校验提示文案
仙_人_掌
校验提示文案
公羽启皓
校验提示文案
分手后别把锅拿走
校验提示文案
东德洋子
校验提示文案