找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3363|回复: 10

ROM定制的基础教程

[复制链接]
发表于 2009-2-9 11:17 | 显示全部楼层 |阅读模式
这个教程是技嘉i350的教程,里面讲的是PPC的,,我也认真的看了一遍,可能跟500刷机的教程不同,我想应该很多地方跟500V还是一样的,毕竟都是windows的产品,,希望有兴趣的朋友大家一起共同研究。
0 c, a8 [% Y6 P, L6 b还有一个就是king发的一个主题叫。关于目前还不完善的刷机方法说明。
+ O3 p! m$ V" U0 g4 @下面是分别两个帖子的原帖连接。' f5 f* R- B4 ?/ T2 U, u: G
一个是制作教程,一个是刷机教程。
8 N3 o- R1 E5 V; ~2 u: m; W) p比我更白的小小白可能会问,两个不一样的吗?我是这样理解的,制作就好比微软开发程序,刷机就好像我们安装系统。
7 t" C- V  G' L& @7 L3 i8 w# D. @3 o
ROM定制的基础教程     http://bbs.koxo.cn/viewthread.php?tid=63817&highlight=i350rom9 k- L) W* t* P5 j9 [0 f
刷机方法                http://www.treo8.com/bbs/viewthread.php?tid=1060125 w" p5 Y3 v: i5 U

: j- U) l9 B- p' G7 l. x0 E/ B. y0 {! ?5 p
下面进入正文
7 v5 V1 v  ?3 p9 q5 K
5 R5 K1 b: U9 Z$ a" u$ y1 M9 M2 t
8 F. A2 H! c+ D4 R2 ~1 ~
3 G- h& W9 x) Y/ {) D3 t+ }- |2 k
  p3 H9 h4 H$ v" [4 i& ~) G6 V7 L; p: o9 \- ]

, F; M/ B# j" O) v0 P一、认识I350 ROM的构成* i' h3 t9 \/ \4 z' u8 S

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

