找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3359|回复: 10

ROM定制的基础教程

[复制链接]
发表于 2009-2-9 11:17 | 显示全部楼层 |阅读模式
这个教程是技嘉i350的教程,里面讲的是PPC的,,我也认真的看了一遍,可能跟500刷机的教程不同,我想应该很多地方跟500V还是一样的,毕竟都是windows的产品,,希望有兴趣的朋友大家一起共同研究。
6 A  `% M+ f( s& L还有一个就是king发的一个主题叫。关于目前还不完善的刷机方法说明。
& |9 z8 u( f3 J# I下面是分别两个帖子的原帖连接。
$ s6 l( O; Q2 b& u一个是制作教程,一个是刷机教程。
& h" |8 ~, B7 L' n6 \- H比我更白的小小白可能会问,两个不一样的吗?我是这样理解的,制作就好比微软开发程序,刷机就好像我们安装系统。
  O7 n! Y" c$ y1 w) S( v
6 v2 A6 u7 K8 }) \9 @ROM定制的基础教程     http://bbs.koxo.cn/viewthread.php?tid=63817&highlight=i350rom
$ D4 y  o; N3 K刷机方法                http://www.treo8.com/bbs/viewthread.php?tid=106012  @! p" f/ x, k& M

' Z! F$ W9 `0 s2 Y- B! a" O7 \3 }5 n9 N- L7 Q4 ~- |8 _4 E; s
下面进入正文
+ a- t# {) b' W( ~# ~
; e0 X( E( @4 ~* |6 {
  c& T4 g7 m, X% n; R( y  i% `
0 h  d" W' A4 ~( B: f, ?9 p6 f1 @: C3 o' x8 ]

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

$ `# w% `' o6 r) @1 l: H  X& x6 x% z$ E5 Q

# M' u8 P" a2 ?6 ?$ W# v! c# Y
$ W5 ^/ R# a+ P% e9 E2 Z
8 |* i, V7 p& d. a8 e2 a4 H' j
6 x3 l; `& G) @0 V( U' Q- w, \6 b- P7 @% H1 i' |2 F" e

6 ^- U9 Q' c; L7 |
% [5 S' ]4 l6 S/ s0 b4 p1 L! @
$ a3 U% S) m; D; B9 R0 U
* l9 |! q- [+ f1 @+ S# F; S+ u二、I350ROM的分解3 d; w: }3 j0 C0 s- R: B1 D  K
9 b4 A$ y% a# G* ~  D/ ~
ImgfsTools工具包可适用于很多不同机型的ROM。对于分解ROM,常用到的工具有:prepare_imgfs.exe、viewimgfs.exe
( L7 R  }9 v: d& R3 c* X我们把ROM放到imgfstools的文件夹中,在命令提示符下,执行:- R# _  e4 V" s$ [
1.prepare_imgfs 350.nb0 –nosplit
! r5 o* x8 F, V6 x" Q, d如图,这里350.nb0是你要解开的ROM的名称
1 V: m9 N2 l" ~% A5 K% ?- V9 Y; b4 y6 `2 z8 b' \
1 c" [0 I/ y% m! |
在目录下会生成三个文件:imgfs_raw_data.bin、imgfs_removed_data.bin和dump_MemoryMap.txt。第一个imgfs_raw_data.bin是我们需要的。接着运行viewimgfs imgfs_raw_data.bin,如图:
( J7 F- K! {# T/ z0 w! _$ V1 E7 W
8 T8 `$ M: @  k. [  C4 i: ^8 @/ [* f! S

7 _  y6 `& C1 }接着就是5-10分钟的等待,ROM正在解开,会生成一个dump的目录,里面的文件就是我们需要的,移植、汉化、修改,主要都在这里完成了。但是打开一看,里面的文件多得可以让你晕头转向的:
" m. x8 _+ c+ `4 q. y0 U
9 N' c' V% ?4 h0 E5 Q
2 D. u9 T0 I' {( ^. V' n
' b0 O4 Q' w8 {& d8 q  V上面提到过BEPE的Package Tool,下面我们就用它来整理一下这些看上去杂乱无章的文件,运行后选中DUMP文件夹,会看到类似的版本信息:
6 E% I. p2 J9 ~$ Q9 S$ [  f* g0 J; J9 D1 h
如果看不到这些版本信息,那说明里面的dsm、rgu已经被清理掉了,怎么办呢?- o# s6 y# _* _# `% `# c2 X" ^4 o
我们先关注sys,OEM部分先不管,找一套完整的rgu、dsm和.sof(见附件)复制到DUMP目录,再运行Package Tool,
% s. {* e' C6 P5 Z这时候你看到的版本信息是不对的,但不妨碍我们获得SYS。
# ^6 t1 d; ~$ q/ n/ w/ b& FSYS目录外的先删除吧。OEM部分找一个我前期做的ROM,可以分出OEM的,反正这部分通用。
! {* E/ v0 s: V7 }# h0 u' H0 O$ h$ W' N; ^  U4 x

- a1 c& D2 I' s5 \
3 ]" V% l. g& h1 T; x这个是官方E8的ROM解开后的。可以看到SYS、NET、OEM等版本号,语言版本,DPI等。至于最后一个missing的dsm可不必理会。接着选择菜单中的Tools>buildpackages,接着DUMP下就会归类成OEM和SYS文件夹,如图:
" N2 I1 ]$ ?" y) F! h+ }7 v5 ^# z$ x- T$ n- N, s

% \# Q' q; N. h: e5 ?2 z$ R8 r( V' S
如果只是移植ROM,不考虑集成其他软件,OEM文件夹我们可以暂时不管,重点先看SYS文件夹:
3 }5 _& x' ~% v6 s0 T+ f' Z+ i. p+ f# V* t! w
这里面的都是一个个系统组件的模块,需要精简的,可以在这里把自己不需要的模块咔嚓掉,但如果搞不清楚这些模块的作用,那还是别乱动的好。分解的部分就这里了。
- R7 W( E9 i; K: ~2 H) A2 N
# n9 Q' X9 n+ O  O; h( L* x$ B  C; f9 R  s9 G' k! h8 T
3 J2 S9 X) }/ I9 t( x( L
下载连接VGA-CHS-rgu+dsm.rar! D' @% i# u" o4 P
% P4 _2 G( _0 x) N. r6 W) |% m) i

8 U. ~$ J- T+ }: e0 F. G8 V2 z* `- ?

2 H! j! D7 [1 ?) X
1 f# Y8 C$ x/ T* @" t+ B. D: K  w) c7 s; H) S3 v* K! }

- \; D& e7 O- C: H6 [9 t
2 z$ [9 ~" N3 g7 g6 x+ C- N  [: D, g  L' |9 \2 U4 V

- V) |3 y; t& r# V$ j/ j! ]& N% l" C/ K  [! u
( S% o+ j  w# P: `9 o+ |6 E
三、SYS的移植4 g2 h1 j3 I9 _6 k9 g% p0 ]' |2 _* O
2 y4 h7 b" I, B7 Y# \* i( @) I
其实这部分没什么特别的。如果你需要移植一个19199的ROM,那你可以多解开几个19199的ROM,其他机型的解ROM方法都会有所差异,套用一句老话“百度一下,你就知道”。这里要介绍一个很好用的软件:Beyond Compare 2。主要界面如下:
: m' P3 @* d' `. d% k1 D9 z2 e9 N7 [) O" S+ @

$ h9 a& n/ Q! C+ o# y* K) f有什么不同的可以一目了然了。只需要把新版本对应的文件复制到你需要移植的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。! }) K1 i+ @. f( g, _7 o/ t
8 c0 e5 L# `1 V! {3 c
网上有一个sys移植的屏幕录像,大家可以去看看。基本思路就是保留自己的.ROM .VM 和metadata,其他用新核心的文件来对应替换。! H/ I( a! Z. ^" f' @. N" I# V

9 [' A3 z/ U3 M' x3 `7 X* \# C
% t7 w4 d5 P4 |3 e, {% u; o, v8 g# O( x& N( {4 V

2 v6 v* U9 z0 T
8 w7 I2 W7 T' f  m* ~6 I# r8 [; D$ a, u9 F6 Z3 `: n
5 W/ n% J  J& u" @

8 [9 i2 X. |* o; z, H) d# H$ e' y4 S; s1 q; k4 Y) o' n! N8 `
9 V4 b/ _' F' n% a# q
. ~7 l. t5 \" H3 G

9 u* u% t1 P; j) g+ a7 D% ^* V& x- @

1 Y9 A2 J% Y* |% y0 X! ~( F( l9 I" n: c5 [! D
四、OEM软件集成
( G  u8 n& \' }" Z/ e( G
; g" ^/ Y9 K; {( n) E' d    这是大家比较关心的事情,集成自己惯用的软件,不用每次硬启都要重装软件,何乐而不为。最简单的办法,当然就是拿来主义了。Xbeta上有好多高手分享的OEM包,大家可以选择性地拿来用。如果要自己做OEM包也是可以的。要找这方面的资料应该还是很容易的。把需要集成的OEM包,放到OEM文件夹内。& F3 h0 \5 M3 [! {, \2 w' |
    这时候,还需要建立一个和OEM、SYS同级的ROM文件夹,里面放一个作为种子的nb0文件(原理前面简单说过了),同时建立一个xip文件夹,在这个文件夹里面放一个boot.rgu文件(后面在讲述xip提取和移植的时候会谈到这个文件的来源)。- [/ w, e' H3 a" N. K( G
: Z6 l2 q* m8 z% x. S: A/ J
OEM和SYS的同级目录下,放上BuildOS.exe、pkgcommon.dll和Tools目录,执行后,会扫描你的OEM包,把需要的勾上,但不要集成太多,ROM的空间也是有限的,不然后面封包的时候会出错,界面如下:
& D" ], D5 R, _+ a/ W7 a$ p0 h: |) M! h( P4 U8 a
. c- R; M! f3 |

3 {1 z3 ]- R. `6 c" j) c# b选好以后,点左上角的绿色小箭头,直至左下角显示Done,就算集成好了。过程中如果遇到出错,提示“文件已存在”,那说明OEM包里面和SYS里面的文件有重复,删除其中一个就可以。完成done后,BuildOS就可以关闭了。4 O% |$ _9 k8 _0 E1 y
由于ROM里面的模块我们修改过,或者是从其他ROM里面移植过来的,地址会变得很乱,如果就这样直接生成ROM,很容易会造成地址冲突不能使用。这时候,我们需要用另外一个工具――G’reloc。作用就是重排这些模块的地址。用法如下:BuildOS运行后,会生成一个temp文件夹,在里面会有另外一个dump文件夹,改名为sys,在这个文件夹的同级目录中放上G’reloc,运行后,里面的数据都是自动提取的,点一下”Doit!”,等完成后关闭程序,把sys改回DUMP。
8 y& g# l* C' G
% w. D, N2 ^( G 1 O( ]1 b5 Q. q1 ^+ X
) e9 N. i6 M& j, w' m

9 a, x& q$ d  p# ?1 K; d4 H( m
) _' M! [) I- k/ D1 L% |8 V1 |' G9 E9 e% t0 O9 U6 L
" t# q: V) w/ i" R9 a
- n- q& `! I; K& W, [  a- d! P/ F

& F1 ^$ f* T" B$ H/ Q7 I+ A- f  Q7 q8 f- G4 X
, S: |; `# j1 U2 T/ e2 @
2 q+ v; G  ]8 g7 J! c. G
五、ROM的重新封装
: G# m2 I3 [. v! b: N把种子ROM、之前dump出来的imgfs_raw_data.bin,BuildImgfs.exe、make_imgfs.exe、cecompr_nt.dll,一起放到上述处理过的重新生成的DUMP文件夹同级目录下。在命令提示符下输入:buildimgfs3 L/ q0 I8 b5 V& f
这个过程和dump的过程差不多,需要等上几分钟,如果你上面集成的OEM包不太多,不至于把ROM的空间撑爆的话,那这个过程应该是很顺利的。完了以后,再执行命令,把ROM封包到我们的“种子”里,命令提示符下输入:make_imgfs 350.nb0 –nosplit' \) `; i# L' Q" b# G% x5 G% K
350.nb0就是你的种子ROM文件名,如图:
$ e6 j0 _/ U! W- C
* V  U; n- C: r; b7 E+ [5 L7 @2 k/ i7 S; N4 A# e
  o2 o6 R# e8 H7 _8 j% @
这时候,生成的ROM就可以拿来刷机测试了。
* a8 e. A  x9 p# S  c6 H
, q8 r' U# h  O) a4 C/ n$ Q' k以上过程做成批处理文件,就是一套350的模板了。
5 V* @4 K/ q( A0 J( t( {3 a$ k% A4 F, Q/ E! H( l0 b
六、关于XIP的移植:
3 E# [( P: N& ]. x/ B! c1 _6 O我看过最详细的教程应该是这篇了:
' \+ U4 Z& C* E, T* A3 Yhttp://www.diypda.com/viewthread.php?tid=4305&extra=page%3D18 ]& f- R7 e+ r$ X" O. @
大家自己消化一下吧。上面用到的boot.rgu就是从xip中提取出来的。
2 w: _* ]* n" w' y具体到I350的XIP提取,简化一下,直接用附件350_dumpxip.rar,解压后,把nb0改名350.nb0后放一起,直接运行批处理就可以生成xip.bin了。
) J  p; w! F& {4 q5 B2 f- O8 I/ m: F( W; O$ |
七、其他:
7 M: {; p" R, {6 h- x上面的过程,只要用批处理文件适当处理,就可以做成I350的定制模板了。其他涉及怎么修改注册表,怎么修改文件路径的,大家也可以参考这篇文章:
" b4 V. T& M5 X& o2 K4 Rhttp://www.diypda.com/viewthread.php?tid=2905&extra=page%3D1( m4 O; c/ h4 `. w. N& L# X
写这篇文章不是单单为了让大家照葫芦画瓢,希望大家明白了这些基本原理以后,可以做出更适合自己使用的ROM。' t9 S! R0 L9 ]5 W+ R) z

. f  |# g6 Z% T: I4 Q5 }- s八、附上述用到的命令的解释:- v2 @; A+ N) _
prepare_imgfs.exe
8 {4 q7 v0 ]/ S" l  X6 P# N9 O9 Y/ `: r
8 \& V3 M1 G! s
' [& k/ i( P$ R9 Q9 w5 S
Splits nk.nba into imgfs_raw_data.bin and imgfs_removed_data.bin.
1 Z* r& D9 I/ \% y  [$ Uimgfs_raw_data.bin - contains raw IMGFS data
8 W2 q4 B1 ?! d  fimgfs_removed_data.bin - contains extra data (something like FAT table).
- K1 V( P6 x3 a+ N" _" k. JUsage:
7 k# v3 c$ _; A7 P4 w- W
& Y7 Y$ D9 t( m0 ^" u+ H' Bprepare_imgfs.exe nk.nba [-nosplit] [-mpx200] [-acer]0 f% o% f5 y& Y; j- k
Use "-nosplit" for HTC Wizard and Universal ROMs that don't contain extra % l( Q& n. [9 `# N2 p7 h5 w  T
blocks of data. In this case imgfs_removed_data.bin would be empty.
% F8 k, F  F% k& E2 F2 K
. @9 [2 s( ]7 C" }* |make_imgfs.exe
, U' e* t3 A6 ~# x- k2 g" \8 i! v4 o$ g
Reverse of prepare_imgfs. Combines imgfs_raw_data.bin and imgfs_removed_data.bin) s* o/ p2 A* b6 P3 u6 p4 W
into nk.nba file. Use -nosplit if it was specified for prepare_imgfs.exe.
2 X6 k+ Y% {+ [+ @, {" y1 qUsage:
$ ^+ _( B6 b! n9 \' g2 s) K# O; M% E
make_imgfs.exe nk.nba [-nosplit]
7 }; ?) k  o" c. t6 l/ HThe nk.nba file would be used as a template, its contents would be overwritten.! t4 j8 c: n8 D( {4 u+ Z

% M0 Z5 t( O& b/ `/ J5 m( e" \viewimgfs.exe. f+ [% W4 _" i4 g
0 s5 B& r' p1 U$ S7 j; B
Dumps the contents of imgfs_raw_data.bin to "dump" subdirectory. Files are + {) j# h4 P) R* h, d6 O
dumped as is, modules as directories. File time and attributes are preserved.0 Z* m$ C/ U6 f0 @' h+ h) B  w
If RecMod.exe is present in the current directory, all modules are
( v/ w& i) V/ d+ h, P  u- [reconstructed as working DLLs/EXEs and placed in the corresponding subdirectory.
" n6 \0 T' @3 J1 x9 x; r; p6 H& v# \Tool creates dump_MemoryMap.txt with address ranges occupied by modules.
/ O; @6 Y! |! p' hUsage:
- N6 K) M: A$ Y! Z6 p3 t
. R+ O4 X) i8 t) T6 j; X8 {, ~viewimgfs.exe imgfs_raw_data.bin4 H. X8 G6 }( i7 O

3 {$ m- L& V+ H- c& T5 Y
7 o. A$ p. d# q3 D; d5 }5 X2 C$ `$ O3 }6 i" t2 U! j0 l
4 h+ q( y8 C2 A0 y# b. X- V6 |$ ?  R
下载连接350_dumpxip.rar
: |9 T# J) S9 k9 {1 _! T, \
# B. u1 N! W. U/ ]% \[ 本帖最后由 lifehappy 于 2009-2-9 11:48 编辑 ]

VGA-CHS-rgu dsm.rar

230.63 KB, 下载次数: 636

350_dumpxip.rar

62.91 KB, 下载次数: 667

i350_ROM修改工具包.rar

5.4 MB, 下载次数: 472

回复

使用道具 举报

发表于 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 {1 @* y2 ]& }: s% K5 V6 `" b
要求他们出新的6。1或6。5的ROM!!
回复 支持 反对

使用道具 举报

发表于 2009-5-15 08:43 | 显示全部楼层
我看到有人用的500v就有6.1版本的$ o% Z0 p2 D3 m
1 p0 E' m, ^1 }- P! U& Y
就是没看到如何刷
& x% O% D/ |* H" K+ d! _4 i6 [9 ~) m& V3 p1 ]7 i
哪儿有rom
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 14:47 , Processed in 0.381275 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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