原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6871758

由于前段时间在做单游戏手柄的无线转换方案,所以收集了一些关于IOP以及SPMC6502的资料。开始设计时本想省掉这个接口IC,但由于其设计难度较高,且以后双无线手柄也需要做这样的工作,所以就还是花了3天左右的时间把该方案完成。在这个过程中,对游戏手柄的工作方式,通讯协仪,以及8202v的软件架构和编译有了一定的了解。

在完成设计后,原本想再花点时间把risc游戏手柄控制那块学习下,看看能不能对双游戏手柄提供帮助。因此又查阅了8202v的makefile,虽然最终没有找到对游戏手柄有价值的东西,但还是获益匪浅。通过对该文件的学习,对其软件的编译过程,工作模式,bin的生成过程,模块分类,模块加载和运行,模块与risc的通讯(主指iop)有了一定的了解。

以下部分就是bin的生成过程总结:

① 生成romL.obj

② 根据dvdL.ld从romL.obj中提取:rom1.dump, ram1.dump, rom2,dump, 并将其合并为romL.dump

③ 根据dvdL.ld从romL.obj中

提取iop.dump,转为iop.bin,压缩生成iop.bin.gz

提取iop_rst.dump,转为iop_rst.bin,压缩生成iop_rst.bin.gz

......

提取fsgui.dump,转为fsgui.bin,压缩生成fsgui.bin.gz

④ 将romL.dump生成romL.bin,将iop.bin.gz, iop_rst.bin.gz,.....fsgui.bin.gz也添加到romL.bin后面

⑤  @$(CHKSUM) romL.bin 64
             @$(XB2) 0x70 romL.bin rom.bin
             @$(CHKSUM) rom.bin 32
             据说第⑤步可以不做也能正常工作,待证实

    前几天听到同事说想设计一个能对rom.bin直接换logo的工具,我的思路如下。

一、需要解决的问题

①要想替换,就必须先找到被换的logo在哪

根据title.c文件,得知logo文件存放在DVDTitle数组里;又根据dvdL.ld知道title.c中DVDTitle常量在drv_fsgui这个SECTIONS中;

而drv_fsgui最终生成了fsgui.bin.gz,放在了romL.bin最后面;

DVD在显示logo前,需要通过RISC中的LoadModual函数,将MODUAL_FSGUI_CODE模块_text_fsgui,即fsgui.bin.gz加载并解压到SDRAM运行;

fsgui.bin.gz在romL.bin的位置:

unOffset = ((UINT32 *)_stextf)[MODUAL_FSGUI_CODE];
  p = (BYTE *)(_stextf + unOffset + (MODUAL_Ns * 4)); p即其位置;

_stextf的值可以在romL.map中查到:

0x0000000088192720                _etext=((ADDR(.rom1)+SIZEOF(.rom1))+SIZEOF(.rom2))
                0x00000000881934f0              _stextf=(_etext+SIZEOF(.ram1))

unOffset的值可以在romL.bin中查到,即((UINT32 *)(0x00000000881934f0)[MODUAL_FSGUI_CODE])=0x01AC93 [93 AC 01 00]
  p=0x1934f0 + 0x01AC93 + 80 = 0x1AE1D3

=================================================================================================================

从romL.bin中导出fsgui.bin.gz;

用winhex在fsgui.bin.gz的文件头加入1F 8B 08 08 F0 20 3E 47 02 0B 66 73 67 75 69 2E 62 69 6E 00

然后解压缩得到fsgui.bin

//在gzip的官网上下载gzip.

//将该工具解压,然后通过该工具对fsgui.bin.gz解压

gzip -d -c iop_test.bin.gz >iop_test.bin

根据romL.map查找_text_fsgui,DVDTitle

.drv_fsgui      0x00000000806ff800    0x64e90

0x00000000806ff800                _text_fsgui=.

*title.o(.rodata.DVDTitle)
.rodata.DVDTitle
0x0000000080754cf8     0xf980 MIPS/title.o
0x0000000080754cf8                DVDTitle
求得fsgui.bin中logo文件的地址:0x0000000080754cf8-0x00000000806ff800=0x554F8,长度0xf980
===================================================================================================
②怎么替换
生成DVDtitle的logo文件,得到长度为N
将fsgui.bin中旧的logo文件去掉,并将新的logo文件插入,同时更新logo文件的长度,以便做为下次更新的依据
将fsgui.bin打包成fsgui.bin.gz
将romL.bin中旧的fsgui.bin.gz更新为新的
二、开发步骤
①知识点:
gzip格式, makefile,objdump使用,bmp转bin互转等
②开发环境:vc6 或 delphi
③软件功能:可以读取、显示、修改现有romL.bin的logo文件
④限制:必须读取最后一次编译生成的map中的几个重要地址
以上是通过阅读makefile配置文件,反向思考怎么设计替换logo的工具。如果大家有更好的方法,请告诉我,谢谢!
补充 :
其实可以在romL.bin中查找fsgui.bin.gz的开头N个字节,如果相同,就将从该段(假定为X)开始到结束的那部分数据复制出来解压缩,得到fsgui.bin;而DVDTitle是由bmp转为bin生成的,其开头的M个字节和结尾处的4个字节内容是相同的,也可以根据这一点将其找出来;然后再用logo生成工具得到新的bin,将其替换到fsgui.bin中并压缩生成新的fsgui.bin.gz,然后将romL.bin的0~X这段和新的fsgui.bin.gz合并就可以了。
以上查找的实际上是fsgui.bin.gz和DVDTitle的“特征码”。
关于特征码,就是gz和BMP转换后的bin是不同的文件,他们的文件结构不同,扩展名不同,所以在文件里表现的特征是不同的.通过这些特征,我们就可以把他们从BIN文件里挖出来

