找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3410|回复: 10

ROM定制的基础教程

[复制链接]
发表于 2009-2-9 11:17 | 显示全部楼层 |阅读模式
这个教程是技嘉i350的教程,里面讲的是PPC的,,我也认真的看了一遍,可能跟500刷机的教程不同,我想应该很多地方跟500V还是一样的,毕竟都是windows的产品,,希望有兴趣的朋友大家一起共同研究。
1 a9 e- A5 A6 b$ o' V/ K2 X还有一个就是king发的一个主题叫。关于目前还不完善的刷机方法说明。
" y/ b5 C! Z5 g) \下面是分别两个帖子的原帖连接。
% |9 B0 ^. t) o一个是制作教程,一个是刷机教程。 2 R. A2 Y* R3 O8 b0 U2 i
比我更白的小小白可能会问,两个不一样的吗?我是这样理解的,制作就好比微软开发程序,刷机就好像我们安装系统。4 C9 E+ D5 l# L" Z/ K$ w
4 K8 g& W# z, Y0 k! E
ROM定制的基础教程     http://bbs.koxo.cn/viewthread.php?tid=63817&highlight=i350rom& k6 b1 {: R; N. ?$ e  Z
刷机方法                http://www.treo8.com/bbs/viewthread.php?tid=106012& r" f1 [% a4 A9 _0 R9 E
2 C, K3 w+ q# i
& m! V! v/ G- S0 C
下面进入正文5 ?2 @& o+ ^% K
+ G4 g! q; L' y4 s8 R6 [
& h, j% V% k- m. G8 p
* b% `9 d* ?4 ]$ w* c: Y
! }  `. [- v  p

1 d+ b% J8 }; q2 R
7 K7 ]0 h  n+ \0 @8 d* L1 ~+ d9 u一、认识I350 ROM的构成
# i) S; E- {' j6 `4 Q3 B9 T& D: U0 c- [; h: T1 i/ J6 z
    从官方下载到的ROM,是由几个文件组成的:一个nb0文件,一个bif文件,一个bmp文件,一个custfile文件夹。我们重点关注的是nb0文件,下面谈到的ROM一般指的就是这个nb0文件。一般来说I350的nb0可以用ImgfsTools配合BEPE(德国的一个学生高手)的Package Tool分解成两个文件夹:OEM和SYS文件夹。
