找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3353|回复: 10

ROM定制的基础教程

[复制链接]
发表于 2009-2-9 11:17 | 显示全部楼层 |阅读模式
这个教程是技嘉i350的教程,里面讲的是PPC的,,我也认真的看了一遍,可能跟500刷机的教程不同,我想应该很多地方跟500V还是一样的,毕竟都是windows的产品,,希望有兴趣的朋友大家一起共同研究。6 k# l) T0 B4 S# [
还有一个就是king发的一个主题叫。关于目前还不完善的刷机方法说明。
+ n6 Q+ Z9 E% S/ G/ p下面是分别两个帖子的原帖连接。
+ }: e) U/ v: [# e. U2 `一个是制作教程,一个是刷机教程。
0 G/ G, B+ D0 c% t/ ]比我更白的小小白可能会问,两个不一样的吗?我是这样理解的,制作就好比微软开发程序,刷机就好像我们安装系统。, V  X4 d3 X" n. E8 j0 _5 H* G6 W
) I1 g' Q- Z- h: c$ `( f( M
ROM定制的基础教程     http://bbs.koxo.cn/viewthread.php?tid=63817&highlight=i350rom6 q) q: ~# z$ j& X0 F% M
刷机方法                http://www.treo8.com/bbs/viewthread.php?tid=106012- f6 o4 j8 z, t' G$ m" S
0 Q3 s' e+ g$ |7 _. }2 k$ U* r
/ l% ^; M& A& y4 u) ?+ ~/ T
下面进入正文
  q6 y& I/ Z0 ?* |; e/ F
1 w. U" B6 P4 m0 m0 ]# N
; I+ X8 D# M$ Q, ~- A4 g
1 o% v: T, S5 f& x5 o# v# t3 U5 K$ g7 Y5 Z  J0 R0 q

) X- c! x; n  f8 t: r: `% D! l  \% J1 y6 l2 C
一、认识I350 ROM的构成3 t1 E9 e+ ?! t

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

  A8 k6 \7 m* G& \) v) V- Y% ~  ^. D( T6 ?2 E& q2 n, a
0 q, T- F9 C/ a3 |" w0 s

1 j/ ?7 d# d& v3 \- o3 A3 |( g4 z8 K3 w+ |  B" }8 t/ S% |
0 G7 R( I+ {% s
& O# N) ^2 Z$ W" i. u) f: n/ ?
" {! K" d7 J( X' g. Z5 P

* G1 f: ?: X; j. \4 I; q" L
8 J: F) H7 m# _, N5 P) @4 {2 Z& w& ?+ S1 b
二、I350ROM的分解
9 o' n, _- t* l( n- e. {. }; X& W; B* p- R( u
ImgfsTools工具包可适用于很多不同机型的ROM。对于分解ROM,常用到的工具有:prepare_imgfs.exe、viewimgfs.exe
/ c; D. j- n/ H1 N# T) {我们把ROM放到imgfstools的文件夹中,在命令提示符下,执行:
2 M1 L5 l9 A: p, ~1.prepare_imgfs 350.nb0 –nosplit
+ V3 ~: i8 P- N如图,这里350.nb0是你要解开的ROM的名称
" }1 r! O% s! X" X& B: J' W
& v6 c4 @. \# `& X4 A" Y) [/ u9 f; U! o+ d% s
在目录下会生成三个文件:imgfs_raw_data.bin、imgfs_removed_data.bin和dump_MemoryMap.txt。第一个imgfs_raw_data.bin是我们需要的。接着运行viewimgfs imgfs_raw_data.bin,如图:1 a, N# Q" ~& c4 s0 `: k6 h
/ b9 {6 Y( @" X4 M
6 T7 @# L( j' @5 @- \* K- F
# M0 ?/ @; U( _* h1 p# {( p7 b. s
接着就是5-10分钟的等待,ROM正在解开,会生成一个dump的目录,里面的文件就是我们需要的,移植、汉化、修改,主要都在这里完成了。但是打开一看,里面的文件多得可以让你晕头转向的:, a' ^; E2 T( w6 x+ [

4 h/ Z: r; c2 E9 U4 x( ]- a8 c3 ?; H2 R- O
0 X* a) V3 L( g5 y, K
上面提到过BEPE的Package Tool,下面我们就用它来整理一下这些看上去杂乱无章的文件,运行后选中DUMP文件夹,会看到类似的版本信息:
/ X/ P+ ~! |, ~0 I
& F3 H& ], B8 l如果看不到这些版本信息,那说明里面的dsm、rgu已经被清理掉了,怎么办呢?
- s. o& k/ G% r/ x* ~2 U( M: v我们先关注sys,OEM部分先不管,找一套完整的rgu、dsm和.sof(见附件)复制到DUMP目录,再运行Package Tool,% V& W* N: a: V  x2 p8 v# `# M: P; J
这时候你看到的版本信息是不对的,但不妨碍我们获得SYS。
$ O/ T) L1 l* \) YSYS目录外的先删除吧。OEM部分找一个我前期做的ROM,可以分出OEM的,反正这部分通用。
8 R5 y6 `- V% B1 W& Y7 v# |; I# ~
! a/ Z% J  N7 o& [; z7 B

  e0 [) j7 V7 k# _! m9 x这个是官方E8的ROM解开后的。可以看到SYS、NET、OEM等版本号,语言版本,DPI等。至于最后一个missing的dsm可不必理会。接着选择菜单中的Tools>buildpackages,接着DUMP下就会归类成OEM和SYS文件夹,如图:+ ?7 m9 A+ f: ~

3 }! h9 _* C0 l) c# o
0 L! q6 W8 f. A& t* R; b& }2 {$ \3 T: t0 U" l- f
如果只是移植ROM,不考虑集成其他软件,OEM文件夹我们可以暂时不管,重点先看SYS文件夹:2 a, O( o% k: l
7 z+ n+ a1 K. \& n+ g6 L! W
这里面的都是一个个系统组件的模块,需要精简的,可以在这里把自己不需要的模块咔嚓掉,但如果搞不清楚这些模块的作用,那还是别乱动的好。分解的部分就这里了。5 ?  u/ A0 T) J% Z2 ]2 t4 ]
3 E& e) D! n5 ^, Y5 Z8 X
$ {) f: f% l6 E( p; C8 P9 g

& }8 k5 V% f5 ~下载连接VGA-CHS-rgu+dsm.rar; o; O# o) \! @
8 w9 g4 X/ U6 u
0 Y  N8 f0 X  `6 ^

