联想Windows平板Miix2-8安装Linux的方法和总结(2017年3月22日更新状态:完美用做家用服务器)

背景

2年前买了Miix2-8 32G版,搭配Intel Z3740 CPU,2G内存,出厂为32位的Windows 8系统,去年Windows 10出来之后,毫无压力升级到Windows 10,系统稳定性提高不少,后来闲置在家里,清空了机器,装了干净的原版Windows 10,自带OEM激活,使用VMware 10(只有10可以在32位Windows上使用CPU虚拟化运行64位的系统)安装了个Ubuntu14.04服务器版,给1G内存和10G硬盘,用极路由2的USB口供电,搭配花生壳内网穿透,当服务器使用。

服务器上跑了我的微信公众号,我的Blog(也就是读者现在看到的这个),还有一些常用脚本定期运行,使用花生壳做内网映射,2个端口,一个用于80端口的HTTP服务,另一个用于SSH服务,稳定运行了大半年,没有出过故障。

但是总有一颗折腾的心在跳跃,因为平板的内存只有2G,虚拟机只能分配1G内存,并且磁盘读写并没有系统直接操作来的快速,而且磁盘容量有限,因此一直想直接安装Linux到平板上。这2年也略微尝试过几次,均以失败告终,主要是想安装64位系统,而Miix2自带的是32位的UEFI(无64位UEFI),无法引导64位系统,安装盘都进不去,更别说安装系统了,网上针对Miix2的Linux安装文章也是少得可怜,基本上找不到直接的资料。

经过2年的发展,UEFI启动已经成熟了不少,Debian 8.0已经支持了64位系统使用32位引导,此时再启动这个工作,应该比之前要容易不少,于是花了一些时间来尝试安装各主流发行版。下面是我走过不少弯路之后的一个关于Miix2-8平板安装Linux的总结。

准备的额外硬件
  • USB HUB,最好可同时供电,用于连接鼠标键盘以及U盘。
  • 一个U盘,2G以上容量即可。
  • 【选用】外置USB无线网卡,或者外置USB有线网卡。因为安装过程中内置网卡无法识别,我用的是水星USB无线网卡,没有USB有线网卡,读者可自行测试一下是否可用,在Ubuntu安装后可加载无线网卡驱动,因此可不用,其他系统比如Debian需要。
安装操作步骤

所有的安装方法都是采用下载原版ISO镜像,用U盘引导工具(比如UltraISO)制作U盘启动。一些对镜像的修改可在刻录完后直接在U盘中修改。

Miix2-8 UEFI启动方法:开机时按住【音量键上】+【开关键】。

Miix2-8 强制关机方法:长按【音量键下】+【开关键】10秒左右。

问题列表

以下列出我在折腾过程中遇到的一些问题,测试的系统版本太多(主要是Ubuntu的版本太多了),就不列出具体的系统版本号了,特殊情况我会单独列出来,尽量使用14年以后的版本,14年以前的版本我试了一下,也有各种问题,就不说了,新版本对于硬件的兼容性会好很多。

