如何在Intel baytail的平板上部署64位的ubuntu
phpskycn2015/10/11软件综合 IP:浙江
本文记录了在一款国产的平板上折腾ubuntu的过程,其中方法对于大多数同时期国产平板基本适用。

由于购置了新的平板,之前的平板就闲置了下来,正好将它改造成无线抓包工具。不过这个很简单的设想在实践过程中遇到了大量的问题。
硬件信息:
CPU Intel Atom Z3770 1.46GHZ(代号baytail)
RAM 2*2GB LPDDR3
存储 64GB EMMC 4.51
网络 BCM4330 SDIO Aapter
1*USB 2.0接口 1*USB3.0接口
电池容量约为30whr
电容式触控屏

atom.gif

首先考虑到各Linux桌面发行版糟糕的硬件适应性能,在这个CPU、GPU、存储和操控方式都奇葩的设备上直接使用Kali/BT之类的肯定得面对一大堆驱动问题而且很可能最终无法解决。所以只能选择适应性稍好的Ubuntu。在之前的帖子中通过手动配置grub2引导器已经成功使用了原本不支持32位efi的ubuntu14.10 32位版,而这是运行Ubuntu安装环境的第一步。


一、特殊的baytail
伴随着Intel在移动设备市场的战略扩张,平板市场成为了其发展的重中之重。2014年下半年Intel拿出了代号为bay-tail的atom z37xx处理器,并且对于中国南方的低价平板生产商,提供了非常丰富的设计支持和补贴,以至于市场上出现了大量售价不足RMB 1,000的运行Windows的平板设备。
但是出于对廉价设备反噬低端笔电市场的警惕(之前的上网本已经发生过了一次),Intel显然有意地采取了限制措施,这些设备的处理器基本都只有2GB RAM的寻址能力,并且大量用户反应无法部署64位版本的系统。
在早期,网上的舆论普遍认为Intel通过某些手段限制了处理器进入64位模式的能力,或者压根不支持64位扩展,但是15年上市的Thinkpad10平板(使用atom z3795)证明了这些都是谣言,该设备自带64位系统并可以正常使用。Intel在发布baytail之初也说明了这是64位处理器。处理器的CPUID信息也显示该处理器支持IA-32E模式(64位)。
经过了一些简单的测试,可以发现当试图部署和使用64位系统时,问题最先发生在引导的时候。对于廉价平板,固件中普遍只提供了efi模式而没有提供legacy模式,所以只能使用efi方式引导,而在试图将引导权交给64位efi引导器的时候,固件会对其毫无反应直接返回,对于32位的引导器则毫无问题。
基于上述分析,可以得出问题出现在系统引导的最初阶段的结论,于是就采取替换法,使用可以正常工作的32位efi引导器替换64位引导器。
在U盘上做好了Ubuntu 15.04 64bit Live CD之后,手动部署了grub2-efi32并重新编写了XXXXXXXg后,系统可以正常启动。因此可以确定,baytail处理器是可以工作在IA-32E(64位)模式下的。而之前出现的问题的原因在于,固件中缺乏对64位efi的支持。


二、蛋碎的ubuntu和linux
既然live cd已经成功启动,那么直接尝试用它安装ubuntu。由于之前已经在本地存储器上分出了16GB的空间,于是直接在live cd中完成分区并开始安装。不过在分区和安装的过程中,已经发现了不太好的现象:系统经常提示mmc i/o错误。
继续安装,前面一段似乎顺利,但是到最后要么在部署grub的时候,要么在处理交换分区的时候,总是会提示和mmc有关的失败(致命错误),并且根据网上所说在cmos setup中调整emmc设置无效,而出现错误的时间点还有随机性。
emmcbug.jpg

Google了一番之后发现是linux内核对emmc4.5存储器的支持有一些问题,而android的版本提供了一个patch过的内核分支能解决这个问题,linux4.x上这个问题也得到了解决。看来系统的开发者认为用户也需要精通系统内核什么的。考虑到换内核的代价不小,遂放弃解决这个问题的想法。既然emmc上不行就曲线救国嘛,再插入一个U盘并按要求分区,装U盘上,结果是USB控制器报错……


这看上去比之前ubuntu竟然认为efi只有64位于是其32位系统不支持efi还蛋疼。
三、曲线救国
这时由于受够了脑残设计和Atom Z37xx糟糕的性能,突发奇想如果在PC的虚拟机上先把ubuntu装进U盘里并且修改好grub,直接在平板上用不就完事了。
于是配置一个VMWare虚拟机,再删掉虚拟的磁盘,并且修改配置文件使其使用efi而非bios,最后开机并且连接上U盘。
修改的方法是找到虚拟机的配置文件(xxx.vmx),在里面添加一行:
<code class="lang-text">firmware="efi"</code>


