刷机那点事儿

昨天闲的蛋疼,忙活一个下午给手机换操作系统。结果铺天盖地的教程看的我泪流满面...


最新的Android已经到2.3.4了,我那还是Android 2.1的,有个比较大的缺陷是软件不能装到SD卡里,所以当时用很快就让空间爆满了,一个Fruit Nija怎么都装不上去T T。而且据说2.2以后的系统对内核做了待机优化,可以省下不少电。...另外还有感觉比较糟糕的一点是网络问题,好像经常会阻塞在那里,一定要等阻塞结束才能继续上网。


综合各种原因于是决定把原配踢飞了。


这是我第一次刷手机,之前听多了某些人危言耸听,搞的很是焦虑。为了防止意外发生,于是几乎把各式各样的教程都看了一遍。。。


从刷机一点头绪都没有到确认使用某几个教程是花了点时间的,挑选系统和引导也费了点心思,大概共打开了近百个网页,一个个看过,关掉。教程已经多的跟雪花一样,我就不再贴了,反正我也是用了别人的方法。


这学期上嵌入式系统的3门课(嵌入式系统原理、嵌入式WinCE、嵌入式Linux),其实也就是天天刷机器,其实就是各种电子设备的简陋版。所以就算这回换成了手机,也能见到其中诸多类似的地方。


系统程序保存在ROM中运行,一般分为两部分——引导程序和系统程序。

其中“引导程序”并不是操作系统内部的引导程序,而是类似于PC上的BIOS,它实现了由硬件提供的接口,由此“引导”完成一些初始化工作,再为操作系统提供启动的接口。只要目标操作系统实现了这个接口便可以顺利“接轨”启动了,接下来的工作交给操作系统的boot进行。


虽然是ROM(Read Only Memory),也只是说不能通过常规手段写入,但并不是完全不可写,通常使用特定的烧写器都是可以把数据写入的,其实就是ROM提供了特定的写入开关,平时不开启,但只要打开开关就没问题了。


以前给MP4烧过系统,很简单,只要按照教程在PC上开个软件,再下载系统文件firm一下就可以了。这个跟上面提到的两个部分不大一样。烧MP4的时候并没有改动基础BOOT,而新操作系统对老BOOT的接口实现也没有变动,所以只烧一个程序就可以了(接口统一的好处啊,所以定义接口的时候一定要慎重)。


这学期涉及的嵌入式系统三门课之中,嵌入式原理是最底层的。前面几节课连底层BOOT都要我们自己编写(Assembly),代码倒是寻常,就是配置麻烦,要手动设置起始地址。这在前面几节课初次接触的时候比较头疼,对那些数据不容易理解,不过半个多学期下来,觉得这些也是不足以成为焦虑的理由,其实都是可以通过芯片使用手册清楚的(即所谓“硬件”接口)。以后对于任意新的芯片过来,只要开发人员只要仔细阅读手册即可。如果手册写的不好,开发人员不会用是很正常。


后来嵌入式原理课程终于脱离汇编进入C语言时代了(C实际上也算是低级语言),其实还是不能完全摆脱汇编。在C运行前,还是需要用汇编编写相应初始化代码,才能让C运行起来。这里跟上面提到的手持设备两部分程序类似,都是提供了底层引导,然后才能由主程序继续运行。主要是因为芯片内部没有操作系统,而PC上相应的工作由编译器和操作系统分工完成了。


后来稍微深入看C++,知道全局变量是在main运行以前就在一个初始化队列里初始化完成的,也就是相当于在给C++提供运行环境的阶段吧,只是添加了一些高级机制,如这里的初始化队列,这是编译器的功劳。


以前对大二和上学期上的《计算机组成原理》、《汇编语言》、《微机接口技术》、《操作系统》这几门课的确是厌烦,不过现在来看的确都是依赖这几门课的。就算以前不学到后来也还是要补,以前上课都在打酱油,有的课是因为老师恶心,有的是因为不对胃口,有的是因为那阵子忙其他的去了...总之这几门没有一门学的像样的。现在倒也谈不上有多后悔,这是很正常,就算让我现在去上这几门课我毫无疑问还是会去打酱油的。不过打酱油的时候好歹大概把这门课说的是什么个故事搞清楚了,其实也足够了。就像对于程序,我们要做的也只是在不同的抽象层次上切换着工作,逐层去完成,并没有把所有的源代码都看一遍——这显然是扯淡。程序员的工作归根结底就是Code Manager而已。虽然编码的工作少不了,只是相对管理代码而言,编写几行代码实在是没啥难度罢了,随手一编(要知道很多公司老板或者科学家都是自己写代码来辅助工作的)。


高级语言的目标也是让开发越来越简便,越来越多的人可以顺利的开发。所以如果开发人员只是在意自己是否能写一手好代码那就太OUT了,虽然这也是基础的一部分。时代变了,现在讲的不是单打独斗写个好代码,而是“软件构建”(注:软件构建也只是软件工程的一个环节罢了)。——貌似有点扯远了,不过对于计算机专业的嵌入式课来说,还真谈不上是“搞硬件”——如果这个概念不是说手碰到了CPU和ROM就可以认为是搞硬件的话。说穿了都是程序,只是脱离了PC罢了,广义的计算机,包括一切有稍具运算能力的设备。只是个别地方要稍稍有点电学知识罢了,跟电气工程师那还差得远,现如今计算机领域对电气层细节屏蔽,只要知其然就够了。


