<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soul Of Free Loop &#187; U盘</title>
	<atom:link href="https://zohead.com/archives/tag/usb-stick/feed/" rel="self" type="application/rss+xml" />
	<link>https://zohead.com</link>
	<description>Uranus Zhou&#039;s Blog</description>
	<lastBuildDate>Sat, 19 Jul 2025 15:42:46 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>Chromebook使用ext4 U盘运行Remix OS</title>
		<link>https://zohead.com/archives/cb-ext4-remixos/</link>
		<comments>https://zohead.com/archives/cb-ext4-remixos/#comments</comments>
		<pubDate>Sun, 14 Feb 2016 18:55:23 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Chromebook]]></category>
		<category><![CDATA[ext4]]></category>
		<category><![CDATA[EXTLINUX]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[Remix OS]]></category>
		<category><![CDATA[U盘]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[桌面]]></category>

		<guid isPermaLink="false">https://zohead.com/?p=1167</guid>
		<description><![CDATA[之前在 Dell Chromebook 11 上体验 Remix OS PC 版的时候是直接使用的普通 USB 3.0 U 盘安装官方放出的 Windows 可执行安装版，在 Chromebook 使用 legacy 模式启动（刷了 RW_LEGACY 模式的修改版 BIOS）运行倒是还比较顺利，只是 Remix OS PC 版 U 盘默认 FAT32 分区格式限制了 Android 的用户空间（data 分区）也最多只有 4GB，这样用起来还是挺不爽的。 搜索之后发现 Remix 论坛里已经有直接的硬盘安装方法可以解决 4GB 用户空间限制的问题，但是我的 Chromebook 就只有 16 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>之前在 Dell Chromebook 11 上体验 Remix OS PC 版的时候是直接使用的普通 USB 3.0 U 盘安装官方放出的 Windows 可执行安装版，在 Chromebook 使用 legacy 模式启动（刷了 RW_LEGACY 模式的修改版 BIOS）运行倒是还比较顺利，只是 Remix OS PC 版 U 盘默认 FAT32 分区格式限制了 Android 的用户空间（data 分区）也最多只有 4GB，这样用起来还是挺不爽的。</p>
<p>搜索之后发现 Remix 论坛里已经有直接的硬盘安装方法可以解决 4GB 用户空间限制的问题，但是我的 Chromebook 就只有 16GB 的空间，同时又安装了 crouton 系统，本来就捉襟见肘的空间再给 Remix OS 分一个区就不太现实了，最主要 Chromebook 原生的 Chrome OS 我是必须要保留的，而且 U 盘格式的 Android x86 也比较符合我的需求，因此想到用 Remix OS PC 版里自带的 Android x86 安装器将 Remix OS 安装到 ext4 格式的 U 盘里。</p>
<blockquote>
<p><strong>提示</strong> <br />
  本文中介绍的安装及启动、升级方法不只是适用于 Chromebook 电脑，也同样适用于普通 Windows PC 机； <br />
  另外这篇文章并不是面向初学者的安装教程之类的，需要你对 Linux 有一定的了解。</p>
</blockquote>
<p>下面介绍一下安装方法以及后续升级的步骤：</p>
<h2 id="准备步骤">准备步骤</h2>
<ul>
<li>一个 8GB 以上的 U 盘，最好是 USB 3.0 的；</li>
<li>下载好的 Remix OS PC 版最新<a href="http://www.jide.com/remixos-for-pc">安装映像</a>；</li>
<li>VMware / VirtualBox / QEMU 等支持 USB 模拟的虚拟机软件。</li>
</ul>
<h2 id="vmware-安装-remix-os-步骤">VMware 安装 Remix OS 步骤</h2>
<p>这里以 VMware Workstation 虚拟机软件为例子介绍如何在 Windows 上将 Remix OS PC 版映像以 ext4 文件系统格式安装到普通 U 盘上，其它的虚拟机软件或者操作系统下步骤也是类似的（直接使用 Chromebook 安装 VirtualBox 也是可以完成的哦）。</p>
<ol>
<li>解压缩下载到的 Remix OS PC 版安装映像（一般为 zip 文件），会得到一个比较大的 iso 文件；</li>
<li>创建新虚拟机，记得启用 USB 控制器支持（默认就会启用），然后添加虚拟光驱并使用解压缩出来的 iso 文件，另外不用添加任何虚拟硬盘；</li>
<li>启动虚拟机，正常的话会看到 Android x86 安装画面，这里选择默认的 <code>Resident mode</code> 并按 Tab 键会出现输入参数的界面，在原有的参数后面增加 <code>INSTALL=1</code>，如下图所示：
</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442937/remixos-install.png" alt="Android x86 启动画面" title="Android x86 启动画面"> </p>
</li>
<li>按回车键启动安装程序，稍等就会出现选择安装分区界面：
</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442936/remixos-detectdev.png" alt="选择安装分区" title="选择安装分区"> </p>
</li>
<li>对于 VMware 虚拟机这时候需要将焦点切换到虚拟机中并插上 U 盘，一切正常的话稍等片刻就可以在虚拟机状态栏上看到新插上的 USB 设备：
</p>
<blockquote>
<p><strong>说明</strong> <br />
  对于 VirtualBox 这样可以直接在虚拟机设置中添加 USB 设备的虚拟机软件会在虚拟机启动时自动尝试加载 USB 设备就不需要专门做这步了； <br />
  QEMU 也可以直接通过命令行或者配置文件加载 USB 设备； <br />
  VMware 也是可以通过 vmx 配置文件自动加载 USB 设备的，只是配置稍微复杂点这里不做介绍了。</p>
</blockquote>
<p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442962/vmware-usb-dev.jpg" alt="VMware USB 设备" title="VMware USB 设备"> </p>
</li>
<li>找到 U 盘设备之后选择上面的 <code>Detect devices</code> 菜单项查找设备，顺利的话会看到要安装到的设备：
</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442937/remixos-usb-dev.png" alt="安装 U 盘" title="安装 U 盘"> </p>
</li>
<li>上图可以看到 U 盘上还没有任何分区，下面可以选择 <code>Create/Modify partitions</code> 菜单在 U 盘上创建并格式化分区，分区文件系统格式最好为 ext4 格式，另外最好也直接将整个 U 盘的空间都用上：
</p>
<blockquote>
<p><strong>提示</strong> <br />
  如果 U 盘上已经存在分区但不是 ext4 格式的也可以在这里删除并重新创建分区。</p>
</blockquote>
<p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442934/remixos-create-partition.png" alt="创建分区" title="创建分区"> </p>
</li>
<li>分区创建并格式化完成之后退出返回就可以在之前的选择分区界面中看到新创建的分区：
</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442937/remixos-usb-partition.png" alt="使用新分区" title="使用新分区"> </p>
</li>
<li>选择新创建的分区开始安装，顺利的话稍等几分钟应该就可以安装完成，中间会提示是否需要将 system 分区设为可写的，为了调试以及后续 root 方便建议选择 Yes 将 system 分区设备可写模式。 </li>
<li>这样安装之后的 U 盘就可以一般的电脑上启动成功了，而且用户空间（data 分区）和系统空间（system 分区）都是 ext4 格式的，不存在 4GB 的大小限制，同时后续如果换更大的 U 盘也比较好扩容。</li>
</ol>
<p>安装好之后我们可以看看 Remix OS PC 版 U 盘的分区及文件系统结构：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost ~]# parted /dev/sdb p
Model: SanDisk Cruzer Glide 3.0 (scsi)
Disk /dev/sdb: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  标志
 1      1049kB  16.0GB  16.0GB  ext4

[root@localhost ~]# mount -t ext4 /dev/sdb1 /mnt/disk
[root@localhost ~]# ls /mnt/disk/
android-2016-01-23  grub  lost+found
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/
data  initrd.img  kernel  ramdisk.img  system
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/system/
addon  app  bin  build.prop  etc  fonts  framework  lib  lib64  lost+found  media  priv-app  priv-setting  tts  usr  vendor  xbin
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/data/
adb  app-asec  app-private  dalvik-cache  dontpanic  local       media     misc      resource-cache  serialno  user
app  app-lib   bugreports   data          drm        lost+found  mediadrm  property  security        system
[root@localhost ~]# df -h /mnt/disk
文件系统              容量  已用  可用 已用%% 挂载点
/dev/sdb1              15G  1.7G   13G  12% /mnt/disk
</pre>
<p>可以看到 U 盘根目录下就是 android-2016-01-23 这样的目录，里面放的就是 Android kernel、initrd 文件以及实际的 data 及 system 目录，安装完成之后 U 盘实际占用了近 2GB 的空间。</p>
<h2 id="chromebook-u-盘启动问题">Chromebook U 盘启动问题</h2>
<p>下面将安装好的 U 盘在 Dell Chromebook 11 上用 legacy 模式启动时会出现无法正常启动的问题。经过初步研究认为是 Android x86 默认使用的 Trusted Grub 安全引导方式对于刷了 RW_LATENCY 模式 BIOS 的 Chromebook 可能存在不兼容的问题。</p>
<blockquote>
<p>刷了 RW_LATENCY 模式 BIOS 的 Chromebook 进入 legacy 模式的方法是在启动时按 <kbd>Ctrl+L</kbd> 键，并选择启动设备。</p>
</blockquote>
<p>为解决这个问题，我在安装好的 U 盘上尝试安装了 Grub、Grub2 等不同的引导程序发现都不能在 Dell Chromebook 11 上正常启动，最后发现如果改为使用 <a href="http://www.syslinux.org/wiki/index.php/EXTLINUX">EXTLINUX</a> 这个 Syslinux 变种不但能支持 ext4 格式分区引导而且支持在 Chromebook 上以 legacy 方式正常启动 Remix OS U 盘。</p>
<p>EXTLINUX 安装也比较简单，这里直接使用 Chromebook 中的 crouton 系统直接安装到 U 盘，下面的操作都需要使用 root 权限才能完成。</p>
<ul>
<li>首先挂载 U 盘分区，并在分区下创建 extlinux 目录，然后运行命令安装 EXTLINUX 相关文件到对应目录：
</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost ~]# mkdir -p /mnt/disk/extlinux
[root@localhost ~]# extlinux --install /mnt/disk/extlinux
</pre>
</li>
<li>生成 EXTLINUX 配置文件保存到 <code>extlinux/extlinux.conf</code> 中：
</p>
<pre class="brush: bash; title: ; notranslate">
TIMEOUT 5
DEFAULT Remix_OS_2016-01-23

