改机的目的无非是增加新的功能或是去掉多余的功能,而我们对sony reader prs-505的改机则是添加功能。 首先我们需要了解一下sonyreader的一种机制: 当用户插入存储卡到sonyreader中时,sony reader至少完成以下两种功能: 1、 sony reader扫描卡中的所有文件,找出sony reader支持的文件并显示给用户; 2、 如果卡中存在Sony Reader\software\ autorun.xml,则会解释执行这个文件。 原始Universal_Flasher_2.0包中的内容虽然有点复杂,但原理就是通过存储卡中的SonyReader\software\ autorun.xml绕了一个很大的弯添加了时间显示这一个功能的。 Universal_Flasher_2.0通过autorun.xml修改(更准确的说应该是替换)以下两个文件就可以达到添加时间显示功能。 1、 opt\sony\ebook\application\resources\scripts\main.xml 2、 opt\sony\ebook\application\resources\applicationStart.xml 但添加时间显示不能xx满足国内玩家的需求,国内玩家还需要对中文的支持。所以有高手在Universal_Flasher_2.0的基本上进行了一些修改,提供了刷机版及免刷机片两种,如: 刷机版: tttxxx1提供的刷机包 exnaba在tttxxx1基础上更新了刷机包 neri又在两者的基础上更新了新刷机包 免刷机版: Ninegua提供的免刷机版 当然还有其它高手提供的刷机包不一一列举。 所有的刷机包目的无非就是执行两个命令: 1、 mount --bind /Data/chinese/FONT/opt/sony/ebook/FONT,这条命令用于加载字体; 2、 mount --bind/Data/chinese/resources /opt/sony/ebook/application/resources这条命令用于加载sony reader prs-505的资源;(菜单没有中文化的没有这个mount) 即把字体及资源放到sonyreader的内存盘中,然后通过mount–bind命令“软替换”掉系统的字体。 不同的是: 1、免刷机包直接在Universal_Flasher_2.0中执行这两个命令。没有更改机器,但每次重启都需要执行一下刷机包。 2、刷机包则通过修改opt\sony\ebook\bin\ tinyhttp.sh这个文件,在这个文件中添加了如下两条命令: mount -t vfat -o rw,shortname=winnt/dev/mtdblock17 /Data sh /Data/chinese/autorun.sh 然后在内存盘中添加chinese/autorun.sh,这是一个很普通的sh脚本,内容如下: #!/bin/sh mount --bind /Data/chinese/FONT/opt/sony/ebook/FONT mount --bind /Data/chinese/resources/opt/sony/ebook/application/resources 至于为什么修改tinyhttp.sh,这xx是随便选取的,你也可以选择别的sh文件,只要是sony reader中已经存在的sh文件。 至于为什么不直接把两条mount命令放在tinyhttp.sh文件中,可能作者考虑了两个方面: 1、 如果内存盘出错,则即使执行了sh autorun.sh这条命令,但autorun.sh这个文件不存在,所以不会执行,避免了mount出错; 2、 以后功能的扩展,如果有什么新的功能,则不需要再刷机了,只需要添加相应的功能模块到内存盘中,然后修改内存盘中的autorun.sh这个文件,重启一下就可以,不用再次刷机,这样就减少了多次刷机的风险。 但为什么网上出现有部分人刷机不成功呢?除了没有严格按照操作指导刷机的外,还有另外一个非常重要的原因:sony reader的内存盘不是很稳定。 按sony reader的原理来讲,如果能成功使用免刷机版,那么一定可以使用刷机版。但因为sonyreader的内存盘不稳定,导致我们误以为刷机失败。分析如下: 如果我们成功执行了两个mount命令,那么在两个mount命令之后还有许许多多命令,比如:显示要读资源及字体。这些资源及字体在mount命令之后是指向内存盘的,如果内存盘中有字体及资源有错误,那肯定就会导致读取失败,从而导致一种刷机失败的假象:就是sony reader启动显示starting up然后就不动了,通过用针按后面的reset又可以重启,但每次都只显示starting up。 知道了原因就有解决的办法,在sonyreader启动并显示startingup的一瞬间,我们把sonyreader连接到电脑上面,这样我们就可以访问sony reader的内存盘了(如果显示starting up时间过长再连接电脑,则即使连接到电脑上面,也不能操作sony reader的内存盘),然后删除autorun.sh这个文件。断开sony reader与电脑的连接(这时sony reader还不能用),然后我们用针按reset重启,机器重启后跟没有刷机一样进入了英文菜单界面,因为是内存盘损坏,我们通过sony reader的菜单:settings->advanced settings->format internal memory格式化内存盘,再通过电脑重新拷贝字体及资源到sony reader的内存盘中(不需要也不可以再次在SD卡中放刷机包),这时再重启之后就可以使用中文了。 不管是使用免刷机版还是刷机版,如果出现失败的情况,很大程度上是内存盘出错引导起的,所以,如果没有什么特殊需求的话,{zh0}不要把书及一些其它东西放在内存盘上面,以免内存盘中的字体及资源数据受损。字体及资源文件受损的话轻则sony reader重启,重则sony reader无法启动。当然啦,没法启动可以用上面的方法再重置一下内存盘,但这样还是有点麻烦。 总结: 1、 其实刷机也没有那么大的风险,只要严格按照刷机流程来,基本上是没有问题的。 2、 以上tttxxx1等提供的刷机包中除也修改tinyhttp.sh外,还修改了opt\sony\ebook\application\resources\scripts\ main.xml及opt\sony\ebook\application\resources\ applicationStart.xml这两个文件,从原理上讲这两个文件是没有必要修改的,因为执行了mount --bind /Data/chinese/resources/opt/sony/ebook/application/resources后,就不会使用mount前的/opt/sony/ebook/application/resources目录下的文件了。因此刷机包可以修改一下。 稍微研究了一下刷机包原理,不对的地方请大家指正。 |