不过要注意的是,这种方案对U盘有一定的要求,由于使用了U盘直接作为本地存储器,U盘的读写速度会影响系统效能,并且对U盘的写入寿命也有较高要求,如果试图在TLC U盘上部署系统很可能严重缩短其寿命并且有丢失数据的风险。本文中使用的U盘均为34nm Intel SLC FLASH +  IS916控制器,读写速度均超过70MB/S


安装完之后,开始重新部署grub2。如果对grub2比较了解的话可以直接重新安装grub2,在参数中指定使用32位EFI。如果不了解或者怕敲一堆命令,可以采取手动部署的方法。
首先下载好grub2的32位efi.

attachment icon grub2_efi_ia32.zip 261.50KB ZIP 38次下载

然后找到之前在u盘上分配的efi分区,之后将其放在该分区的/efi/boot/目录下。
这样grub2就部署好了,不过要能直接正常启动,还需要修改其配置文件(不然只能敲命令手工启动……)。
接下来修改grub2的配置文件,同样在该分区下,在/boot/grub/下放好XXXXXXXg
这个文件可以从安装在u盘上的系统中找,也可以自己编一个简单的,可以去掉别的逻辑,只要保证有ubuntu的启动项:
<code class="lang-text">menuentry 'Ubuntu'  {
  
    set root='hd0,msdos3'
  
    if [ x$feature_platform_search_hint = xy ]; then
  
      search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3  1e724c9a-9699-40de-8aca-57fd65383ecd
  
    else
  
      search --no-floppy --fs-uuid --set=root 1e724c9a-9699-40de-8aca-57fd65383ecd
  
    fi
  
    linux   /boot/vmlinuz-3.19.0-30-generic.efi.signed root=UUID=1e724c9a-9699-40de-8aca-57fd65383ecd ro  quiet splash $vt_handoff
  
    initrd  /boot/initrd.img-3.19.0-30-generic
  
    boot
  
}</code>
(set root要根据实际情况处理)


访问efi分区的方法也很简单,首先sudo fdisk -l,会输出和图中差不多的信息
fdisk.jpg

这里就可以看到u盘上efi分区是/dev/sdb5
然后 sudo mount挂载上,再以root权限启动文件管理器就可以很方便地操作
最后插好U盘,开机,设置引导,正常进入系统:
ubuntuX64.png


四、依旧蛋疼


进入系统后,非常万幸的是触屏和GPU和USB控制器工作正常,基本操作不存在问题,但是无线网卡没有驱动。
bcm4330似乎很少用在PC上,而且使用SDIO通信,使用bcm的b43开源驱动不太可行……
正好手里有个360随身WIFI,可以当无线网卡使用,于是自己下载了MTK MT7601的驱动并修改ID+编译,安装上之后可以正常搜索并连上无线,但是似乎只要有什么程序试图建立连接,整个系统就会假死。而且可以确认,在32位的ubuntu上用同样的源码编译出的驱动正常。
同时还存在的问题是系统有很高概率突然失去响应几秒。
和Windows 10 32位相比,ubuntu15.04的耗电速度明显要快,CPU发热量也明显要大一些(很可能CPU一直工作者高频率)。
另外系统启动和退出的阶段都有一定概率挂掉,只能强制重启。

可以说,整个过程中遇到了相当多的问题(很多和系统本身相关),并且最终的体验比较糟糕。ubuntu作为一个比较流行的linux发行版的硬件适应能力糟糕,这方面的思路也存在问题。如果它们的开发者希望有人用它们的系统的话,或许应该把主要精力放在解决对硬件的适配问题上。
来自:计算机科学 / 软件综合
4
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan
8年7个月前 IP:四川
793198
事实上,Ubuntu等Linux发行版的硬件适应能力主要仰仗于Linux内核的驱动高大全的优势。。。[s::lol]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年7个月前 IP:四川
793213
这种架构用win8.1/10是最好的,用其它系统都是找麻烦。。。

另外,新版vmware中已经可以直接在虚拟机设置里指定使用efi了。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年6个月前 修改于 8年6个月前 IP:四川
798959
楼主有没有试过引导64位win10。。。(我的寨板坏了额,没法测试)。。
可能比较难,因为windows比linux更依赖uefi固件服务(快速启动什么的)。。。
要是有uefi-32-64-thunk就爽了,32/64系统通吃。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn作者
8年6个月前 IP:浙江
799090
引用 acmilan:
楼主有没有试过引导64位win10。。。(我的寨板坏了额,没法测试)。。
可能比较难,因为windows比linux更依赖uefi固件服务(快速启动什么的)。。。
要是有uefi-32-64-thunk就爽了,32/64系统通吃。。。
并木有尝试,老平板磁盘IO太慢了懒得折腾。
理论上写好启动脚本,就能实现
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
phpskycn
专家 老干部 学者 机友 笔友
文章
402
回复
4591
学术分
8
2009/03/15注册,2天16时前活动

CV

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}