sunplus8202v BIN文件中LOGO的替换工具设计思路相关推荐

  1. WordSR 在多个Word文件中批量查找替换

    这阵子在看一些技术文档,都是 word 格式的,需要在多个Word文件中批量查找指定的内容,找不到免费的合适的软件,顺手开发了这个工具软件,下载地址 WordSR v0.2,下面是一些版权信息和软件介 ...

  2. 批量将文件中汉字数字替换为阿拉伯数字

    批量将文件中汉字数字替换为阿拉伯数字 我们有时候遇到很多是中文名文件名, 比如 第一章.第二十九章等文件,排序的时候无法按照顺序排列 而将其一一替换为阿拉伯数字很麻烦, 我花了一晚上弄出的代码如下保存 ...

  3. 从word、wps、excel、pdf和txt文件中查找文本的工具

    从word.wps.excel.pdf和txt文件中查找文本的工具. 因工作中要经常从大量word文档中查找固定的文本,所以自己就做了本工具. 可以批量从doc.docx.wps.xls.xlsx.p ...

  4. 批量xml文件中的字符串替换

    替换批量xml文件中的内容 替换批量xml文件中的内容 1.实现代码 替换批量xml文件中的内容 1.实现代码 package testpackage;import java.io.BufferedR ...

  5. SNS中好友动态功能的设计思路

    现在大部分SNS网站都有一个功能,就是显示好友的活动状态,比如你的好友上传了一张照片.分享了一篇文章等等动作,都可以显示在你的页面里,这样大大增强了社区的互动性,也成为现在SNS网站的主要特征,对于这 ...

  6. idea在java文件中查找_Java开发工具IntelliJ IDEA使用源代码系列教程(四):在文件中搜索目标...

    IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合. ...

  7. linux文件中的字符替换

    (一)通过vim编辑器来替换. vi/vim 中可以使用 :s 命令来替换字符串. :s/well/good/ 替换当前行第一个 well 为 good :s/well/good/g 替换当前行所有 ...

  8. 推荐一个SAM文件中flag含义解释工具--转载

    SAM是Sequence Alignment/Map 的缩写.像bwa等软件序列比对结果都会输出这样的文件.samtools网站上有专门的文档介绍SAM文件.具体地址:http://samtools. ...

  9. 31、SAM文件中flag含义解释工具--转载

    转载:http://www.cnblogs.com/nkwy2012/p/6362996.html SAM是Sequence Alignment/Map 的缩写.像bwa等软件序列比对结果都会输出这样 ...

最新文章

  1. 在Ubuntu 14.04 64bit上查看硬件配置信息
  2. Java异常有多慢?
  3. [改善Java代码]覆写equals方法必须覆写hashCode方法
  4. 100个人搬100块砖C语言,姓氏名人故事:一百块砖搬出搬进
  5. c++opencv显示中文_OpenCV如何入门秘籍
  6. 天津科技大学计算机基础,天津科技大学大学计算机基础样卷
  7. android 查看多个图片,android提取视频多张图片和视频信息
  8. Flutter实战一Flutter聊天应用(二十一)
  9. VMware虚拟机中Linux系统如何修改IP地址
  10. 毕设-基于SpringBoot企业人事管理系统
  11. python声音报警_python:基于tkinter打造的股票实时监控声音报警器! 自动监控,声音警报...
  12. Blender学习入门(一)-Blender的下载和插件安装
  13. SaaS行业其实岌岌可危
  14. android Logcat打印格式说明
  15. 腾达路由器电信宽带服务器无响应,腾达路由器连接上但上不了网怎么办 腾达路由器上不了网原因及解决办法【图文】...
  16. 苹果html 闪退,苹果打开软件闪退是怎么回事_苹果手机一打开软件就闪退如何解决-win7之家...
  17. 超火爆的人类一败涂地Human Fall Flat Mac中文版(支持m1)
  18. 【AI with ML】第 8 章 :使用 TensorFlow 创建文本
  19. matlab tecplot data,MATLAB讀取TECPLOT笛卡爾網格三維流場數據
  20. 基于小波精英解学习和多角度搜索的新型阴阳平衡优化算法

热门文章

  1. 谷歌再现大规模宕机!
  2. 如何用 Linux 技巧大大提高工作效率?
  3. 离开中国多年后,Google 搜索想回来了!
  4. 被罚 50 亿美元,Android 究竟招谁惹谁了?
  5. 过年战胜熊孩子骚扰的终极攻略,拿走不谢!
  6. 4键电子手表说明书_飞猪II控制台简体中文说明书
  7. 字节跳动资深面试官亲述:java进阶篇
  8. 编程时程序无错却崩溃_程序员极度崩溃的 60 个瞬间,看到哪一个你哭了?
  9. java 中文 转义_java下载url路径包含中文需要转义的操作
  10. rmi 反序列化漏洞_写一个rmi反序列化工具