另外,所有系统基本上都是64位的,32位的部分安装尝试过,但是没有去尝试解决问题,可能会有部分遗漏,毕竟版本太多,问题也是逐步发现并修复。关键问题解决途径会重点标记。

  1. 64位系统安装镜像无法在32位UEFI中启动,表现于引导菜单中无法识别启动盘。
    下载bootia32.efi,刻录U盘镜像后放入/efi/boot/目录下即可。
  2. Ubuntu 15.04以及之前的Server版本
    无法识别内置磁盘,暂时不知道如何处理。
  3. Ubuntu 15.10 Server版
    能识别磁盘,但是写入一定时间后随机报错,无法完成安装,/var/log/syslog中有错误日志:”mmc0: Timeout waiting for hardware interrupt”,参考此处说是老内核对eMMC磁盘的兼容性有问题,具体原因没找到(2016年9月20日更新:后面有解决办法,2017年3月22日更新:通过自己编译新内核完美解决)。
  4. Ubuntu 14.04.4 桌面版64位
    进入系统后屏幕一闪就黑了,实际上是内置显卡配置问题,在启动选择时按E,进入grub编辑模式,找到linux后的部分,加上nomodeset,按F10启动即可,此时是没有显卡加速的,因此图形会有点问题。此方法可以进入Live CD。
    安装过程中磁盘写入出问题,无法完成安装,放弃。
  5. Ubuntu 15.10 桌面版64位和Ubuntu 16.04.1桌面版64位
    这是一个相对来说比较好的版本,实现的功能也最多。

    • 安装系统
      使用nomodeset模式可以完成安装,只是最后一步安装grub会出错,需要使用安装盘进入grub手工引导,进入安装盘选择菜单时,按C进入grub,输入以下命令,其中*表示当前系统版本的内核,不同的系统不一样,比如vmlinuz-3.16.0-23-generic,可以使用Tab键补全,也有的系统有2个内核,比如Ubuntu 15.10,可随便选择一个,保证linux和initrd选择的内核相同即可。
      root=/dev/mmcblk0p2表示根目录的设备,这个可以进入Live CD模式通过命令”ls -l /dev”看看。

      正常情况下,可以进入系统了,如果不能进入系统,进入Live CD模式看看/var/log/syslog或者/var/log/dmesg。
    • 安装32位grub,参考来源这里,我这边做个简单的翻译
      • 打开终端安装依赖包:
      • 从下载grub代码:ftp://ftp.gnu.org/gnu/grub/
      • 编译32位grub:
      • 安装grub:
      • 替换启动项,也许/boot/efi/EFI/中没有ubuntu这个目录,使用它里面自带的目录即可:
      • 更新grub:
      • 参考文章说此时可以使用efibootmgr命令查看当前启动项,我测试后发现并不管用,必须要重启后才有用。
        另外参考文章说Ubuntu 15.04可以使用apt-get直接安装32位grub,我在15.10中测试失败:
    • 解决显卡加速问题
      前文说到可以使用nomodeset禁止Linux加载显卡驱动来避免加载驱动时导致显示错误,但是这样同时也失去了显卡加速,整个界面会很卡。经过很长时间的搜索,在这里找到了可用的解决方法,但是这种方式每次更新内核或者执行sudo update-grub时都需要重新修改一遍:

      2016年9月20日更新:另一种更好的方式来源于riverzhou,执行sudo vim /etc/default/grub,修改或者添加以下行:
    • 加载内置WiFi驱动
      进入系统后,执行下面的命令安装驱动,其中*使用自动补全即可。
      如果没有文件/sys/firmware/efi/efivars/nvram-*,可以到这里下载一个,测试过是OK的。
    • 屏幕背光关闭
      正常情况下,miix2安装了Linux后,发现无论如何屏幕背光都无法关闭,使用了riverzhou内核后启动时无法显示屏幕内容,但是等待屏幕休眠超时后,可以正常显示,并且屏幕背光也可以关闭,具体编译过程可以参考此贴
    • 问题
      • 【已解决】安装到这里,我本以为这个系统作为家用小服务器使用已经很完美了,各种使用都没太严重的问题。但当我往里面恢复数据时,还是会死机,会出现磁盘IO错误,在大量磁盘写入的情况下,磁盘出错。搜索了一下,没有发现解决方案,放弃。
        • 2016年9月11日更新:
          这个问题在Ubuntu论坛提出半年后,一位网友riverzhou终于发现了问题所在并且给出了一个解决方法。问题是由于CPU睡眠模式导致,在内核启动参数中设置CPU睡眠模式最高设置为C1即可。具体方法是,使用U盘安装时,修改引导参数(在前面加nomodeset的地方),添加intel_idle.max_cstate=1
          系统安装成功后,也在新的/boot/grub/grub.cfg中所有linux内核引导参数后加上这一参数即可。
          需要注意的是,每次更新内核后,需要重新修改这个文件,包含上面3D加速的修改。
        • 2016年9月20日更新:执行sudo vim /etc/default/grub,修改或者添加以下行:

          其中i915.force_backlight_pmic=1是riverzhou给的内核关闭屏幕的参数。
        • 2017年3月22日更新:使用riverzhou大大提供的内核,下载后编译安装,不需要加任何编译参数,完美解决。
  6. Debian 8.3 64位(debian-8.3.0-amd64-netinst.iso)
    此镜像为比较老的3.16内核,由于是网络安装,并且内置网卡在安装阶段无法使用(实际上在安装好之后也无法使用),需要使用外置USB网卡联网,我用的水星外置网卡需要从Debian官网下载驱动,放入启动U盘根目录或者firmware目录,图形界面安装完全无问题,磁盘读写也没问题,32位引导也没问题。可惜的是,无法开启内置显卡加速以及内置Wifi,使用上面Ubuntu的方法,均以失败告终。
  7. Fedora 23 64位(Fedora-Live-Workstation-x86_64-23-10.iso)
    4.2.3内核,比较新,但是镜像的格式需要比较大的改动才能够进入安装页面,下面是具体操作步骤:

    • U盘镜像制作好后,将bootia32.efi放入/EFI/BOOT目录下。
    • 在根目录创建/boot/grub目录,把U盘下的/EFI/BOOT下的fonts文件夹和grub.cfg文件复制到/boot/grub目录下,可能是bootia32.efi只认这个目录的引导文件,不这样做的话,开机引导就直接进入grub命令行界面了,无法使用grub配置文件。
    • 修改刚刚复制过来的/boot/grub/grub.cfg文件:
      • grub提示找不到linuxefi命令:将所有的linuxefi改成linux,一共3处。
      • grub提示找不到initrdefi命令:将所有的initrdefi改成initrd,一共3处。
      • 引导后会提示找不到label为”Fedora-Live-WS-x86_64-23-10″的磁盘:将”Fedora-Live-WS-x86_64-23-10″改成”Fedora-Live”,看了一下磁盘label,只有”Fedora-Live”,于是就这样改了,一共4处。
    • 进行过上面的操作后,可以进入引导选单界面了,选择”Troubleshooting”,然后选择”Start Fedora Live in basic graphics mode”启动,其实就是引导参数加上了nomodeset。直接启动会黑屏。
    • 启动后,选择安装,本以为一切顺利,结果还是在安装过程中死机了,推测还是内核太高,磁盘读写有问题,和Ubuntu 15.10以及之后的系统一样。