0 F+ ?; K0 u8 h* X0 d    其中,OEM文件夹是厂商为自己机型定制的专用驱动或应用软件,不同机型一般情况是不通用的,但是要简体化I350的一些特色软件,就要修改里面的OEMApps文件夹了。汉化一般DLL和EXE文件的方法和PC上的一样,可以用PE Explorer或者exescope等软件,修改里面的图片或者字符串。现在大家手头上如果已经有我之前做的几个简体版本,直接引用就行了。这里要感谢star3000最早提供了OEMApps的简体资源,后面的版本我很多都是直接引用的。
0 h; T/ {1 t3 G1 d+ N4 `/ s9 v! o    接着介绍SYS文件夹。SYS是系统的核心部份,这里是微软的东西,每个机型基本上都是通用的,是移植ROM的关键之一,这部份成功了,ROM就移植成功一半了。如果大家定制过Windows XP的安装光盘,可以这样理解,SYS就是微软XP的操作系统本身,OEM文件夹就是你电脑的硬件驱动和集成的一些软件。9 G4 C+ R9 O5 R
    如果大家在网上查询过有关定制ROM的教程,应该有接触过“模板”的概念。通常在这种定制模板中,还有一个ROM文件夹。里面一般有一个ROM文件和一个xip文件夹(实际上在这种模板当中,起作用的只有一个boot.rgu文件)。先说说这个ROM文件,它就是你要重新生成定制ROM时候的一个“种子”。这个种子肯定是要和你的机型相对应的,如果直接用了其他机型的ROM做种子,那么你的机子很有可能就要变砖头了。- N" b) K' w; o. K
    接着简单谈谈XIP。引用老猫的话,“XIP就是WINCE XIP KERNEL,是CE核心部分,XIP是为eXecute In Place的缩写,在微软的CE定义中,这块区域存放的是以非压缩格式存放,不需加载,由Bootloader直接调用执行。”虽然相对于整个ROM来说,xip只占了很小的比例,但是对于系统兼容性、稳定性来说,其作用不可忽视。而xip的移植,也是整个移植过程中最困难、最繁琐的。- b4 [( H7 `* g
    关于ROM里面的DSM和RGU文件。OEM和SYS目录下都有若干子目录,每个目录都是一个模块,每个模块都有一个同名的DSM文件和RGU文件,DSM文件记录了这个模块中有那些文件组成,并且部份包含有签名功能。RGU文件是注册表文件,这个文件在建立ROM时会自动导入注册表default.hv和user.hv文件中,我们要做的注册表修改工作都是在RGU文件修改中完成的。
# G! E. H* s; ?) i- O- m# A
, E' |0 G2 r7 R! X% j/ E
9 H1 E* {# {8 v4 R5 q( A
- V  Z+ K1 X/ t8 d# A3 \$ `) K: d+ w' l. L9 ^

9 ]5 v+ R  }, j9 E: k" y- f! b* x* w4 H7 Q; h; m
- F- Y! N. \9 z, q
% W2 O6 J+ [" c# @' f

4 P5 k9 k, Q7 y/ o
+ W; ?) ]' t: D* T, a1 ]* Q* X5 [! s! J' d2 H" d7 {( Y
2 f0 i+ M3 H2 {, j/ t! P
二、I350ROM的分解2 D4 P" U# o7 [6 J+ \' J

  I" D1 q! E# ~+ n- {6 [& b6 ^8 M3 OImgfsTools工具包可适用于很多不同机型的ROM。对于分解ROM,常用到的工具有:prepare_imgfs.exe、viewimgfs.exe8 D% f7 J4 L% B0 E, {" x
我们把ROM放到imgfstools的文件夹中,在命令提示符下,执行:8 J# O! L4 ?9 k" l. i6 V
1.prepare_imgfs 350.nb0 –nosplit
6 a! G8 B0 x4 a如图,这里350.nb0是你要解开的ROM的名称6 c$ a6 L* \) x( `% l

5 o5 M! A' I3 T! E/ O% l7 z5 @6 z# U: j1 |& D
在目录下会生成三个文件:imgfs_raw_data.bin、imgfs_removed_data.bin和dump_MemoryMap.txt。第一个imgfs_raw_data.bin是我们需要的。接着运行viewimgfs imgfs_raw_data.bin,如图:0 h* k$ i$ T6 L8 y

5 T" J" K( \  {* p: e7 z. e& _1 W* K) i6 m3 [
. N7 ?7 h; o; k8 T% f; B
接着就是5-10分钟的等待,ROM正在解开,会生成一个dump的目录,里面的文件就是我们需要的,移植、汉化、修改,主要都在这里完成了。但是打开一看,里面的文件多得可以让你晕头转向的:
9 p- W, `( l( P2 [
' w- d: `3 ]# y! [7 P5 u5 ~  `0 O' D) q: f) z2 G
4 }5 V( u' Z* L, \/ b/ R; [
上面提到过BEPE的Package Tool,下面我们就用它来整理一下这些看上去杂乱无章的文件,运行后选中DUMP文件夹,会看到类似的版本信息:
% N% r* E6 m8 [" n" I) a
2 f* G' x" v' u$ L如果看不到这些版本信息,那说明里面的dsm、rgu已经被清理掉了,怎么办呢?
- M' Y$ f0 P6 |  J) w8 N; A9 u我们先关注sys,OEM部分先不管,找一套完整的rgu、dsm和.sof(见附件)复制到DUMP目录,再运行Package Tool,3 D4 u8 n( U, v0 M- i* F
这时候你看到的版本信息是不对的,但不妨碍我们获得SYS。
1 \' k  H  e# W9 _SYS目录外的先删除吧。OEM部分找一个我前期做的ROM,可以分出OEM的,反正这部分通用。- a9 |1 Q7 q+ v0 a& H! y5 U
1 e; a. r6 |7 j; |3 B6 Z
# V- w" K1 u% z  k

; v; d: t" j4 ?. A/ e( V: p这个是官方E8的ROM解开后的。可以看到SYS、NET、OEM等版本号,语言版本,DPI等。至于最后一个missing的dsm可不必理会。接着选择菜单中的Tools>buildpackages,接着DUMP下就会归类成OEM和SYS文件夹,如图:7 F! P" E  [5 ?1 x/ n. T  _

  o- v( k: k& J( ^
" H) {/ E6 O/ L4 f% W6 t6 Y1 t! @+ Z6 x
如果只是移植ROM,不考虑集成其他软件,OEM文件夹我们可以暂时不管,重点先看SYS文件夹:
/ g9 }0 Y7 a, q* w9 g# I) g& w- E  z; h  e! T
这里面的都是一个个系统组件的模块,需要精简的,可以在这里把自己不需要的模块咔嚓掉,但如果搞不清楚这些模块的作用,那还是别乱动的好。分解的部分就这里了。) T! W' n1 T/ Y$ U

! m" K  e1 M$ t) h6 _$ e$ i4 Q% u1 Q4 \) b# ?
& e1 q  v1 A/ a1 B4 A. N
下载连接VGA-CHS-rgu+dsm.rar
. X8 p' C5 G4 p! B8 T4 _+ u* v* Q  n' W" t' ?
1 y6 h3 Z( o& p' F2 \& ?7 \
% u  |4 b4 t  ~1 n

) l5 X! Q% N6 y  ^5 A/ }- g
/ _  p- P  z9 M7 J2 k8 ~9 z- B2 ~
+ {; x0 x' h. S7 w5 p, B4 O) k4 e) Z1 f6 O0 |4 M" j- v

7 W! C' {; n- g  i& ~% U
3 y/ K3 ~. ^( X7 k
: |1 n/ v2 P, l  s; _2 n! Q4 m- E# y# y9 l2 Q. k/ ~' ?

) w1 n& s; \4 i; A6 {6 m2 y三、SYS的移植
9 |6 [1 H' `/ p# E( i. V* z1 a: P; @
其实这部分没什么特别的。如果你需要移植一个19199的ROM,那你可以多解开几个19199的ROM,其他机型的解ROM方法都会有所差异,套用一句老话“百度一下,你就知道”。这里要介绍一个很好用的软件:Beyond Compare 2。主要界面如下:
& k) A% x, q) H5 {! L  b% U& C; ]
' ^2 g  g+ P" ?/ {3 s, L1 s# }
有什么不同的可以一目了然了。只需要把新版本对应的文件复制到你需要移植的sys文件夹内就OK了。至于不同语言版本的移植,需要注意语言包的问题。这方面不在这里讨论,大家有兴趣的自己百度一下。(百度要给我点广告费了,哈)和显示出来的版本号相关的各个文件夹下的dsm文件,还有packages.cif,packages.sof这两个文件。但是现在的rom好多是加密过,或者用all_package_to_one处理过的,只有一个dsm,这时候就没办法用上述的方法分成标准的OEM、SYS文件夹了。我们只能对比标准的模板,用BC2去对比替换更新,这样一来工作量就比较大。另外一个方法,就是从其他标准的模板下,把对应的dsm复制一套过去,当然,还有packages.sof,再运行PKGTool,这样一来也能减少点工作量。上面介绍PKGTools的地方有一套VGA的dsm、rgu和sof。
2 r% q* w" ~% t' U; f- ?* ]( R8 s& O3 ?' |' |5 b- L
网上有一个sys移植的屏幕录像,大家可以去看看。基本思路就是保留自己的.ROM .VM 和metadata,其他用新核心的文件来对应替换。
4 \# j$ ?# N( F7 ]) `9 B( O/ x$ v8 d  ?  a$ [/ m- p0 V. a
; t0 u5 O3 w% h' F' ~& |' C
5 {# U) I' u5 \9 N* R

# H2 ~4 ~1 c* S, k
, p9 D/ u8 P. {
/ S( ?/ D* \  a# y: y+ s6 l' B# ]( Z, H6 D) W

$ j. O1 c5 r- K$ H' e7 |* _
; D# Z' ?6 S- x# G0 b
6 {0 t! W$ ^/ [! F( U) w+ c
& ?4 N( r6 A- r$ O. r% U, i
4 p8 B5 R& c/ o  i! y  Y$ S+ p; q8 b# V4 c& h
+ G0 d: m* m. }& ?- p7 V
* T1 }( v8 M- L# I( }6 s
四、OEM软件集成0 R; C% s' m5 R$ K
- B; M* {: y+ \# T' P9 k4 x' A
    这是大家比较关心的事情,集成自己惯用的软件,不用每次硬启都要重装软件,何乐而不为。最简单的办法,当然就是拿来主义了。Xbeta上有好多高手分享的OEM包,大家可以选择性地拿来用。如果要自己做OEM包也是可以的。要找这方面的资料应该还是很容易的。把需要集成的OEM包,放到OEM文件夹内。
" f, s+ b" Z$ k) F6 \; t0 F    这时候,还需要建立一个和OEM、SYS同级的ROM文件夹,里面放一个作为种子的nb0文件(原理前面简单说过了),同时建立一个xip文件夹,在这个文件夹里面放一个boot.rgu文件(后面在讲述xip提取和移植的时候会谈到这个文件的来源)。
- F% s! Y: X# Q. a5 u
) K  Q  P' T# c5 DOEM和SYS的同级目录下,放上BuildOS.exe、pkgcommon.dll和Tools目录,执行后,会扫描你的OEM包,把需要的勾上,但不要集成太多,ROM的空间也是有限的,不然后面封包的时候会出错,界面如下:" M! N& C( [9 j9 Z. ?

- Y; v( r4 I; k. _. [4 N9 d4 O% C3 Q0 f7 U+ T; n

) r/ s- y) W" m+ @) h' o% T5 v选好以后,点左上角的绿色小箭头,直至左下角显示Done,就算集成好了。过程中如果遇到出错,提示“文件已存在”,那说明OEM包里面和SYS里面的文件有重复,删除其中一个就可以。完成done后,BuildOS就可以关闭了。' N: B: z9 F5 {1 ]
由于ROM里面的模块我们修改过,或者是从其他ROM里面移植过来的,地址会变得很乱,如果就这样直接生成ROM,很容易会造成地址冲突不能使用。这时候,我们需要用另外一个工具――G’reloc。作用就是重排这些模块的地址。用法如下:BuildOS运行后,会生成一个temp文件夹,在里面会有另外一个dump文件夹,改名为sys,在这个文件夹的同级目录中放上G’reloc,运行后,里面的数据都是自动提取的,点一下”Doit!”,等完成后关闭程序,把sys改回DUMP。" @3 p& n, J$ a3 `/ ^
" ^2 H: j0 R2 X& j+ j
: e. r' \8 g" H  Z+ {. y
4 }% t/ L+ C2 L

4 l% B; v3 X) h6 e: T: Q" w% A7 U, F2 }% X5 I
8 [2 C7 l' n. J- l& ^- o

: j, C4 @+ U/ I& l1 Q7 h! }+ I1 C% F: H3 J8 V5 ~6 h; [- _3 n, {, |; e/ x
$ Y4 u# i# `/ E

; C9 Q. p$ n, p+ R
3 a1 Y6 [1 F5 U( M& a; C9 X( Y' ?, d0 R' I. C( A
五、ROM的重新封装9 V) Q3 U3 D. z! c
把种子ROM、之前dump出来的imgfs_raw_data.bin,BuildImgfs.exe、make_imgfs.exe、cecompr_nt.dll,一起放到上述处理过的重新生成的DUMP文件夹同级目录下。在命令提示符下输入:buildimgfs  o1 Z' h" h! T  {
这个过程和dump的过程差不多,需要等上几分钟,如果你上面集成的OEM包不太多,不至于把ROM的空间撑爆的话,那这个过程应该是很顺利的。完了以后,再执行命令,把ROM封包到我们的“种子”里,命令提示符下输入:make_imgfs 350.nb0 –nosplit
8 m$ \. _/ \  g; J350.nb0就是你的种子ROM文件名,如图:1 W  P) T$ L9 t

& d* t4 ]& x/ E' _3 _) `+ B
4 z3 i. W2 i- z7 B" Q+ s; K) ?; f. D' k* O4 h2 b. F
这时候,生成的ROM就可以拿来刷机测试了。
2 p3 g( Y' W1 p8 O3 m0 K" J% v
2 p/ n# ~  J( i, C$ ]以上过程做成批处理文件,就是一套350的模板了。3 M1 E- p2 ?1 ], f/ F/ V8 s

& d7 E7 H; ~2 J$ Q1 L" T六、关于XIP的移植:* E6 Q: x* D# T
我看过最详细的教程应该是这篇了:4 C$ x/ {9 e9 Q# {; W
http://www.diypda.com/viewthread.php?tid=4305&extra=page%3D12 W' B4 ^; R8 X4 {  E* d) p0 k
大家自己消化一下吧。上面用到的boot.rgu就是从xip中提取出来的。; c4 t) u% S5 ~* |) V9 Y
具体到I350的XIP提取,简化一下,直接用附件350_dumpxip.rar,解压后,把nb0改名350.nb0后放一起,直接运行批处理就可以生成xip.bin了。4 C: h) m, P! B1 S3 p+ H  Z, _# Q4 Z
! k, Z0 b* H. @3 }
七、其他:) U4 d4 t, g% @' b
上面的过程,只要用批处理文件适当处理,就可以做成I350的定制模板了。其他涉及怎么修改注册表,怎么修改文件路径的,大家也可以参考这篇文章:4 U; `$ {4 V" a* u' @) f
http://www.diypda.com/viewthread.php?tid=2905&extra=page%3D1
) O+ u; X* A9 c5 S' w4 k写这篇文章不是单单为了让大家照葫芦画瓢,希望大家明白了这些基本原理以后,可以做出更适合自己使用的ROM。
; ]0 S; F3 k1 m' u, Q# D) g
8 _$ U1 Q$ f4 N+ z' r, _八、附上述用到的命令的解释:+ G. R' _4 T# s
prepare_imgfs.exe5 }0 y: m2 d( ?% f0 X8 F/ r  a
9 f+ I+ s- Y9 i8 j3 N8 O

! u1 u+ F) ], r+ u
1 Y9 ~1 U1 O) ]' F7 ]! HSplits nk.nba into imgfs_raw_data.bin and imgfs_removed_data.bin.
# S6 q$ a2 L: W5 R# x) himgfs_raw_data.bin - contains raw IMGFS data
, ]4 ~: y% a7 T7 }, b& {. Iimgfs_removed_data.bin - contains extra data (something like FAT table).
4 J/ w, e$ j2 t: MUsage:
) \" Y, y# b. X3 y2 \( M
" u, u$ m! T- pprepare_imgfs.exe nk.nba [-nosplit] [-mpx200] [-acer]* |# D9 }2 r# F' }; u2 h2 Q4 l
Use "-nosplit" for HTC Wizard and Universal ROMs that don't contain extra
5 d9 n- v6 Z5 yblocks of data. In this case imgfs_removed_data.bin would be empty.. }$ g* [) F/ n) Z/ T

# S$ ~( z! K" L7 N) wmake_imgfs.exe6 X  b- X' z: g! s. v0 F

& A1 `$ ]$ F' ]* n# y  |% VReverse of prepare_imgfs. Combines imgfs_raw_data.bin and imgfs_removed_data.bin$ |; Q: T9 |* P- u& t
into nk.nba file. Use -nosplit if it was specified for prepare_imgfs.exe." s2 \, G/ t$ {6 B) p  {
Usage:
6 p" z# }' l, A1 M" a: P0 D$ U
% W( O% K! U: U2 |  ~2 M' c0 S& Mmake_imgfs.exe nk.nba [-nosplit]
1 }' r: W2 C) }' z2 N* h4 g9 nThe nk.nba file would be used as a template, its contents would be overwritten.+ Q5 O3 O( l0 F
+ @' n  v% d: j5 D8 p
viewimgfs.exe' C7 K) D% n0 Y

0 b8 x( m: _7 [Dumps the contents of imgfs_raw_data.bin to "dump" subdirectory. Files are # C8 o4 x, F( u- [# ?) @
dumped as is, modules as directories. File time and attributes are preserved., v5 Y, s  e" Z- p% Q
If RecMod.exe is present in the current directory, all modules are ' D$ K3 c, B2 i! ^" ?
reconstructed as working DLLs/EXEs and placed in the corresponding subdirectory.
  j8 O1 W( m. B) q" uTool creates dump_MemoryMap.txt with address ranges occupied by modules.
1 b6 y5 T0 K$ D" V: s" BUsage:, F% e" H9 N; e) |

: M+ f: U% f/ fviewimgfs.exe imgfs_raw_data.bin
* I7 c  W: K' V: K% w4 ?# G, S6 v% x# u; _/ v0 M" y
7 j" j6 {) R- f) Z( t; u8 z
( Z! y6 b; L( c5 G. E
' t6 O7 m3 N% n8 z
下载连接350_dumpxip.rar 1 G8 w) u1 A; X5 R
( C/ Z  h: P! v1 J; k0 C1 B4 G0 F
[ 本帖最后由 lifehappy 于 2009-2-9 11:48 编辑 ]

VGA-CHS-rgu dsm.rar

230.63 KB, 下载次数: 638

350_dumpxip.rar

62.91 KB, 下载次数: 669

i350_ROM修改工具包.rar

5.4 MB, 下载次数: 474

回复

使用道具 举报

发表于 2009-2-9 11:43 | 显示全部楼层
多谢分享。以前PPC ROM搞过不少,但是对于小五 没有SPL就没有一切……
回复 支持 反对

使用道具 举报

发表于 2009-2-9 11:48 | 显示全部楼层
定制的前提是官方放出刷机rom
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-9 11:54 | 显示全部楼层

回复 沙发2# southwolf 的帖子

不能直接刷OS部分的吗。
回复 支持 反对

使用道具 举报

发表于 2009-2-9 21:17 | 显示全部楼层
现在还不能
回复 支持 反对

使用道具 举报

发表于 2009-2-9 23:44 | 显示全部楼层
支持高手们,快点搞个新的rom
回复 支持 反对

使用道具 举报

发表于 2009-2-24 16:13 | 显示全部楼层
多谢分享。
回复 支持 反对

使用道具 举报

发表于 2009-2-27 12:50 | 显示全部楼层
现在做好的有么?
回复 支持 反对

使用道具 举报

发表于 2009-2-27 14:03 | 显示全部楼层
虽然不懂!!但期望有刷机的一天!
回复 支持 反对

使用道具 举报

发表于 2009-2-27 15:49 | 显示全部楼层
希望英文好的兄弟多到 PALM 网站上或VDF网站上发帖,
1 ~/ r. V) ]- m* E4 v! N要求他们出新的6。1或6。5的ROM!!
回复 支持 反对

使用道具 举报

发表于 2009-5-15 08:43 | 显示全部楼层
我看到有人用的500v就有6.1版本的
) q7 p) `9 N) z, J( U$ b) E
+ {" M$ r7 n, c; w5 ]& j7 U就是没看到如何刷
! G- ]0 i) I5 Y! G! c% x- Q2 x+ `) B; ?4 C5 ]
哪儿有rom
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2025-4-3 14:57 , Processed in 0.272665 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表