囧 又发原理贴。我很恶俗啊。嗯嗯
这个原理很简单。UE打开固件,转到偏移0×728D0,就可以看见固件的索引区,即INDEX区了。里面有很多明文显示的路径名和文件名。没错。这些就是固件内包括的全部文件及其路径了。
那么解释一下,文件名很好理解。就是文件名。文件名之前的4字节,是该文件的大小,高字节在下。在这之前的4个字节,是该文件的相对偏移量,也是高字节在下。该偏移量的基准量是INDEX区的起始位置,即0×728D0。
举例来说,0×72990这个地方,是固件内第一个文件的名字,叫做APPDATA\PYTABLE.bin。在其前面的4个字节是4A A3 00 00,也就是说,这个文件的大小是0×0000A34A。再前面的4个字节是00 28 00 00,也就是说,这个文件的相对偏移量是0×00002800,也就是说,这个文件在固件内的绝对偏移量是0×00002800+0×728D0。
除了这8个字节和文件名以外,其他数据对解包无用。于是无视掉了。
就像同志们看见的,INDEX区也记录了目录。比如一上来就是APPDATA。其实也是一样的,前面的4字节是表示大小,目录的大小固定都是0。再前面的4字节记录的是偏移量,该值和该文件夹下第一个有效文件(不包括子文件夹内文件)的偏移量相同。对于APPDATA,其文件夹下第一个有效文件的偏移就是上面说的PYTABLE.BIN的偏移,因此其这4个字节也是00 28 00 00。
那么解包时,读取这些数据,记录文件夹、文件名、文件大小和文件偏移。建立相应的文件夹,从相应偏移量读取相应大小的数据,并将这些数据保存在相应的文件夹内,命名为相应名字,就完成了解包了。
解包出来的固件,其实没啥用。。。呃。。。本意是解包后美化固件可能更为简单,但是现在发现,要组包貌似很困难。。。期待高手帮助。。。
以上。再度原理完毕……
分类归档: 嵌入式相关
M30固件解包原理
M30固件字库替换原理
呃,这个,思路很混乱。最近比较疲劳,又有点喝多了……(台下西红柿飞来:酒鬼去死……)
(擦去脸上西红柿)咳咳。嗯。言规正传。说一下M30的字库替换原理。
M30和其他嵌入式设备一样,字体是以点阵的形式存储在机器里面的。所谓的点阵字库就是,以0、1记录点是如何显示的,并将这些点组合起来……这句话我自己都看不懂了……举例来说:菜单中的第二项上面的字是一个24×24的字,那么在固件里面,该字的存储就是一个24×24bit的一串数据,这一串里面,每一个bit是0则该点为黑,是1则该点为白色。最后,将这些点排练成一个24×24的方形,那么那些点就会组合出一个字来……貌似还是很难理解……
呃,算了,点阵字库的话,大家百度一下好了。
实际反映出来,就是用ISE打开固件,以2.0修正版为例,将图片格式定为1位象素 2色模式,并将图片大小变为24×24,然后,跳转到0×02461054偏移量,就可以看见一只“一”字,再往下翻就是“丁七万丈”等等。这就是一套点阵字库。
想要修改字体,就把相应字的点阵改掉就可以了。比如“一”字,我不想让他显示为一个横杠,那就改掉这24×24的图片,把它变成随便什么样的形状,那么,刷机后,凡是24×24的“一”字,都会变成你改的那个样子。
这就是单独修改一个字或者几个字的修改法。
但是,一般大家修改都是想要批量修改,就是将整个字库的字都改掉。那么一个一个修改就太累了。于是再来讲一下字库的存储格式,
M30里面,字库的存储是以几个名字为OUFTxx.bin的文件形式存在的,具体可参看未打包固件的\RESOURCE\LANGUAGE\CHINESE下。xx是字体的大小,有24、16、12三种。以下说明都以24的为例,其他大小的基本一样。
每个bin文件内,最开始是文件头,28 0A 00 00 之类 ,然后是整个字库内字的UNICODE代码,以高位在下的方式记录,就是接下来的20 00 21 00,到00 4E 01 4E,一直到84 9F 99 9F 9F 9F。这些编码取出后,查询UNICODE码表就可以得出其中用到的所有的字,就是我以前发出来的那个貌似是水帖的东西。那个就是全字库。包括英文和符号,一共2600个字符。
接下来,就是点阵字库区。一个24×24的字,应该是24×24/8=72BYTE。但是实际查看可以发现,每个字是76BYTE,中间有4BYTE的附加数据。该数据的格式貌似是00 0x 00 18。猜想其中18应该是代表24的字库,0x这个数据不定,用处也不定。但是经过某兵兄的测试,该4字节数据,只要不动他,就是正常的。所以这4BYTE数据只要照搬到我们自己修改出来的字库里面就好了。
另外,现有的字库替换并没有动到英文字符和符号。用ISE可以看出,英文字符和符号的编码和中文字稍微有点不同。为了避免麻烦就没有去动。不过严格按照他的样子作出来的话,应该也都是通用的。
所以替换字库的流程如下:首先用一些专业字模生成工具生成标准汉字字模,我用的是 字模III。当然是破解版……呃……支持正版啊!……。软件的用法就不多说。软件生成的字库是标准的一个接一个的24×24字库。所以需要写个软件处理一下,将BIN文件的头、开头的编码数据和未修改的英文字符编码数据加上,然后,从原BIN文件读取一个4BYTE的附加数据,再从生成的字库中读取72BYTE的字模数据,一个一个的组起来,由此生成一个符合标准的OUFTxx.bin。
然后,在固件中找到相应的OUFTxx.bin的位置,将现有的数据替换为我们自己做好的OUFTxx.bin。然后刷机。就可以完成字库替换了。
嗯嗯。很混乱哪。我自己都快看不懂了。不过大致就是这个样子了。
另:在固件中替换OUFT这个活,其实很烦。要是能把固件解包再重打包就好了。。。。。。
再另:求高人写个通用的生成OUFT的程序。。。呃。。我们自己写的都是简易型,拿不出手的东西。。。
再再另:有啥问题跟帖提问或者PM吧。。尽量给你解释。但是,本身不是语言能说清楚的,自己试试就好了。
再再再另:不要乱搞!这个东西很核心的。字库替换如果出错,轻则显示不正常,重可能无法开机。本人就因为漏了一字节的数据,导致机器开机不能,也不能正常方法修复,最后是拆机短接清空flash修复的……嗯。以上。
TI DSP中的CMD文件
最近开始研究TI的DSP。初步接触,对CMD文件很有些头疼,经过多方学习,也和TI的一些第三方支持如北京瑞泰等接触学习了一下,终于弄明白的CMD文件的相关信息,特此共享之。
CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。
那么我们知道,在编写TI DSP程序时,是可以将程序分为很多段,比如text、bss等,各段的作用均不相同。实际在片中运行时,所处的位置也不相同。比如text代码一般应该放在flash内,而bss的变量应该放在ram内。等等。但是对于不同的芯片,其各存储器的起止地址都是不一样的,而且,用户希望将某一段,尤其是自定义段,放在什么存储器的什么位置,这也是链接器不知道的。为了告诉链接器,即将使用的芯片其内部存储空间的分配和程序各段的具体存放位置,这就需要编写一个配置文件,即CMD文件了。
所以,CMD文件里面最重要的就是两段,即由MEMORY和SECTIONS两个伪指令指定的两段配置。简单的说,MEMORY就是用来建立目标存储器的模型,而SECTIONS指令就是根据这个模型来安排各个段的位置。
MEMORY指令可以定义目标系统的各种类型的存储器,及容量。MEMORY的语法如下:
MEMORY { PAGE 0 : name1[(attr)] : origin = constant,length = constant name1n[(attr)] : origin = constant,length = constant PAGE 1 : name2[(attr)] : origin = constant,length = constant name2n[(attr)] : origin = constant,length = constant PAGE n : namen[(attr)] : origin = constant,length = constant namenn[(attr)] : origin = constant,length = constant }
其中。PAGE关键词对独立的存储空间进行标记,页号n的最大值为255,实际应用中一般分为三页,PAGE [...]
M30固件 菜单条透明原理、实现及转换工具
本文是群内兄弟7号兄研究出来的结果,本人只是总结了一下。呵呵。向7号同学致敬!
M30固件里面,菜单条的一个大黑边实在是很郁闷。但是实际上,可以通过美化固件,将菜单条的形状任意改变。
首先说一下原理。其实很简单的道理:M30固件里面,菜单条的形状是一个完整的矩形。但是显示出来的是圆角矩形。也就是说,有一部分图片并没有显出来。通过查看可以发现,没有显示出来的部分,颜色均为#FF00FF。那么就是说,只要是颜色为#FF00FF的像素点,固件在显示的时候,都将其做透明化处理。根据这个原理,就可以很轻松的实现任意修改固件内菜单的显示形状。
但是具体实现时有一点小困难。就是在M30固件内,其图片格式是32bit的BMP,也就是一个像素点是4BYTE数据。但是一般电脑内的图片,均为24bit的BMP,其一个像素点仅为3BYTE数据。每一个像素点缺少了8bit。而且,使用的工具Image Search Editor(以下简称ISE),其对图片的导入导出也是按照24bit来进行的。所以,可能会出现外面制作好的图片,导入其中却不能使用的问题。原因就是这个样子。
不过,ISE内还提供了另一种方法,就是将BMP文件导出为BIN,也可以将BIN文件导入覆盖BMP。这样就能完整的保存数据。其所使用的BIN文件,其实就是去除了文件头尾的BMP文件。所以,只要有制作好的32bit的BMP,简单的处理就可以将其转换为可用的BIN。
那么在具体实现时,可以如下操作:首先在PS里面,新建一个293*60的图片,格式设为8bitRGB。新建完成后,先在右下角 通道 一栏中新建一个Alpha通道。完成后,就不用管了。正常的制作处理图片即可。将需要透明的点变为#FF00FF就可以。保存的时候,选BMP,并勾选 Alpha通道 选项。出来的文件应该就是一个32bit的BMP了。文件大小应该是70376字节。
随后,用UE之类的工具打开该文件,将文件的前54字节和最后2字节去除。文件大小变为70320字节。另存为BIN。就是一个可以使用的BIN文件了。
为方便使用,7号兄使用Delphi写了一个专用工具,可以实现BIN和BMP的互转,那么就不用那么麻烦的自己去用UE修改。使用该工具,就可以将文件方便的转换为需要的格式。等下7号兄就可以将该工具上传了。呵呵。
这样。M30内菜单的可定制性大大加强。相信大家也能做出更为个性又绚烂多彩的固件吧~^_^
转换工具已经上传。内附使用说明,如有不明可以留言,我尽量答复。呵呵
转换工具下载
Intel Atom+MID
前几天一个同学说参加IDF的志愿者面试,我才知道了Intel这一年度盛事。作为CPU制造业的龙头,英老大的一举一动对业界都很有分量。这次IDF,英老大更是带来了一个伟大的小东西,应用ATOM凌动的MID设备以及台式机。
首先说下ATOM凌动。Intel于3月3日正式宣布推出迅驰凌动处理器技术“Centrino Atom”,该种处理器有两种,一种是应用在MID产品上的,其研发代号为Silverthorne;另一种是应用在华硕Eee PC与后续台式互联网终端这样的产品,其研发代号为Diamondville。貌似刚结束的IDF08上,是正式发布ATOM处理器,并同时发布其中文名凌动。
此次发布的凌动处理器包括5种SKU,其功耗规格在0.6瓦至2.5瓦之间,速度可以达到1.8GHz,相比之下,当今主流的移动酷睿2双核处理器的功耗在35瓦左右;其尺寸不到25平方毫米,11个处理器芯片也只有人民币一角钱硬币的大小,这使它成为英特尔历史上有史以来最小的、功耗最低的处理器。
英特尔同时还宣布推出针对MID平台的英特尔迅驰凌动处理器技术,该处理器技术的开发代码为“Menlow”,它包括英特尔凌动处理器、一个包含集成显卡的低功耗同伴芯片、无线通讯部件,以及更轻更薄的产品设计。
这些新型的芯片(设计代码为“Silverthorne”和“Dia-mondville”)将采用英特尔45纳米Hi-k金属栅极技术生产,每个细长的英特尔凌动处理器芯片的硅晶片中封装了4700万个晶体管。
“这是我们采用全球最小的晶体管生产出来的最小的处理器,”英特尔执行副总裁兼首席营销官SeanMaloney 说,“这一小小的奇迹是设计领域一次新的重要飞跃,它体积虽小却功能强大,足以在这些新设备上实现丰富庞杂的互联网体验。我们相信它将给业界开创新一轮的创新。”
恩。根据ImpressWatch的这篇文章来看,这个小东西真的很强悍。以2.4w的功耗,可以做到1.83GHz的主频,并且有16级双流水线,性能极为强悍,而这一切仅有25个平方毫米,并且成本极低。某网站更是打出了 26元的处理器 的标题。恩。很好很强大。
这个小东西出来,智能手机必然又要地震一下,看来智能手机的摩尔定律也快要生效了。事实上,据说Intel的演讲中也提到现有的400MHz的智能手机应用并不是很能满足用户体验。相信装备了ATOM的手机全面上市后,智能手机的性能将会提升很大一个层次。
不过,也许智能手机这个概念在Atom大面积铺开后就将不复存在,因为Intel还在推动另一项技术 MID。
MID,全称Mobile Internet Device,移动互联网设备。是去年春季IDF宣布的新产品。相较于英特尔先前推动的超级移动计算机(UMPC)强调是全功能的小型随身电脑,锁定移动专业人士;MID则诉求的让一般消费者也能随时随地上网汲取信息。作为介于手机和笔记本之间的一个手持设备,MID不仅具备低端笔记本的运算性能以及手机的便携性,同时还可以直接连接互联网,这将很好的满足用户在任何时间、任何地点进行自由的沟通需求。
而今年,Intel发布了Atom这个MID很重要的核心,同时,包括联想、华硕、明基、富士通、松下、爱国者,以及国内外好几家知名OEM、ODM厂商,均同台发布了基于英特尔凌动(Atom)处理器技术的MID产品。具体的介绍可以看网易IDF08专题的这篇文章。各家的产品各有特色,但是看体积都并不大,功能却都很强悍,真的推广起来,智能手机只能载入史册,MID一统天下了~
这一次的IDF还真是惊喜连连,也许因为我刚入行,听见这些消息还是很振奋的,就好像去年TI峰会上听说Da Vinci架构。新技术真的很强大,应用起来前景不可限量。未来生活多美好啊……呵呵。
另外,貌似此次IDF08,Intel还提到了USB3.0,看来USB的又一次提速指日可待。而腾讯更是和Intel联合推出了基于MID的移动QQ,看来MID产品化指日可待了。恩。
下面是Intel Atom的LOGO,也许某天,买的手机或者电脑上,就贴着这个LOGO呢。那时候,数码生活将是怎么样的强悍哪……呵呵……