4 l, R0 I7 m+ t" k& B: Y" I
8 J  L, ?/ d4 C! e
) |. j5 s2 _; t( i' {
; C* y# g3 _5 K  W  y  M5 s
6 E  C0 r8 E, U" X% x( D
$ n5 ?$ D- r% {1 W; ^  ^* C# a. M8 W! h3 s+ V: A7 A" q7 R; ]% ~2 ~

3 u# |* ~$ _6 y4 H- I" X7 N( N. u3 o: x% o

% U8 _% c; L" q三、SYS的移植
" Z8 M3 v, H  d: V) ]9 s( s. q5 Y
+ h: u' |7 Q+ ^4 G% x( I4 u其实这部分没什么特别的。如果你需要移植一个19199的ROM,那你可以多解开几个19199的ROM,其他机型的解ROM方法都会有所差异,套用一句老话“百度一下,你就知道”。这里要介绍一个很好用的软件:Beyond Compare 2。主要界面如下:
( Z5 G8 F  y& A2 o  [* R7 f  b0 O3 @* M& e; c! y+ [2 @
* t* u% F5 p' O
有什么不同的可以一目了然了。只需要把新版本对应的文件复制到你需要移植的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。
6 P# ?1 I# x$ B9 ^; X
3 _- g- X: q+ M8 U! Q网上有一个sys移植的屏幕录像,大家可以去看看。基本思路就是保留自己的.ROM .VM 和metadata,其他用新核心的文件来对应替换。+ h$ E  h! s0 Q( V4 e, @
- c! r" w0 |% ]. l) c" Q4 q

9 n. a8 o  e) C+ p4 t! k1 q+ [+ P. Q
* H2 a- z1 w! g+ _
% P( o, ?) c3 d$ R7 g3 x; I- \* G

2 ?0 g$ I  i" u  t
/ J" {: g: n  V- w/ p8 G! `7 J8 s# v$ `. _

! h6 e9 A$ f# j4 Q; P8 X
; I6 t0 @5 g* u) y0 T7 z7 q3 b7 f' I2 A2 v/ g: D- A  q
: Y3 j% x3 W: ?; a1 h: O
/ \  C- a0 u6 B5 r0 U& ]7 _

9 y/ x7 i3 t5 ^$ Y8 N/ s/ U, |0 L0 N  k; `" q2 A8 a* u% E# d
四、OEM软件集成
/ G1 X! V3 y7 T% f6 A3 j; j9 A( Q+ j$ F
    这是大家比较关心的事情,集成自己惯用的软件,不用每次硬启都要重装软件,何乐而不为。最简单的办法,当然就是拿来主义了。Xbeta上有好多高手分享的OEM包,大家可以选择性地拿来用。如果要自己做OEM包也是可以的。要找这方面的资料应该还是很容易的。把需要集成的OEM包,放到OEM文件夹内。7 E) u1 D7 Y* Y+ O; [1 K; k
    这时候,还需要建立一个和OEM、SYS同级的ROM文件夹,里面放一个作为种子的nb0文件(原理前面简单说过了),同时建立一个xip文件夹,在这个文件夹里面放一个boot.rgu文件(后面在讲述xip提取和移植的时候会谈到这个文件的来源)。$ F* V4 h# y* Q8 L) d

. V7 v; X2 }6 z+ |, C; OOEM和SYS的同级目录下,放上BuildOS.exe、pkgcommon.dll和Tools目录,执行后,会扫描你的OEM包,把需要的勾上,但不要集成太多,ROM的空间也是有限的,不然后面封包的时候会出错,界面如下:, L* p  J+ t( s0 v2 b! g6 f

! d3 ~5 k- g1 Q  I4 P& g1 r
* l' U6 e, C2 I
6 e, y: ]5 w4 `7 o- b4 C选好以后,点左上角的绿色小箭头,直至左下角显示Done,就算集成好了。过程中如果遇到出错,提示“文件已存在”,那说明OEM包里面和SYS里面的文件有重复,删除其中一个就可以。完成done后,BuildOS就可以关闭了。8 w1 E9 t) h# g+ b. f
由于ROM里面的模块我们修改过,或者是从其他ROM里面移植过来的,地址会变得很乱,如果就这样直接生成ROM,很容易会造成地址冲突不能使用。这时候,我们需要用另外一个工具――G’reloc。作用就是重排这些模块的地址。用法如下:BuildOS运行后,会生成一个temp文件夹,在里面会有另外一个dump文件夹,改名为sys,在这个文件夹的同级目录中放上G’reloc,运行后,里面的数据都是自动提取的,点一下”Doit!”,等完成后关闭程序,把sys改回DUMP。' _* C# H- G, D) ~) T6 D# B
: X" P, f8 w- }0 g* c: t3 ?1 U
: D$ X' U* W5 ~1 f& S

8 p. _( C8 l/ j/ [1 W4 M7 a2 n: u# j0 F& [: E. |  G! r# n  ?& {5 e2 T
: s& }, D5 q5 y2 t* q& E- i, b- n
5 J8 [7 {# M: w  t

% Q$ e, _! o* j4 J6 U# |; v: r1 [. O- P0 d0 M# D4 r1 H# R5 ?5 Y
% n3 a; H& p. R3 m
0 P7 a# B  G# |) @$ A; L# w' o

3 |) ]7 B3 X, N: ?: M- \$ @- ~
4 U/ _9 s4 \& Y五、ROM的重新封装, u8 M# N: w" H2 A8 S$ M. h6 l
把种子ROM、之前dump出来的imgfs_raw_data.bin,BuildImgfs.exe、make_imgfs.exe、cecompr_nt.dll,一起放到上述处理过的重新生成的DUMP文件夹同级目录下。在命令提示符下输入:buildimgfs. u9 b8 a6 n$ y. P. h- \
这个过程和dump的过程差不多,需要等上几分钟,如果你上面集成的OEM包不太多,不至于把ROM的空间撑爆的话,那这个过程应该是很顺利的。完了以后,再执行命令,把ROM封包到我们的“种子”里,命令提示符下输入:make_imgfs 350.nb0 –nosplit- o) x- N; N; P) q& R6 w, J( y
350.nb0就是你的种子ROM文件名,如图:
1 @9 T4 i, h: v) p* U1 w
! ^$ p. \6 Z) L" g7 Z$ U# S
: W3 [7 ~, D4 e  |8 P# ~$ k- H$ W; {9 a' `0 j6 [; L% M9 ]
这时候,生成的ROM就可以拿来刷机测试了。4 Z: d# A; [* R% j/ {! D

/ ?% q  l& s7 x4 W  \以上过程做成批处理文件,就是一套350的模板了。
- J5 t# X/ z. B4 u2 ?7 {
  U* D6 l; G9 k  K六、关于XIP的移植:6 \: Q4 L* J# ^# W2 r$ Z; i$ H- s
我看过最详细的教程应该是这篇了:
* y1 d% G2 F  }1 A# xhttp://www.diypda.com/viewthread.php?tid=4305&extra=page%3D1  f  J9 k" S7 r* a" V2 w* n& n
大家自己消化一下吧。上面用到的boot.rgu就是从xip中提取出来的。
8 x: u) t' ?' W6 ]0 P* M* |具体到I350的XIP提取,简化一下,直接用附件350_dumpxip.rar,解压后,把nb0改名350.nb0后放一起,直接运行批处理就可以生成xip.bin了。
& V4 z5 Z8 u3 G3 G- Y0 D8 M3 P3 y2 {- O
七、其他:& m4 l0 U3 N0 g' @% A/ ]
上面的过程,只要用批处理文件适当处理,就可以做成I350的定制模板了。其他涉及怎么修改注册表,怎么修改文件路径的,大家也可以参考这篇文章:
" i1 O4 E4 M$ O4 Nhttp://www.diypda.com/viewthread.php?tid=2905&extra=page%3D1
  Q! b9 D4 O; j8 C8 B) }8 e) e4 R9 n写这篇文章不是单单为了让大家照葫芦画瓢,希望大家明白了这些基本原理以后,可以做出更适合自己使用的ROM。6 b! T8 {" |$ _* y; E
' s# Z: Z# @- E2 {
八、附上述用到的命令的解释:
3 R" I" R) G& \3 R9 Z) o' Nprepare_imgfs.exe) @: W' g2 T( u
) v- b3 b; L; {8 F

* w& u* W% ^) }
: m+ ]5 l7 `" O" Z& {- kSplits nk.nba into imgfs_raw_data.bin and imgfs_removed_data.bin.
2 c9 f/ Z+ o% s) f6 ?  g" eimgfs_raw_data.bin - contains raw IMGFS data
' W! {) U) g) s( ]- zimgfs_removed_data.bin - contains extra data (something like FAT table).
3 o8 k, T' g2 B! ]Usage:. @) h2 x5 k' D8 P( X) x6 P

1 Z, E: k% s+ Z1 [+ O; Kprepare_imgfs.exe nk.nba [-nosplit] [-mpx200] [-acer]  @$ Y* y- P- G) H1 y7 B* z
Use "-nosplit" for HTC Wizard and Universal ROMs that don't contain extra 2 @. b6 [- P* c
blocks of data. In this case imgfs_removed_data.bin would be empty.
, y7 l$ \5 b1 q3 C, i
- O* N7 o6 O1 {, B! Mmake_imgfs.exe
, ~+ R* C! f7 h1 q8 J
5 H( H. g9 E- B2 y6 B* s' u7 _Reverse of prepare_imgfs. Combines imgfs_raw_data.bin and imgfs_removed_data.bin
; m% K4 ?  z0 Z" [into nk.nba file. Use -nosplit if it was specified for prepare_imgfs.exe.
2 Y8 x1 K3 g, a( q: OUsage:
# [1 E$ {3 W. ?7 h8 \
8 U; G  t( W) umake_imgfs.exe nk.nba [-nosplit]1 O8 t: s1 O% `. M, S7 X; }. C9 x
The nk.nba file would be used as a template, its contents would be overwritten.
+ H/ ?$ m  ?& M* p0 d! |/ g/ J, U8 P2 Y
viewimgfs.exe
" m, O3 r* i; k' c
! M0 [  o; I6 M+ L8 a; A. ]Dumps the contents of imgfs_raw_data.bin to "dump" subdirectory. Files are # S5 {1 J% @8 a6 O+ Y
dumped as is, modules as directories. File time and attributes are preserved.
8 A# i0 F) C5 wIf RecMod.exe is present in the current directory, all modules are
, L! O! c7 P1 I+ O0 Qreconstructed as working DLLs/EXEs and placed in the corresponding subdirectory.
! d5 |1 T3 d4 y% @, lTool creates dump_MemoryMap.txt with address ranges occupied by modules.
' Z7 D1 t# v1 B1 ?' O- z6 e. V4 OUsage:
, c$ b/ A, s' L6 v& v6 h
% c& v( d3 W3 F8 u; g' o; {6 hviewimgfs.exe imgfs_raw_data.bin
5 X6 I+ X; u, L# }6 g9 k# y9 a  j6 @
3 R) T" M' W, E: v7 n+ K; L1 P

+ Y  }: l+ X. b, ~7 M6 M# s* |4 m+ w" n! e6 ?# H+ P9 u% r
下载连接350_dumpxip.rar 1 F& Z! P. M  s. b$ k
- l* x; a% ^, R2 a% l2 m9 N
[ 本帖最后由 lifehappy 于 2009-2-9 11:48 编辑 ]

VGA-CHS-rgu dsm.rar

230.63 KB, 下载次数: 635

350_dumpxip.rar

62.91 KB, 下载次数: 666

i350_ROM修改工具包.rar

5.4 MB, 下载次数: 471

回复

使用道具 举报

发表于 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网站上发帖,% _* M( ?3 X. u( e/ _- l8 N6 l" t
要求他们出新的6。1或6。5的ROM!!
回复 支持 反对

使用道具 举报

发表于 2009-5-15 08:43 | 显示全部楼层
我看到有人用的500v就有6.1版本的7 o. l  _7 K* W+ w) Y* G0 w" ?

  ?3 A0 v4 i- B0 L就是没看到如何刷. c8 b4 G7 `! S' L$ L& [9 L, K
) Q* m" o2 @9 e/ A9 Z" M6 ^
哪儿有rom
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-28 18:51 , Processed in 0.352453 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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