LABEL Remix_OS_2016-01-23
	KERNEL /android-2016-01-23/kernel
	APPEND quiet root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive DATA= SRC=/android-2016-01-23 initrd=/android-2016-01-23/initrd.img

LABEL Remix_OS_2016-01-23_Debug
	KERNEL /android-2016-01-23/kernel
	APPEND root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive DATA= DEBUG=2 SRC=/android-2016-01-23 initrd=/android-2016-01-23/initrd.img
</pre>
<p>其中实际标题及目录名称请根据需要自行替换； </p>
</li>
<li>安装 EXTLINUX 引导程序到 U 盘：
</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost ~]# umount /mnt/disk
[root@localhost ~]# cat /usr/lib/extlinux/mbr.bin &gt; /dev/sdb
</pre>
<blockquote>
<p><strong>注意</strong> <br />
  进行此步骤还请特别注意不要搞错了 U 盘设备名，否则可能误安装到你的系统盘之类的哦。</p>
</blockquote>
</li>
</ul>
<p>一般这样修改之后的 U 盘就可以正常在 Chromebook 上以 legacy 模式启动了，这种方式最大的优点就是不影响 Chromebook 原生的 Chrome OS 系统。</p>
<h2 id="remix-os-系统升级">Remix OS 系统升级</h2>
<p>由于 Remix OS PC 版并没有提供直接的在线 OTA 升级方式，但按本文提供的方式安装的 U 盘明显又不能使用官方的 Windows 安装工具进行升级，这里就需要专门介绍一下如何升级新系统了。</p>
<p>其实步骤也算是比较简单的，只需要下载新的映像文件解压缩 iso 里的文件，并使用新的 kernel、ramdisk、initrd 替换到对应目录，然后替换整个 system 目录即可（保留 data 目录就可以保留所有用户数据）。</p>
<p>首先挂载 U 盘分区到指定目录，例如 <code>/mnt/disk</code>，上面已经有具体的命令这里不再说明了。</p>
<p>然后挂载 iso 中的 system 文件，这一步由于 Android x86 system 目录使用的是 squashfs 映像所以略微复杂点：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo mount -t iso9660 -o ro,loop Remix_OS_for_PC_64_B2016020201_CN_Alpha_Legacy.iso /mnt/test
(trusty)zzm@localhost:~/Downloads$ ls /mnt/test/
efi/         initrd.img   install.img  isolinux/    kernel       ramdisk.img  system.sfs   TRANS.TBL
(trusty)zzm@localhost:~/Downloads$ sudo mount -t squashfs -o ro,loop /mnt/test/system.sfs /mnt/image
(trusty)zzm@localhost:~/Downloads$ ls /mnt/image/
system.img
(trusty)zzm@localhost:~/Downloads$ sudo mount -t ext4 -o ro,loop /mnt/image/system.img /mnt/share
(trusty)zzm@localhost:~/Downloads$ ls /mnt/share/
addon  app  bin  build.prop  etc  fonts  framework  lib  lib64  lost+found  media  priv-app  priv-setting  tts  usr  vendor  xbin
</pre>
<p>接着就是将新的 system 目录到 U 盘中（下面的命令开始多了一条删除 U 盘中原来所有 system 文件的操作）：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo rm -rf /mnt/disk/android-2016-01-23/system/*
(trusty)zzm@localhost:~/Downloads$ cp -ra /mnt/share/* /mnt/disk/android-2016-01-23/system/
</pre>
<p>下面是替换 Android kernel、initrd、ramdisk 等文件：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo cp /mnt/test/initrd.img /mnt/test/kernel /mnt/test/ramdisk.img /mnt/disk/android-2016-01-23/
</pre>
<p>最后可以将原来的 Android 目录（例如上面的 android-2016-01-23）也重命名为最新的目录（例如：android-2016-02-02），不过重命名之后千万别忘了把 extlinux.conf 配置文件里的标题和目录名称也改掉哦。</p>
<p>依次卸载上面的一些挂载之后用新的 U 盘启动 Chromebook 就可以看到升级后的效果啦。</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/cb-ext4-remixos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>构建Lava XOLO X900非官方kernel</title>
		<link>https://zohead.com/archives/xolo-x900-kernel/</link>
		<comments>https://zohead.com/archives/xolo-x900-kernel/#comments</comments>
		<pubDate>Thu, 20 Dec 2012 13:38:43 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[手机]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[cifs]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[K800]]></category>
		<category><![CDATA[Lava]]></category>
		<category><![CDATA[OTG]]></category>
		<category><![CDATA[U盘]]></category>
		<category><![CDATA[x86]]></category>
		<category><![CDATA[X900]]></category>
		<category><![CDATA[XOLO]]></category>
		<category><![CDATA[Z2460]]></category>
		<category><![CDATA[印度]]></category>
		<category><![CDATA[模块]]></category>
		<category><![CDATA[联想]]></category>

		<guid isPermaLink="false">http://zohead.com/?p=371</guid>
		<description><![CDATA[本文同步自（最佳显示效果请点击）：https://zohead.com/archives/xolo-x900-kernel/ 本文目标为 Lava XOLO X900 这一印度咖喱味手机，同样 Intel Atom Z2460 的芯，移植 kernel 的方法和之前的联想 K800 手机基本一致，具体请移步下面的链接： https://zohead.com/archives/k800-kernel-otg-udisk/ 经过确认 XOLO X900 默认也是 Android 4.0.4 ROM，同样 3.0.8 kernel，当然硬件会有所不同，不过 OTG U盘所需要使用的 usb-stor [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>本文同步自（最佳显示效果请点击）：<a href="https://zohead.com/archives/xolo-x900-kernel/" target="_blank">https://zohead.com/archives/xolo-x900-kernel/</a></p>
<p>本文目标为 Lava XOLO X900 这一印度咖喱味手机，同样 Intel Atom Z2460 的芯，移植 kernel 的方法和之前的联想 K800 手机基本一致，具体请移步下面的链接：</p>
<p><a href="https://zohead.com/archives/k800-kernel-otg-udisk/" target="_blank">https://zohead.com/archives/k800-kernel-otg-udisk/</a></p>
<p>经过确认 XOLO X900 默认也是 Android 4.0.4 ROM，同样 3.0.8 kernel，当然硬件会有所不同，不过 OTG U盘所需要使用的 usb-storage 模块也是和 K800 一样默认没有开启的。</p>
<p>基于基本相同的 kernel source，先使用 Medfield 默认的配置 i386_mfld_defconfig，发现与现有的 kernel 差距比较多，然后用 Moto 的 i386_mfld_moto_defconfig 编译出的模块加载依然 panic。没办法，硬着头皮与实际运行中 kernel 情况进行对比，发现基于默认配置 i386_mfld_defconfig 进行修改是比较好的方法，而且看得出 XOLO 相对联想还是做了一定的优化，去掉了像 CONFIG_DEBUG_KERNEL 之类的很多调试选项，默认允许了 tun 驱动等。另外声卡相关的配置不同的地方也比较多，经过最终改动和确认，编译之后，先已能成功加载并使用之前在 K800 上编译的那些模块。</p>
<p>XOLO X900 的内核模块和配置文件的下载地址：</p>
<p><a href="http://miseal.googlecode.com/files/x900-kernel-config-modules.7z" target="_blank">http://miseal.googlecode.com/files/x900-kernel-config-modules.7z</a></p>
<p>使用方法和 K800 的基本一致，只是 CIFS 文件系统的使用上有变动：</p>
<p>insmod des_generic.ko<br />
insmod md4.ko<br />
insmod cifs.ko</p>
<p>ASIX Electronics 的 USB 以太网卡的驱动 asix.ko 也已经更新到官方最新的版本（kernel 自带的版本无法使用）。</p>
<p>现已基本可以确认我改动之后的 kernel 和 X900 现有 kernel 的相似性已有 90% 或以上了，不过由于 X900 手机悲剧滴将 bootloader 给锁了，无法刷未签名的 kernel，暂时还没有太好的办法来直接替换 kernel 进行测试哦。</p>
<p>另外有一些需要说明的地方：</p>
<ol>
<li>XOLO X900 现有 kernel 中支持 Kineto GAN 虚拟网卡驱动（支持 VOIP 网络电话的），Moto Razr i 公开的 kernel source 中却并没有这个的支持，为此我手工增加了这个的驱动（上面下载的 kernel configuration 中也有的）；</li>
<li>目前还有 apwr3_0、pax、sep3_7 这三个非免费开源的内核模块没有源代码，暂时也没有办法在网上找到，不过从现在来看，似乎 X900 实际运行时也未使用这三个模块。</li>
</ol>
<p>同样我不对任何导致你的手机 panic 挂掉的后果承担责任，有任何问题欢迎提出指正哦 ^_^</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/xolo-x900-kernel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>构建联想K800非官方kernel支持OTG U盘</title>
		<link>https://zohead.com/archives/k800-kernel-otg-udisk/</link>
		<comments>https://zohead.com/archives/k800-kernel-otg-udisk/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 15:33:48 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[cifs]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[K800]]></category>
		<category><![CDATA[Motorola]]></category>
		<category><![CDATA[OTG]]></category>
		<category><![CDATA[RAZR i]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[U盘]]></category>
		<category><![CDATA[手机]]></category>
		<category><![CDATA[模块]]></category>
		<category><![CDATA[源代码]]></category>
		<category><![CDATA[编译]]></category>
		<category><![CDATA[联想]]></category>

		<guid isPermaLink="false">http://zohead.com/?p=348</guid>
		<description><![CDATA[本文同步自（最佳显示效果请点击）：https://zohead.com/archives/k800-kernel-otg-udisk/ 这几天专门入了个二手的联想 K800 的 Android 手机，看中的就是它是 x86 的 CPU，其采用 Intel Medfield Atom 平台，具体处理器型号为 Intel Atom Z2460，用的 Android 4.0.4 系统，具体其它配置我就不多说的。 优点： 使用 Intel x86 CPU，方便程序的移植（相对 ARM 而言）； 4.5 寸的 1280 x 720 的 IPS 高清屏幕，主要分辨率够给力； 支持 USB OTG； 支持  [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>本文同步自（最佳显示效果请点击）：<a href="https://zohead.com/archives/k800-kernel-otg-udisk/" target="_blank">https://zohead.com/archives/k800-kernel-otg-udisk/</a></p>
<p>这几天专门入了个二手的联想 K800 的 Android 手机，看中的就是它是 x86 的 CPU，其采用 Intel Medfield Atom 平台，具体处理器型号为 Intel Atom Z2460，用的 Android 4.0.4 系统，具体其它配置我就不多说的。</p>
<p>优点：</p>
<ul>
<li>使用 Intel x86 CPU，方便程序的移植（相对 ARM 而言）；</li>
<li>4.5 寸的 1280 x 720 的 IPS 高清屏幕，主要分辨率够给力；</li>
<li>支持 USB OTG；</li>
<li>支持 MHL 视频输出（缺点也在这，下面再说）；</li>
<li>耗电没想象中的那么严重；</li>
<li>使用的 Intel Atom Z2460 CPU 支持 EM64T 64 位指令；</li>
<li>使用的 Intel Atom Z2460 CPU 支持 Intel VT-x 虚拟化技术（不过这个好像在 Android 4.1 中用处才发挥出来，暂时也用不上）；</li>
<li>很便宜。</li>
</ul>
<p>缺点：</p>
<ul>
<li>没有单独的 HDMI 接口，视频输出需要占用 MicroUSB，OTG 与 MHL 无法同时使用；</li>
<li>OTG 不支持 U 盘（也是本文要解决的）；</li>
<li>恶心的乐 Phone，联想没有公开 kernel 源代码。</li>
</ul>
<p>上面说的缺点里，最后一条不公开 kernel source 是联想一贯悠久的恶劣传统，也是我最忍受不了的一条。</p>
<p>一番努力搜寻之后，我终于找到了曲线救国的神主：Motorola。对，就是他，虽然摩托似乎从来就没有开放的基因，但被 Google 收购之后，摩托在其推出的 Intel 手机 Moto RAZR i 上终于有良心了一把：公布了 Moto RAZR i 的 kernel source。由于 Moto RAZR i 与联想 K800 同样采用 Intel Medfield 平台，因此我就赌了一把其 kernel source 会有很大程度上的相似性，结果很幸运小成功了。</p>
<p><strong><span style="color: #ff0000;">1、获取源码：</span></strong></p>
<p>首先在 SourceForge 上抓取 Moto RAZR i 的 kernel source：</p>
<p><a href="http://sourceforge.net/projects/razr-i.motorola/files/" target="_blank">http://sourceforge.net/projects/razr-i.motorola/files/</a></p>
<p>一共 100 多MB，咱先解压，打开 Makefile，确定 kernel version 是 3.0.8 版本。</p>
<p>给联想 K800 root，装 adb 驱动，用 adb shell 连上看，运行 <strong>uname -a</strong> 查看 K800 手机的 kernel version 是 3.0.8-g37de913，啊哈，除了后缀版本一致。然后尝试读取 /proc/config.gz，无奈联想又是没有把 kernel configuration 给导出，找不到 /proc/config.gz 文件，没办法，只能自己根据当前手机 kernel 判断 K800 当前的 kernel configuration 了。</p>
<p>运行：<strong>egrep '(vmx|svm)' /proc/cpuinfo</strong>，确定 CPU 支持 Intel VT-x 虚拟化技术，有点小兴奋。</p>
<p><strong><span style="color: #ff0000;">2、准备编译环境：</span></strong></p>
<p>接着在手机上查看 <strong>/proc/version</strong>，确定联想 K800 kernel 使用的 gcc 版本为 4.3.3，刚好与 Moto 介绍的一致。然后使用 git clone 从下面的地址得到编译 kernel 的 android x86 toolchain：</p>
<p><a href="https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/i686-android-linux-4.4.3/" target="_blank">https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/i686-android-linux-4.4.3/</a></p>
<p>需要注意 git 得到的代码中默认已经把 gcc 4.3.3 给移除了，不过运行 git log 可以看到之前的提交日志里是有的，那好办，运行下面命令回滚到最新可用的版本：</p>
<p><strong>git checkout 286506f01f8ca64d6eb0e33bafb475a5cf10ff37</strong></p>
<p>终于有了编译 kernel 的正确环境了（不是完整开发环境哈）。</p>
<p><strong><span style="color: #ff0000;">3、编译 kernel：</span></strong></p>
<p>Moto 提供的 kernel source 中有几个适合 Intel Medfield 平台的 config 文件，SourceForge 网站上推荐使用 i386_mfld_moto_defconfig，编译时指定 CROSS_COMPILE，但我实际编译之后的模块加载会 kernel panic。好吧，我来尝试应该是 Intel 原始推荐的 i386_mfld_defconfig 默认配置，无法编译通过，排除原因，发现 i386_mfld_defconfig 中启用的几个选项在 K800 中并没有开启，遂决定去掉，同时去掉了 Moto 特有的加密模块。</p>
<p>修改配置之后，能编译了，但编译到 android USB gadget 代码时又有报错，查看代码，发现 Moto 对 android USB gadget 代码做了特殊改动，好吧，这我暂时不需要修改，根据 Moto 增加的 define 修改 drivers/usb/gadget/android.c，去掉 Moto 特有的改动，尽量使代码默认 Intel 原生（看来联想对 Intel 的代码改动很少，这是个好处，嘿嘿，下面也有悲催的地方），再次开始编译。</p>
<p>这次终于比较顺利了，能编译到链接 kernel image 的地方了，但又有报错，这时就不管了，因为我压根就不指望这个编译出来的 zImage 能直接用在联想 K800 手机上，而且联想也没开放制作其 boot image 的工具和方法，就算 zImage 有了也不知道怎么刷到手机上。</p>
<p>接下来编译 kernel modules，这步比较顺利，我把 CIFS、USB Mass Storage（包括 scsi disk 支持）、usbnet、usb serial converter、tun 等需要的模块都选中，都正确编译出来了。</p>
<p><strong><span style="color: #ff0000;">4、修改调试：</span></strong></p>
<p>拿到手机上加载 cifs.ko，正常，/proc/filesystems 中已经有了 cifs，但挂载文件系统时发现 dmesg 里有 out of memory 报错，一会就 kernel panic 了。</p>
<p>强制重启手机，这时才发现 cifs.ko 大小有 3MB 多，明显太大，查看 config 发现默认启用了 debug kernel，Moto 的默认配置中未启用，不得不说联想真是够懒的，这个影响性能的东西竟然木有去掉。</p>
<p>本来想禁用 CONFIG_DEBUG_KERNEL，但无意发现手机里有 /proc/sched_debug 调度器调试文件，这个是依赖 CONFIG_DEBUG_KERNEL 的，说明 debug kernel 必须启用了。最后发现 i386_mfld_defconfig 中默认的 SLUB debug 等几个选项在联想 K800 kernel 中是关闭的，保存 config 重新编译。由于启用了 debug kernel，编译出来的模块不可避免的都很大，不得不用 <strong>strip --strip-unneeded *.ko</strong> 来去除没用的东西。</p>
<p>再次拷贝到手机上，insmod cifs.ko，正常，mount 挂载 Windows 共享目录终于不 panic 了，但用户验证失败，看 dmesg 发现 kernel 缺少 md4 支持，将 md4 模块也编译拷到手机上开始测试：</p>
<p><strong>insmod md4.ko</strong><br />
<strong>insmod cifs.ko</strong><br />
<strong>mount -t cifs -o username=xxx,password=xxx //192.168.1.xxx/share /mnt</strong></p>
<p>挂载终于正常了。小激动人心，灰常不容易，总不辜负我 panic 了好几次的 K800 手机。话说每次 panic 都得强制抠电池再开机滴啊，555。</p>
<p>下面开始测试外接 U 盘（必须要有 USB OTG 线哦）：</p>
<p><strong>insmod scsi_mod.ko</strong><br />
<strong>insmod sd_mod.ko</strong><br />
<strong>insmod usb-storage.ko</strong></p>
<p>插上 U 盘，手机没任何反应，不过在 dmesg 里已经能看到上来的 sda 设备，运行 fdisk -l 命令可成功看到分区，看来只是手机系统没有做自动挂载外置 U 盘的处理（也正常，本来就不支持），自动挂载可以考虑装 StickMount 之类的软件哦。</p>
<p>使用 USB 转 串口（和实际芯片有关）：</p>
<p><strong>insmod usbserial.ko</strong><br />
<strong>insmod pl2303.ko</strong></p>
<p>使用 USB 有线网卡（和实际芯片有关）：</p>
<p><strong>insmod usbnet.ko</strong><br />
<strong>insmod asix.ko</strong></p>
<p><strong><span style="color: #ff0000;">5、总结：</span></strong></p>
<p>到这地步对我来说已经是颇有进展了，我暂时只看重 U 盘支持这个模块，嘿嘿。其它东西等有关时再来折腾了。</p>
<p>下面是我放出的压缩包下载链接：</p>
<p><a href="http://miseal.googlecode.com/files/k800-kernel-config-modules.7z" target="_blank">http://miseal.googlecode.com/files/k800-kernel-config-modules.7z</a></p>
<p>里面包含我现在编译 kernel 使用的 config 和编译出来的一些有用的 kernel modules，不想自己编译的哥们就自行使用，由于这根本不是官方 kernel，我不对任何导致你的 K800 手机 panic 挂掉的后果承担责任，哈哈。</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/k800-kernel-otg-udisk/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
