原创:catine_001 相关刷机包见: 摩托罗拉刷机包和固件下载地址:firmware.center
一:编译内核:
1:首先你要建立交叉编译环境。
(交叉编译环境的建立不在本文的谈论范围内。相关教程百度、google。)
2:下载E2、A1200、E6内核源码:
https://opensource.motorola.com/ https://sourceforge.net/motorola/wiki/Projects/
kernel-R564_G_12.00.40P-r1.tar.gz
3:解压得到linux-2.4.17文件夹,将3D辛苦自己做的ilove3d_kernel_v3.diff补丁复制到linux-2.4.17
文件夹里面。
在linux-2.4.17文件夹内打开命令终端,打补丁:patch -p1 ilove3d_kernel_v3.diff
4:用UE32编辑linux-2.4.17文件夹里面的Makefile,修改交叉编译的命令路径:
CROSS_COMPILE = ****************为你自己的arm-linux-gcc所在的路径
5:在linux-2.4.17文件夹内打开命令终端,
./setup.sh PRODUCT=SUMATRA
make dep
make bzImage
生成的zImage在linux-2.4.17/arch/arm/boot里面
zImage开头补齐2048字节的FF,末尾补齐FF使zImage的大小为1048576字节(1M)
将zImage改名为CG33_0x000A0000.smg
替换sbf刷机包解开的CG33_0x000A0000.smg,打包新的sbf就拥有你自己编译的新内核了。
二:修改rofalsh、mtd分区
1:用SBFCodec.exe解开一个传统的刷机包,看各个smg子包的起始地址: 2:修改roflash分区 \linux-2.4.17\drivers\block\roflash\ezx_parts.c
这一段 对比smg的起始地址
删除data_resource所在的一段,目的是让系统取消这一部分内存的roflash格式
{ name: "data_resource", /* resource.img */ size: 0x00900000, offset: 0x001A0000, roflash_read: cfi_intelext_read_roflash, l_x_b: ROFLASH_BLOCK, phys_addr: 0xffffffff, // not use for block cramfs mount },
(将 name: "rootfs", size: 0x019FF000, /* rootfs size is 24MB for P2 barbados board */ offset: 0x00601000,
为 name: "rootfs", size: 0x019FF000, /* rootfs size is 24MB for P2 barbados board */ offset: 0x00600000,
这样修改CG43生成的smg就不用再填开头4096字节的FF。)
3:修改mtd分区 \linux-2.4.17\drivers\mtd\maps\bulverde.c
这一段
将 },{ name: "USERFS_DB", size: 0x00600000, offset: 0x00AA0000, },{
修改为 },{ name: "USERFS_DB", size: 0x00F00000, offset: 0x001A0000, },{
目的是将上一步取消的CG34的内存部分合并到CG35里面
4:修改mtd读写地址 \linux-2.4.17\drivers\mtd\chips\cfi_cmdset_0001.c
这一段
将 },{ /* This partition contains "userfs_db"+"userfs_general" */ rw_start: 0x00AA0000, rw_end: 0x018A0000, },{
修改为
},{ /* This partition contains "userfs_db"+"userfs_general" */ rw_start: 0x001A0000, rw_end: 0x018A0000, },{
目的是修改mtd的读写起始地址,把合并的CG34部分也包括进去。
5:完成上面四小步,重复第一大部分的
make bzImage
得到的将是修改过内存分区的内核。
三:修改刷机包
1:将CG34的内容移到CG41或者CG43,修改CG43的/etc/init.d/mountfs.sh,取消CG34的挂载;
2:复制用SBFCodec.exe得到的CG35_0x00AA0000.smg出来,补齐FF使得新的CG35_0x00AA0000.smg的大小
为原来CG34+CG35的和。
3:将新的CG35_0x00AA0000.smg,替换旧的CG35_0x00AA0000.smg
4:复制用SBFCodec.exe得到的CG31_0x00060000.smg出来,
修改相应的各个smg的起始地址
如图:
十六进制23=十进制35,表示CG35;AA表示CG35原始的开始地址,FFFF0901表示CG35原始的结束地址。
根据第二大部分,删除CG34的描述部分,修改CG35的起始地址。(注意得到新的CG31_0x00060000.smg大
小要和原来的一样)
5:替换新的CG31_0x00060000.smg,替换第二大步得到的CG33_0x000A0000.smg,生成新的刷机包。
刷吧! 本帖最后由 catine_001 于 2008-7-6 11:47 编辑
|