经常可以看到搞低级语言的歧视搞高级语言的,说他们不懂原理,搞算法的鄙视做应用的说他们搞小儿科。各自只是工作在不同的抽象层面上罢了,如果一个个东西都要一下子搞清楚过去,估计学个3、4年也未必能做个像样的东西出来。计算机系的这个地方酸的不得了,都说文人相轻,几个程序猿还相轻了,屌丝何苦为难屌丝。我觉得还是要尽快找到自己希望进入的层面,然后前人的知识迅速整合起来,跑前线去工作,不要在从小学数学英语语言学到大学还在基础基础了。所以我觉得之前花了2、3个学期学什么组成原理,什么汇编操作系统的,浪费时间了。其实可以两三周上完的。这也是大学其中一个恶心的地方,随便来一门课不给你上个一个学期根本不甘心。另外还从不把教学效果和学生时间当回事儿,大学你个碧池。


还是回来说手机,手机用的是ARMv6的CPU,实验室用的ARM7和ARM9,不过手机作为一个产品刷起系统来的确麻烦了不少。没有试验仪上面调试的这么方便。由于只有一根寒碜的USB线跟电脑连,所以所有的烧写工作都交给USB了,免不了要装一大堆特殊的USB驱动。这些驱动没有整合成统一的驱动包,所以基本上一块功能一个驱动,要装好几个,但其实本质就是几个通信协议了。


先要关闭手机,然后启动fastboot模式,然后由PC端软件发送指令和数据到手机。Android手机还有个麻烦的地方,即系统和boot都必须是配套的,所以只能先刷boot,再刷系统。一般手持设备都内置了好几个模式,需要通过特殊按键触发。通常有的人说手机刷成砖头了,大概都是因为在刷boot的时候杯具了,然后系统既起不来,也不知道怎么重新刷boot进去吧。


如果连boot都崩溃,那最后能够挽救手机的也只有硬件开关了,通过硬件开关再打开放boot的地址空间就是,做到这一点方法有很多,总之并不难。所以除非那些产品的工程师是白痴,不然应该是要考虑到这点的。


boot烧完之后,只要让手机切换到Recovery模式(手机boot里的一部分功能,也要用硬件开关触发),再由Recovery程序寻找系统镜像安装系统。


不过通过这种方式我烧失败了。原因是网上的boot和系统镜像很多都是分开发布的,但要顺利安装则这两个必须成对。我试了好几个都提示不匹配,最后没辙用了另外一种方法。(网上说什么线刷卡刷,看的我晕死,那么多概念根本就懒得鸟)


另一种方法是软件包办,装了一个SUT(Software Update Tool),然后手机开启fastboot模式,然后配置下软件点几下鼠标就刷好了。这个原理也很简单,只要驱动安装好,这个软件就可以自己找驱动提供的接口去代替手工操作就是。


手机成功刷到2.3.4,论坛上说2.3.4这里有问题,那里有问题,弄的我提心吊胆,生怕出什么问题又要重新刷。不过放我手机上好像没有什么明显的问题,至少用了一天是这样。一切正常,不知道是界面确实好看了还是我看2.1的界面看久了觉得腻,总之感觉不错。软件都交给一个叫“豌豆夹”的软件了,可以直接在PC端完成下载安装一条龙,也可以发短信备份通讯录什么的比较方便。


上WinCE的时候用过Platform Builder,用于定制WinCE软件,设置编译选项之后编译一下再扔设备上运行就可以了(即交叉编译)。关键参数有几项用于选择运行环境的,主要是CPU型号,有些设备上的指令和内存是高位存储的,有些是低位存储的,都知道编译后的东西是2进制文件,一旦高底错位根本就不可能正常运行,这也是导致不能兼容的主要原因。一般可以通过CPU去区分(一般存储器控制单元都做在CPU上,存储器本身并不自行管理)。


该软件先是提供了WinCE操作系统内核和一些常用的软件,再给你一个像Soft Market的工具条,可以按需要把它加入到目标系统里,大多是些源代码。这丫放到实验室那破电脑要编译10分钟,以为很久,结果Linux下面很多软件一编译就要大半小时,才知小巫见大巫。Android用的是Linux内核,不过大体上做系统也应该跟WinCE的方法差不多的。只要有有心之人做个集成环境,相信会自己做系统的就有一大片了。主要编译的时候不要弄错CPU就行了,很多手机刚安装完系统就在里面的软件都是在构建系统的时候这么放进去的。


如果没有IDE就比较麻烦,前几天给Linux编译软件,发现编译器的编译选项各种复杂...或者也不能说复杂,总之就是要翻手册才好看懂,再加上那些乱七八糟的设置---比如对应用软件的源文件放置肯定也是有一些要求的,这样纯手工去操作就会比较麻烦。


...Android用户默认是没有Root权限的,后来被很多人给Hack出来,我手机的系统就这么给QJ了..现在用的惴惴不安。万一弄进什么吸金软件我就欲哭无泪了...

 

等有时间咱自己做一个rom去。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值