- 在线时间
- 142 小时
- 最后登录
- 2012.2.1
- 注册时间
- 2008.1.16
- 积分
- 1822
 
 - 注册时间
- 2008.1.16
- 金币
- 2153 个
- 财富
- 0 元
- 阅读权限
- 50
- 积分
- 1822
- 帖子
- 382
- 主题
- 5
- 精华
- 9
- UID
- 281717
|
发表于 2008.2.25 16:47:55
|显示全部楼层
2008.2.25:
HXF 文件可以解出来了
还可以打包还原供升级(自己打的包,暂时没办法以写入.)
2008.2.26:
http://www.vote4u.cn/v2000se/hxf.rar
这是解包打包程序.
打包功能还有点小问题,写入时显示错误3,等有空了再排查一下
2008.2.27:
打包后可写入V2000SE的程序也写好了,等验证写入的东西可以生效,再发布.大家先研究一下解出来的数据包吧
现有主题的订制完全可行,已测试
2008.2.28:
http://www.vote4u.cn/v2000se/hxf.rar
可以解包,可以打包,可以烧录
2008.2.28:
找到uboot在升级的exe程序里.要想完全DIY,只能自己写UBOOT开始,然后一步步搞定硬件.这么走就太累了.
在system\code 里有一个flash目录里面有个flash.dll跟其他目录里的*.gam的头格式很相近,因此估计
开发环境可能是WinCE.在\codecs\*.dl 也具有相同的头格式,但与flash.dll完全不同.仍在思考中.
uboot加载在0x80E00000上主要工作流程:
1.显示\user\logon.ani
2.看有没有升级文件*.hxf
3.根据需要创建各类目录
4.加载ccpmp.bin 这是通过jr $ra 指令来实现的,估计是不会跳回来了.
需要做的工作:了解这个uboot到底提供了什么资源,如何在屏幕显示,硬件的配置是什么样的?
如何编程?自己写一个ccpmp.bin,写入hxf里,然后复制到根目录,重启时,就可以运行你的程序了.
即使不能正常运行,你还是可以通过重启机器,再复制一个正常的hxf文件到根目录,就可以恢复正常了.
1.从v2000SE解出所有的文件
2.把out_hxf目录改名为in_hxf
3.修改system/res/a~d 这就是四个现有的主题,把图片改一下
4.重新打包
5.按正常升级的办法进行烧录
目录安排:
--任意目录DDDDD
+ V2000SE.HXF - 相要解包的文件
+ out_hxf/ 自动创建的输出文件夹
+ in_hxf/ 要打包的文件夹
+ my.hxf - 输出的我的打包文件
解包说明:
1.解开可执行程序:解开 HXFExtract.rar ,里面有一个 HXFExtract.exe 直接运行.
界面中有解包和打包两个按钮.
2.解包:点"解包"按钮,找到你需要解的文件,如 V2000SE.hxf
3.执行:在hxf文件所在文件夹中,自动创建一个名为out_hxf目录.里面就是解出来的数据( v2000se 和 VX989+ 的hxf文件都可以解)
打包说明:
1.环境:打包的文件必须放一个名为 in_hxf 的文件夹中.
2.执行HXFExtract.exe
3.点打包按钮:找到in_hxf所在的上级目录,指定打包后的文件名,如 .....DDDDD/my.hxf
4.执行完成后,在in_hxf所在的目录就生成这个hxf文件了.
2008.2.27 HXF格式分析 c 语言描述
struct hxf_header{
BYTE strTag[4]; //WADF
BYTE strVer[4]; //MMNN M主版本号 N次版本号
BYTE strDate[12]; //YYYYMMDDHHII 年月日时分
DWORD dwLength; //整个文件长度
DWORD dwCheckSum; //校验和
DWORD dwReserved; //保留为0
BYTE strDesc[32]; //文件描述
}
struct hxf_file{
DWORD dwFileNameLength; //文件名长度
BYTE strFileName[]; //文件名变长
char chSP; //固定分隔符 0x20
DWORD dwFileLength; //文件内容长度
BYTE BinContent[]; //文件内容,变长
};
整个文件的构成: 文件头,任意个文件结构,四字节0
hxf_header { hxf_file } (DWORD)0
校验和算法
FileLen = 文件总长度
char * p = 文件内容
FileLen-=0x40 ; 不算文件头
FileLen /= 4 ; 转换为4字节长度
p+=0x40 ; 移到第一个文件封包处
DWORD s = 0;
for( int i = 0 ; i < FileLen;i++,p+=4){
s += * DWORD*)p);
}
结束后s 就是文件 0x18 处的校验和了.
[ 本帖最后由 tomac 于 2008.2.29 00:05 编辑 ] |
|