首页 > 学习收获 > 嵌入式相关 > M30固件字库替换原理
2008
06-07

M30固件字库替换原理

呃,这个,思路很混乱。最近比较疲劳,又有点喝多了……(台下西红柿飞来:酒鬼去死……)

(擦去脸上西红柿)咳咳。嗯。言规正传。说一下M30的字库替换原理。

M30和其他嵌入式设备一样,字体是以点阵的形式存储在机器里面的。所谓的点阵字库就是,以0、1记录点是如何显示的,并将这些点组合起来……这句话我自己都看不懂了……举例来说:菜单中的第二项上面的字是一个24×24的字,那么在固件里面,该字的存储就是一个24×24bit的一串数据,这一串里面,每一个bit是0则该点为黑,是1则该点为白色。最后,将这些点排练成一个24×24的方形,那么那些点就会组合出一个字来……貌似还是很难理解……

呃,算了,点阵字库的话,大家百度一下好了。

实际反映出来,就是用ISE打开固件,以2.0修正版为例,将图片格式定为1位象素 2色模式,并将图片大小变为24×24,然后,跳转到0x02461054偏移量,就可以看见一只“一”字,再往下翻就是“丁七万丈”等等。这就是一套点阵字库。

想要修改字体,就把相应字的点阵改掉就可以了。比如“一”字,我不想让他显示为一个横杠,那就改掉这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修复的……嗯。以上。

最后编辑:
作者:龙天
这个作者貌似有点懒,什么都没有留下。

M30固件字库替换原理》有 4 条评论

  1. Heyi 说:

    发现你的feed更新了,过来关注下。
    PS:你的feedsky的链接还是不友好,建议关闭文章统计,显示博客permalink的真实地址。

  2. 龙天 说:

    呃……太专业了不懂……我尽量理解下。呵呵
    哦哦,百度一下我就知道。明白了。多谢苹果兄~

  3. metoogo 说:

    老大,你的这个文章真是非常的专业啊
    我有点小小的问题,那些偏移跳转怎么找到的?

  4. 龙天 说:

    @metoogo: = =好久前的东西了。。用ISE打开固件,然后一点点往下找就是了,一般字库肯定是1bit模式,所以当看见低下一堆字符时,就大喊Bingo就好了。。。呵呵。。

留下一个回复

你的email不会被公开。