& D- @% V6 f( |( S. H: {
/ X2 E' J9 L* e' A1 j" i8 x/ w) l/ ]$ F$ Q
! V+ D' v9 j+ q# {6 p
* k% W- d1 }, D/ U; o* k: N

: X4 H9 h4 i' {) N% u& r
4 h  P1 c; z! s
, I5 U; F! Q7 m: [* ]
& B5 d$ }+ z/ X! ]* V6 h
. B) U4 ~- U: w7 ^  l! ]& P4 d; j6 {: b* _4 `& e. B2 b& C* X

) O4 @4 c. m5 ], ~二、I350ROM的分解
4 k4 |# G2 C0 T" S- S4 W* @2 B
2 x! I$ m% |7 P' O1 M! s9 gImgfsTools工具包可适用于很多不同机型的ROM。对于分解ROM,常用到的工具有:prepare_imgfs.exe、viewimgfs.exe
2 |# q8 A5 j0 D' x我们把ROM放到imgfstools的文件夹中,在命令提示符下,执行:) X8 t9 z  m# Y; d
1.prepare_imgfs 350.nb0 –nosplit
( b# e3 ]/ R2 i* l& `& _9 d如图,这里350.nb0是你要解开的ROM的名称. ]' D$ x! @! U, N2 p
, S! \' [3 n2 {% _" v/ ?
/ _/ k2 u( m2 a7 a  a$ m! B
在目录下会生成三个文件:imgfs_raw_data.bin、imgfs_removed_data.bin和dump_MemoryMap.txt。第一个imgfs_raw_data.bin是我们需要的。接着运行viewimgfs imgfs_raw_data.bin,如图:& Z: d* k! y+ v: ?% s$ E

2 a' P# j6 z( L
- k, j  {. z& H- e
+ q4 L5 O2 _8 [6 ?+ G接着就是5-10分钟的等待,ROM正在解开,会生成一个dump的目录,里面的文件就是我们需要的,移植、汉化、修改,主要都在这里完成了。但是打开一看,里面的文件多得可以让你晕头转向的:" K' ~/ Z4 K0 G3 V0 t( M, x

( k; F, D' h7 f8 \+ A
' s, a+ R7 p" r2 k- z* i
' P6 }% R! m3 x3 B, k3 X6 {上面提到过BEPE的Package Tool,下面我们就用它来整理一下这些看上去杂乱无章的文件,运行后选中DUMP文件夹,会看到类似的版本信息:
+ d" a/ ?1 K! I: O+ A7 X* e6 X4 a
; P( t# D# u$ _$ p2 x如果看不到这些版本信息,那说明里面的dsm、rgu已经被清理掉了,怎么办呢?: n$ I1 s( H* B3 b
我们先关注sys,OEM部分先不管,找一套完整的rgu、dsm和.sof(见附件)复制到DUMP目录,再运行Package Tool,5 U- j* \3 K* `# T3 g) T$ b: H8 k
这时候你看到的版本信息是不对的,但不妨碍我们获得SYS。
* V9 n/ t* {; ~: [; h4 V& k, vSYS目录外的先删除吧。OEM部分找一个我前期做的ROM,可以分出OEM的,反正这部分通用。2 E8 E( E0 H+ n/ ?- h$ y* x
4 E: e. u! o# _! Z7 n
% h8 \/ I0 f8 u; f& D+ X- }& f

. Q0 S: s7 p; `8 g+ U: P6 f这个是官方E8的ROM解开后的。可以看到SYS、NET、OEM等版本号,语言版本,DPI等。至于最后一个missing的dsm可不必理会。接着选择菜单中的Tools>buildpackages,接着DUMP下就会归类成OEM和SYS文件夹,如图:
$ l0 O6 e% _! @* S" A
7 e# p* x/ |9 j8 o: r( n) w/ p1 q1 H9 X2 f' r

. |* }9 R3 W. _1 e/ ^: U如果只是移植ROM,不考虑集成其他软件,OEM文件夹我们可以暂时不管,重点先看SYS文件夹:
3 i# P, j6 g/ Y# ^
3 I& P- u! h6 B- a7 j6 R- c& j! k- R这里面的都是一个个系统组件的模块,需要精简的,可以在这里把自己不需要的模块咔嚓掉,但如果搞不清楚这些模块的作用,那还是别乱动的好。分解的部分就这里了。
% C) h9 s+ X& k$ a+ E0 s/ i
2 ~( N+ `  ]/ k' H3 K0 U, K: H! x4 @- M' O7 z# n/ d1 _

3 e- H) K: B2 m% _/ \下载连接VGA-CHS-rgu+dsm.rar4 K6 l6 g: x1 y& ~, K. O

- y  D& L, h& ~" n9 D
3 y5 C6 L9 O% x2 S6 w* i
# V6 m* \4 B+ j! c
6 j  N* k8 o0 i
) B# P1 k- X6 X* }$ M6 j$ y
  P4 }+ M0 p, N' s8 y( b
7 }2 S) B" [7 c+ I: ]+ ]" Y% O6 |
0 X/ o9 @; I3 V, [1 N$ a* M- l5 }. e& F. g% O" V: f/ U

: K9 H1 {8 v1 e6 J: @3 Q- ^4 @* Z9 n1 m% Q4 l
, }/ w, B6 ?7 r* z( y: g
三、SYS的移植' _0 g" O1 _: h4 A
7 C* x# B0 q$ V0 d. _
其实这部分没什么特别的。如果你需要移植一个19199的ROM,那你可以多解开几个19199的ROM,其他机型的解ROM方法都会有所差异,套用一句老话“百度一下,你就知道”。这里要介绍一个很好用的软件:Beyond Compare 2。主要界面如下:1 J) s9 X/ Y# X/ h% r8 [
# {  r- b' T5 p2 n4 S1 G/ g$ w% }
! \5 v: ~9 ^9 i; b6 M$ j+ y
有什么不同的可以一目了然了。只需要把新版本对应的文件复制到你需要移植的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。
% C, F' b) q/ H* o; W  Z9 _9 z7 e% @2 W- U7 g% S
网上有一个sys移植的屏幕录像,大家可以去看看。基本思路就是保留自己的.ROM .VM 和metadata,其他用新核心的文件来对应替换。! F8 Z- j$ F+ \
: q$ P/ b' V& ?0 b- P% ]; C

+ c; E) J$ s' g6 T: A. f8 n- W1 v0 s" M/ n0 ^( w; q( F9 a& A

- s. G3 u- ?' @3 h, `2 C4 l  c) o0 O; \! d& r" v0 z9 a. {

- L3 y, \- x, A  R8 }
7 Z( `4 O' y/ A! ^- Y- a  t0 R  i+ y0 `$ s6 O$ K9 Z+ P" R7 C+ @
( C- X7 y& t& Z
# z7 M) x+ a  H$ g

& f1 B! B# R2 P2 Y9 u
, K% a; [7 R! U- L" |
( W) @' [( ~' d! Q$ ~# |& _0 H( D/ B$ b, T$ d0 t+ _
( R& B5 I) \5 m7 _# n
四、OEM软件集成
8 I: j' J5 o3 E" C2 Y* m  _$ h9 H1 w8 N( I5 V' x/ P
    这是大家比较关心的事情,集成自己惯用的软件,不用每次硬启都要重装软件,何乐而不为。最简单的办法,当然就是拿来主义了。Xbeta上有好多高手分享的OEM包,大家可以选择性地拿来用。如果要自己做OEM包也是可以的。要找这方面的资料应该还是很容易的。把需要集成的OEM包,放到OEM文件夹内。9 M! U9 L( u, l) d& g' `
    这时候,还需要建立一个和OEM、SYS同级的ROM文件夹,里面放一个作为种子的nb0文件(原理前面简单说过了),同时建立一个xip文件夹,在这个文件夹里面放一个boot.rgu文件(后面在讲述xip提取和移植的时候会谈到这个文件的来源)。
6 t% J: k& g; Z! w
4 f  c& z: l* D+ k& c( HOEM和SYS的同级目录下,放上BuildOS.exe、pkgcommon.dll和Tools目录,执行后,会扫描你的OEM包,把需要的勾上,但不要集成太多,ROM的空间也是有限的,不然后面封包的时候会出错,界面如下:, I7 C8 @5 `' K

3 A0 [+ Z' s: T. g; D. Z8 X( ^6 U) p/ k: q) z; R
9 ?3 m1 D) f$ m9 Y$ ^; P0 W
选好以后,点左上角的绿色小箭头,直至左下角显示Done,就算集成好了。过程中如果遇到出错,提示“文件已存在”,那说明OEM包里面和SYS里面的文件有重复,删除其中一个就可以。完成done后,BuildOS就可以关闭了。5 I& J- z* J, n. `* o) v
由于ROM里面的模块我们修改过,或者是从其他ROM里面移植过来的,地址会变得很乱,如果就这样直接生成ROM,很容易会造成地址冲突不能使用。这时候,我们需要用另外一个工具――G’reloc。作用就是重排这些模块的地址。用法如下:BuildOS运行后,会生成一个temp文件夹,在里面会有另外一个dump文件夹,改名为sys,在这个文件夹的同级目录中放上G’reloc,运行后,里面的数据都是自动提取的,点一下”Doit!”,等完成后关闭程序,把sys改回DUMP。# ?6 ?. B5 L- }
: w  k& o+ q; s2 [9 z2 O/ ~
  |! k8 g6 T; Z4 A! G& p5 g
; g- n1 s. f$ U1 v; Y
4 w) D% z4 D# w, @2 F. b

0 i6 h! x: e! F' s3 c, B2 W' w- r( n* w( F* O
  l. w( i  w# ^0 b+ Q
& m; X# ]4 \* e4 @% @

7 d- e1 L- U1 L& n4 e( a  Y3 l, Y* @2 s: h$ H0 d7 v4 w6 D

; V$ A) m1 P) z) Z0 ]* F6 D- K+ W  k7 p' ?
五、ROM的重新封装
+ K4 P8 C4 n. [; r5 L把种子ROM、之前dump出来的imgfs_raw_data.bin,BuildImgfs.exe、make_imgfs.exe、cecompr_nt.dll,一起放到上述处理过的重新生成的DUMP文件夹同级目录下。在命令提示符下输入:buildimgfs. U1 V7 D1 z6 m
这个过程和dump的过程差不多,需要等上几分钟,如果你上面集成的OEM包不太多,不至于把ROM的空间撑爆的话,那这个过程应该是很顺利的。完了以后,再执行命令,把ROM封包到我们的“种子”里,命令提示符下输入:make_imgfs 350.nb0 –nosplit! j# J- P* C# r
350.nb0就是你的种子ROM文件名,如图:  w" Y9 B; @4 l

" r9 z3 b: y8 C) ~0 d
" o+ I1 u  W$ W4 m+ a. o+ s4 ]' O0 r8 G! @8 K& F
这时候,生成的ROM就可以拿来刷机测试了。3 s5 L) x0 \4 ]! a4 y) Y$ G% a

2 b- H1 R3 q* ]; |以上过程做成批处理文件,就是一套350的模板了。& Y" U# {; ?- p' n1 _; V  e
0 t: l' g5 f- [4 y; M+ S
六、关于XIP的移植:% z% B# M* q9 a2 R- ?
我看过最详细的教程应该是这篇了:
/ r( ~- f( M. b  Ohttp://www.diypda.com/viewthread.php?tid=4305&extra=page%3D1
3 ~) a4 ?9 _) I* @' U/ c大家自己消化一下吧。上面用到的boot.rgu就是从xip中提取出来的。
+ u- Y0 ~. |. }具体到I350的XIP提取,简化一下,直接用附件350_dumpxip.rar,解压后,把nb0改名350.nb0后放一起,直接运行批处理就可以生成xip.bin了。
" d2 p. U1 U6 g& }. N" m% Y0 Q) @% Y) k8 t  Q
七、其他:
+ Z0 y* ~( i1 T. d, \9 ^上面的过程,只要用批处理文件适当处理,就可以做成I350的定制模板了。其他涉及怎么修改注册表,怎么修改文件路径的,大家也可以参考这篇文章:
+ i, x9 O. r0 Z& p8 f' }" Mhttp://www.diypda.com/viewthread.php?tid=2905&extra=page%3D15 Q: t+ k+ Q1 B5 R
写这篇文章不是单单为了让大家照葫芦画瓢,希望大家明白了这些基本原理以后,可以做出更适合自己使用的ROM。
0 L, E$ }. x9 A- Y* u4 c9 w: H5 G1 K+ E: B$ y/ l3 B- w' z* B2 o
八、附上述用到的命令的解释:: d$ N4 l2 k  T
prepare_imgfs.exe
* l) `* l  y2 a3 ^- M. u* ?; F: {6 o. j

* n* m( w" V( m" w; o  o5 m. X$ M+ A1 `
Splits nk.nba into imgfs_raw_data.bin and imgfs_removed_data.bin.
5 V) i8 m1 \7 ^imgfs_raw_data.bin - contains raw IMGFS data0 \( `. D: e6 h4 Z0 `+ v
imgfs_removed_data.bin - contains extra data (something like FAT table).
9 f6 o7 X" E1 `4 M" l3 o7 [Usage:; [$ ~% R( l5 H) j/ U6 `8 J( T5 \
" B) q! S7 U0 q; Y. d" L, A
prepare_imgfs.exe nk.nba [-nosplit] [-mpx200] [-acer]
( {$ \# `7 G- _Use "-nosplit" for HTC Wizard and Universal ROMs that don't contain extra
) Z% A% h( }- B# t! ]* Y+ ablocks of data. In this case imgfs_removed_data.bin would be empty.
. h  f. |( u) y. V, W: t( L7 G0 a5 t( Z" U0 _  c9 d
make_imgfs.exe
/ B, X* W% a* N" g% W6 ~* r2 u+ |: m) u& Y5 }. `  \
Reverse of prepare_imgfs. Combines imgfs_raw_data.bin and imgfs_removed_data.bin
+ A# O# g; G% `7 Q& iinto nk.nba file. Use -nosplit if it was specified for prepare_imgfs.exe.
1 R* ^& t; v& {: [  ZUsage:
, h9 }& e1 M7 ^& x! x. D- b) F
' Y; g4 Q# J8 W& Q) @7 ]6 }6 Umake_imgfs.exe nk.nba [-nosplit]  p& J* z3 k& |; u# a1 @
The nk.nba file would be used as a template, its contents would be overwritten.
: c* A8 O- T" h' Q& L# `, x4 Y
$ E( g. X4 F# _6 ^  @1 _* Y; Dviewimgfs.exe2 B1 `" a) X. `8 i/ p3 S

! I" ~# `8 s! _. d+ t" `$ [! I! o1 c* DDumps the contents of imgfs_raw_data.bin to "dump" subdirectory. Files are
1 [' O$ r7 ?6 ^- G4 H: c! mdumped as is, modules as directories. File time and attributes are preserved.. e6 t: a. b. I9 ~0 m
If RecMod.exe is present in the current directory, all modules are 8 @0 ?& Y: \! v6 R
reconstructed as working DLLs/EXEs and placed in the corresponding subdirectory.
' |; n0 N2 u0 g" M" ~% ]" uTool creates dump_MemoryMap.txt with address ranges occupied by modules.2 V  b* p- v3 ^; f
Usage:
, f$ t! X6 G) S* @9 i( d! G+ M2 G" R9 N" v  U% Z. O8 C! I
viewimgfs.exe imgfs_raw_data.bin3 p1 k- a. D9 v7 K' D! i/ X

( U- ^0 l( _" U7 ^5 T  F. n2 k8 o9 W' \. T/ J8 |) R+ p
) q* d, Z. h9 f; _, O4 i& J! Z

: ~$ ^+ c0 B' l下载连接350_dumpxip.rar - x# f( }3 t) W  R

) `) _& M+ r3 b) ][ 本帖最后由 lifehappy 于 2009-2-9 11:48 编辑 ]

VGA-CHS-rgu dsm.rar

230.63 KB, 下载次数: 637

350_dumpxip.rar

62.91 KB, 下载次数: 668

i350_ROM修改工具包.rar

5.4 MB, 下载次数: 473

回复

使用道具 举报

发表于 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网站上发帖,* R. Z  f9 X; p2 n! N- p
要求他们出新的6。1或6。5的ROM!!
回复 支持 反对

使用道具 举报

发表于 2009-5-15 08:43 | 显示全部楼层
我看到有人用的500v就有6.1版本的
" n7 b  ?( R9 K; M8 {2 K& W7 p7 f2 p6 v  |  A3 R: [6 t+ I( @
就是没看到如何刷
7 o& Z- E8 A: y  r% W% ^" _$ u- w- G# f! C) C! `
哪儿有rom
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 07:12 , Processed in 0.355663 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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