最终状态

经过一周左右的折腾,从网上找到一些问题的解决方法,但是还是没办法达到完美的使用的状态,最后还是找了一个精简版的Windows 10,搭配VMware 10使用。如果对于上面的问题,有解决的方法,希望大牛们可以不吝赐教。

2017年3月22日更新:目前安装Ubuntu 16.04的方法:
先使用启动参数nomodeset和intel_idle.max_cstate=1安装,完成后安装必须的编译工具,gcc,make之类,将riverzhou打过补丁的内核(目前我用的是4.10.y分支)Clone下来编译安装,去掉加上的内核参数即可。
来个截图:


下面总结一下目前折腾的结果,作为家用服务器的话,跑个crontab定期任务,一个Blog,一个小型网站,一个微信公众号,基本上完美了:

  • 没有尝试解决(优先级较低)
    • 重力感应(无法使用)
    • 屏幕旋转
      • Ubuntu 16.04.1下,可以调整屏幕方向,但是触屏方向没有跟着改,改了方向后触屏无法使用。
    • 前后摄像头(无法使用)
    • 麦克风(无法使用)
    • 声音(无法使用)
  • 已经解决
    • 屏幕背光关闭:使用riverzhou打过补丁的内核
    • 屏幕显示:首次安装时使用nomodeset,然后使用riverzhou打过补丁的内核,可开启3D加速。
    • 读卡器:Ubuntu 16.04.1安装好后即可使用,不支持写入
    • 显卡加速:后面使用riverzhou打过补丁的内核
    • 触屏:OK,不支持多点触摸
    • WiFi:Ubuntu中加载驱动,15.10和16.04.01经过测试可用。
    • USB:OK
    • 硬盘:Debian 8.3中完美,Ubuntu使用riverzhou打过补丁的内核
    • 内存:OK
参考资料
  1. Installing Ubuntu on BayTrail tablets (version 2)
  2. UBUNTU (OR OTHER LINUX) ON THE ASUS TRANSFORMER BOOK T100
  3. 4.4r3, Miix 2 8inch doesn’t boot
  4. LATEST STEPS TO INSTALL UBUNTU ON THE ASUS T100TA
  5. 【求助】联想miix2 8安装Linux的问题(显示和eMMC磁盘识别问题)探讨和解决
  6. Installing Debian On Asus T100TA