kindle底层系统详细说明
开篇
Kindle有一个“魔弹”,可以随时在上面安装自定义代码,包括从添加越狱键、自定义屏幕保护程序或自定义字体,一直到在上面安装完全不同的操作系统,比如Android操作系统。这些工具已经存在,我们知道如何使用它们。将提供简单的分步说明,以及已经包含我们想要的自定义更改的自定义分区映像。
为什么不是快速启动模式
到目前为止,我一直在想,因为fastboot太强大了(因此对初学者来说太危险了),所以我们应该避免使用它,尽可能使用amazon提供给我们的工具,尽可能接近它们的默认配置。这意味着使用尽可能简单的方法将自定义代码安装到kindle上。
越狱
因为所有kindle型号都可以安装签名的更新包,正常的越狱程序会添加一个自定义密钥,这样开发者签名的更新包就可以使用“更新你的kindle”菜单项安装,就像它们是亚马逊签名的更新包一样。这些开发人员签名的更新包含安装过程中运行的安装脚本,可以对kindle进行任何更改,包括添加新的屏幕保护程序、新字体,甚至USB网络,这样您就可以使用SSH获得根shell。
破解
当一款kindle机型问世,或者对现有kindle进行新的固件更新时,真正的问题是如何首先将自定义密钥安装到主系统根分区上。这需要大量的研究来找到获得根访问权限的方法(通常称为“根”设备),以便可以运行自定义代码。对于kindle,rooting它做的第一件事就是安装自定义密钥,这样用户选择的自定义应用程序就可以使用开发者签名的更新来安装。
在新的k4(kindle mini)上,原来根访问是直接在diags的USBnet菜单项中提供的。只需将ENABLE_DIAGS添加到USB驱动器并重新启动,然后从DIAGS菜单中启用USBnet并使用SSH获得一个根shell。使用根shell,您可以进行任何更改并安装任何程序。首先要做的一件事是将dropbear文件从diags复制到main,这样当从main引导时就可以使用SSH获得一个根shell。另一件事,你想安装自定义密钥,以便开发人员签署的更新可以安装从“更新你的kindle”菜单,就像所有其他kindle。
对于触摸,事情与K4有点不同,因为当您从diags菜单启用USBnet时,diags缺少允许SSH的文件。在这种情况下,有必要找到一个漏洞来利用它。第一个发现的是“MP3 bug”,它允许一个专门设计的MP3文件执行它包含的代码。这是用来创建MP3越狱,它安装了自定义密钥,以便可以从“更新kindle”菜单安装开发人员签名的更新。
固件更新
随后固件版本5.0.3问世,修复了MP3的漏洞,因此需要一种新的方法来破解5.0.3固件附带的新Kindle。替换越狱使用当前的“tar根路径bug”,它使用数据.tar.gz将自定义代码安装到可写位置,但不执行此自定义代码。有必要研究启动脚本,找到用户可以编写自定义代码的位置数据.tar.gz并找到一个方法来触发代码的执行。在/var/local中找到了多个位置,其中可以包含在启动期间执行的自定义脚本代码。使用的第一个位置是/var/local/system/locale,但这只在触摸屏上起作用,而且只在从main引导时起作用。
继续搜索其他位置和触发方法,以防新固件禁用现有方法。发现了多个位置和触发方法,其中一些仅在main(正常模式)中起作用,一些仅在diags(工程模式)中起作用,一些仅在Touch上起作用,而另一些则在K4上起作用。我们将在这个线程中使用的是“/var/local/system”/mntus.参数“有效负载脚本。这一个特别强大,因为它运行在触摸屏上的主要和诊断,它运行在K4在主要和诊断,它运行在K3,和DX和DXG。除了这个特殊的有效载荷目的地是强大的,它也是危险的。如果你使用mntus.参数专为不同型号的kindle设计,它可以让启动脚本擦除你的USB驱动器。如果你在使用kindle运行自定义代码时犯了一个小错误,它会严重阻塞你的kindle,使你无法启动main或diags,也无法访问USB驱动器。在这种情况下,只有“USB Downloader”模式才能访问它。它可以部署在K4上,并在数据.tar.gz文件。
USB下载模式和魔法按键
我们可以通过插入USB电缆进入USB下载模式,使电源指示灯亮起,然后按住电源按钮直到指示灯熄灭,然后在松开电源按钮之前,我们需要在松开电源按钮的同时按住“魔法按键”。每种kindle型号都有一个不同的“魔法按键”(在源代码中实际上是这样称呼的)。Touch使用Home按钮(它唯一的按钮)作为魔术键。K4使用五向向下按钮作为魔术键。K3使用音量下降按钮(Vol-)作为魔术键,但它也使用不同的VID/PID,需要不同的工具与之通信。
随着我们对USB下载模式的了解,我们称之为USB下载的模式也在不断变化。在这些论坛中,它可以被称为“USB HID”模式(因为这是它在Windows设备管理器中的显示方式),也可以被称为“USB恢复”模式(因为这正是我们想要使用它的目的),但在制造商文档中,他们称之为“USB Downloader”模式(这是它的官方名称)。在USB Downloader模式下,K4和Touch似乎是具有VID/PID 0x15a2/0x0052的USB HID设备。可从制造商网站下载的特殊软件(飞思卡尔网站)可以使用VID/PID与kindle通信。我们在这个线程中使用的软件称为“MfgTool”。它允许很多事情,包括向mmc存储设备写入新固件。但我们用它来加载和执行kindleram内存中的自定义代码。在这个线程中,我们使用定制的u-boot引导加载程序代码来选择我们想要的引导模式并引导到那个模式。这里提供的引导模式有main、diags和fastboot。对于一个kindle砖如此严重,它只能引导到fastboot模式,我们需要修复它要么使用MfgTool(在USB下载模式下工作)或我们可以修复它在fastboot模式下使用kindle fastboot工具。
快速启动模式——为什么要使用它?
使用fastboot工具处理命令行参数比使用MfgTool更快更简单,MfgTool可以做许多与fastboot相同的事情,但是需要自定义XML文件来配置您想做的每一件事情。Fastboot更简单,所以我们将使用它。我们只使用MfgTool引导到main、diags或fastboot模式。
Fastboot功能强大,可以轻松擦除或重新编程kindle mmc存储设备中的任何内容(包括USB驱动器、主固件和diags固件)。危险之处在于,它甚至会破坏fastboot工具与之通信的固件部分,使fastboot不再工作。在这种情况下,您可以回到MfgTool,它将始终工作,因为它只依赖于CPU芯片(iMX50 SoC)内置的功能。这使得fastboot的危险性有所降低,因为即使您通过错误地使用fastboot来禁用fastboot支持,您也可以使用MfgTool恢复kindle。使用MfgTool作为备份方法,使用fastboot可以减少恐惧感。
所以,首先使用fastboot的原因是当一个kindle变成砖,它不能引导到main或diags,但仍然可以引导到fastboot,我们可以使用fastboot来修复我们的kindle。即使我们破坏了它,使fastboot不再工作,那么我们最终可以开发定制的XML文件,这样我们就可以使用MfgTool来修复fastboot模式,这样我们就可以再次使用fastboot模式来修复kindle。
强大的快速启动模式
Fastboot可以将映像文件写入主分区、diags分区和数据分区。它还可以编写新的引导加载程序代码,如果执行不正确,则会禁用上面提到的fastboot。但是,(这是我今天晚上刚刚意识到的突破性的发现)数据分区包含USB驱动器,这是将内容上传到kindle的正常方式。
真正的突破是当你需要一个特别的数据.tar.gz以及运行名.sh当你无法访问U盘时,你可以使用fastboot将这些文件放到U盘上!怎样?创建一个包含这些文件的vfat格式的映像文件,然后使用fastboot将其flash写到数据分区。就这么简单!
我们甚至可以使用fastboot来闪存自定义的main或diags分区映像,这些映像是官方分区的备份映像,其中添加了额外的文件,例如自定义越狱密钥、丢失的SSH文件,以及任何您想要的自定义屏幕保护程序和自定义字体。不需要安装任何东西,而且预先安装的工厂固件是否修复了所有错误,从而无法通过任何其他方法添加自定义代码也无关紧要。只要亚马逊没有禁用fastboot,这种方法就一直有效,即便如此,MfgTool仍然可以用来在kindle上安装自定义代码,就像fastboot工具一样,但配置起来有点复杂。当然,在创建mfgtoolxml配置文件之后,可以多次使用它们。
永久解决方案
亚马逊阻止我们安装自定义固件的唯一方法是,如果他们在新Kindle上禁用“解锁”USB下载模式,以便只有使用其官方(秘密)密钥签名的固件才能写到mmc存储设备。根据制造商文档,CPU SoC似乎是以“加密固件”模式从工厂来的,并且在首次配置时必须永久烧毁内部保险丝,以便像kindles现在支持的那样未加密(打开)固件。
这意味着任何现在可以运行自定义代码的kindle都将始终能够运行自定义代码。只有新的Kindle才能锁定,以防止这一点,因为它不烧允许自定义代码的保险丝。K5 u引导源代码包括对多个kindle型号的支持,包括使用签名固件包的未来型号,因此未来的kindle型号可能会防止固件映像。在这种情况下,我们必须返回当前的方法,利用bug来获得根访问。
对我们有什么好处?
我的kindle现在处于“fastboot only”模式(它不能启动main或diags,也没有USB驱动器访问)。这样做是因为mmcblk0p3包含损坏的mntus.参数我不知道如何用fastboot修复这个问题。我知道变砖是因为mntus.参数不会返回到在运行名.sh脚本被调用。我可以用不同的运行名.sh修复损坏的脚本mntus.参数文件(替换或删除它,或销毁mmcblk0p3)。但是我不能用普通的方法把这些文件添加到我的USB驱动器上。如果问题出在主分区上,可以通过引导到diags来修复。但是它在mmcblk0p3上,我不知道如何(或者是否)使用fastboot刷新分区。
所以我会用我所知道的去做。我将创建一个包含运行名.sh我需要修复文件数据.tar.gz我要启动它运行名.sh文件。我将使用fastboot将该映像文件写入数据分区。然后我将重新启动到诊断模式。在这一点上,我相信这将做的工作。
对你们有什么好处?
即使mmcblk0p3、main和diags都已损坏,我们也可以使用fastboot将修复的(原始)映像写入main(系统)和diags分区,并将自定义USB驱动器映像写入包含运行名.sh以及数据.tar.gz维修mmcblk0p3。这样做可以救K4变砖,但有固件映像触摸使用fastboot有问题。这可以通过为MfgTool配置文件使用bist(内置自检)构建u-boot来克服,其中包括“修复的”fastboot代码(如果它有任何bug需要修复的话)。
最后
所以,全部都是好消息。不仅对我,而且对每个人。对?让我们听听反馈吧!最起码,kindle在fastboot模式下给电池充电的速度要快得多,所以它至少在这方面是有用的。
编辑:由于这是编写的,我们发现一个大小限制,防止fastboot写入大型映像文件,如主系统分区(mmcblk0p1)。我清理了kindletouch,其他许多人也成功地清理了kindle,方法是使用fastboot从包含SSH预安装的映像中写入较小的诊断分区(mmcblk0p2),然后引导到诊断模式,并使用linux“dd”命令从备份映像中写入较大的主系统分区。这种恢复bricked kindle健康的方法与以前的方法相比已经大大简化,并在“simple kindle touch(and k4nt)debricking method”一文中进行了说明。
kindle 3 GPL源代码包含一个uboot-1.3.0-rc3文件夹。”grep-r fastboot*“找不到fastboot。所以你的“加载”(否定)问题的答案要么是“是的,fastboot不在那里”,要么是“不,fastboot不在那里”。另一类问题是“你停止打你妻子了吗?”。在这种情况下,英语很难学。
Fastboot是新kindles中u-boot引导加载程序的bist(内置自检)版本,它从mmc加载,当您使用idme bootmode Fastboot引导时运行。
USB Downloader模式与fastboot有很多相同的功能,并且它不能被锁定以防止在解锁后闪烁未签名的自定义代码(通过烧掉SoC中的配置保险丝)。到目前为止,所有的kindle都没有锁。
kindle5(touch)u-boot源代码中有一些注释,显示了为使用签名固件映像的未来kindle设备配置设置,因此未来的kindle可能会被锁定以防止自定义固件,然后我们只能利用固件错误来运行自定义代码,就像我们过去所做的那样。
Kindle3使用了飞思卡尔IMX35CPU SoC,也有USB下载模式。它使用与iMX50 CPU SoC不同的USB VID/PID,并且需要不同的下载工具(AdvancedToolKit,而不是MfgTool)。我已经在我的主机PC上安装了AdvancedToolKit,并且我验证了它报告说它在我的Kindle3中成功下载并运行了代码。
如果你真的想在kindle3上使用fastboot,你可以从kindle4gpl源代码中进行备份。
k4和K5U-boot的GPL是独立的,因此没有denx或freescale依赖项。我造的,但它被剥去,以适应更小的mmc。k5(触摸)u型行李箱更大,支持更多的设备,包括k4。我在KindleSelectBoot中使用了这个。根据可用大小,您可以只需将mmc中的K3U引导映像替换为k4或k5 u-boot映像。您可以使用AdvanceToolKit(K3版本的MfgTool)进行测试,以下载并运行k5 uboot映像。K3魔术键=音量-。