http://bbs.gfan.com/android-5408130-1-1.html

有人问我,我简单的写一下,来源XDA,运行环境ubuntu 10.4。
ubuntu安装很简单,在windows下安装一个虚拟机vmware或者VirtualBox,网上都有下载,建立一个虚拟机载入ubuntu安装盘镜像就可以了,全中文无难度。
http://www.ubuntu.com.cn/download/(我下载的32位12.04.1,用的内存卡安装,使用imgewriter ImageWriter.zip (19.66 KB) (先将ubuntu.iso改为ubuntu.raw,就是改后缀,然后点击copy)写入内存卡,安装的win7+ubuntu双系统)
下载ext4_utils源码包编译。
ext4_utils.tar (200 KB)
这是我编译好的: make_ext4fs.tar (80 KB)

  • ~/work$ cd ext4_utils
  • ~/work/ext4_utils$ make clean
  • rm -rf *.o make_ext4fs simg2img
  • ~/work/ext4_utils$ make
  • gcc -I. -DANDROID -c make_ext4fs.c
  • gcc -I. -DANDROID -c make_ext4fs_main.c
  • gcc -I. -DANDROID -c ext4_utils.c
  • gcc -I. -DANDROID -c allocate.c
  • gcc -I. -DANDROID -c backed_block.c
  • gcc -I. -DANDROID -c output_file.c
  • gcc -I. -DANDROID -c contents.c
  • contents.c: In function ‘make_directory’:
  • contents.c:118: warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 4 has type ‘u32’
  • gcc -I. -DANDROID -c extent.c
  • gcc -I. -DANDROID -c indirect.c
  • gcc -I. -DANDROID -c uuid.c
  • gcc -I. -DANDROID -c sha1.c
  • gcc -I. -DANDROID -c sparse_crc32.c
  • gcc make_ext4fs.o make_ext4fs_main.o ext4_utils.o allocate.o backed_block.o output_file.o contents.o extent.o indirect.o uuid.o sha1.o sparse_crc32.o -o make_ext4fs -lz
  • gcc -I. -DANDROID -c simg2img.c
  • gcc simg2img.o sparse_crc32.o -o simg2img
  • ~/work/ext4_utils$

如果有错误/usr/bin/ld: cannot find -lz
就需要安装zlib库,运行:
sudo apt-get install zlib1g-dev
上面这些指令可以不用做,直接用小路编译的ext4_utils就行,在主文件夹下新建文件夹重命名为work(名字随便,最好英文),将ext4_utils解压进work文件夹

把得到的make_ext4fs simg2img 和mkuserimg.sh放在你的工作目录下(就是work/ext4_utils文件夹,不过我是直接将这三个文件及ext4_utils文件夹里的全部内容直接放在了work文件夹根目录,因为开始所有文件放在work/ext4_utils文件夹时候,执行ls命令的时候什么东西都没出现),把固件包里解压出来的factoryfs.img拷贝到工作目录。

运行 simg2img factoryfs.img ZNKG5.img 得到512m的 ZNKG5.img,然后就可以挂载了(运行之前将simg2img的权限改为读写,否则运行不了)。

  • ~/work$ ./simg2img factoryfs.img ZNKG5.img
  • ~/work$ mkdir ZNKG5
  • ~/work$ sudo mount -o loop ZNKG5.img ZNKG5



这样你就可以对固件做修改了,可以root固件,可以精简固件,这里主要提一下权限问题,不要轻易修改这个目录的权限,要保持默认的权限,不然你打包回去会有问题的,这里我举个例子,我准备把su这个文件加到固件的bin目录下,并且修改权限。

  • ~/work/ZNKG5/bin$ sudo cp ~/work/su ./
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwxr-xr-x 1 root root 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$ sudo chown root.2000 su
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwxr-xr-x 1 root 2000 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$ sudo chmod 06755 su
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwsr-sr-x 1 root 2000 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$


打包很简单。
我是这么做的,避免无权限的问题。

  • sudo ./make_ext4fs -l 512M -s -a system ZNKG5-new.img ./ZNKG5
  • Creating filesystem with parameters:
  •     Size: 536870912
  •     Block size: 4096
  •     Blocks per group: 32768
  •     Inodes per group: 8192
  •     Inode size: 256
  •     Journal blocks: 2048
  •     Label:
  •     Blocks: 131072
  •     Block groups: 4
  •     Reserved block group size: 31
  • Created filesystem with 1224/32768 inodes and 125043/131072 blocks

我来解释下这个命令的参数:"
-l 512M"是分区大小,i9100的system分区是512M;
-s就是生成ext4的S模式制作;
"-a system",是指这个img用于android系统,挂载点是/system,使用这个参数,make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限,如果你刷机以后发现有文件权限不对,可以手工修改android_filesystem_config.h来添加权限,重新编译make_ext4fs,也可以不使用 “-a system”参数,这样就会使用文件的默认权限。

得到的ZNKG5-new.img 就可以改名成factoryfs.img打包成tar刷机了。

  • move ZNKG5-new.img factoryfs.img
  • tar -cvf pda.tar factoryfs.img

如有错漏请指教,谢谢。

如何做rom,体验做rom过程,附图文教程,感谢各位romer的更多相关文章

  1. 小米2S Mk6.0.1 [只能做测试体验,不能使用]

    上几张高清图片.. 说明: 此版本只能做测试体验,不能做实际使用. 开发者: laser杨万荣 感谢: 秋叶随风ivan, m1cha 及 MoKee Open Source的各位开发者 下载地址:链 ...

  2. 引用 RAM和ROM和Flash ROM的区别

    用 饿狼 的 RAM和ROM和Flash ROM的区别 RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的.它在任何时候都可以读 ...

  3. 游戏引擎网络开发者的 64 做与不做 | Part 1 | 客户端方面

    摘要:纵观过去 10 年的游戏领域,单机向网络发展已成为一个非常大的趋势.然而,为游戏添加网络支持的过程中往往存在着大量挑战,这里将为大家揭示游戏引擎网络开发者的 64 个做与不做. [编者按]时下, ...

  4. 游戏引擎网络开发者的64做与不做(二A):协议与API

    [编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...

  5. 产品相关 做产品VS做项目

    做产品VS做项目 by:授客 QQ:1033553122 相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关 ...

  6. 子查询 做where条件 做 from的临时表 ,做select的一个字段 等

    子查询 做where条件 做 from的临时表 ,做select的一个字段 等

  7. hadoop入门篇-hadoop下载安装教程(附图文步骤)

    在前几篇的文章中分别就虚拟系统安装.LINUX系统安装以及hadoop运行服务器的设置等内容写了详细的操作教程,本篇分享的是hadoop的下载安装步骤. 在此之前有必要做一个简单的说明:分享的所有内容 ...

  8. C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!

    原文:C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!! 一般我们在开发Winodws Phone APP 的时候往 ...

  9. 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)

    不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...

随机推荐

  1. action(二)

    RemoveSelf :消失 CCFiniteTimeAction* action = CCSequence::create( CCMoveBy::create( , ccp(,)), CCRotat ...

  2. SAP ECC6安装系列四:安装过程详解

    原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 续接上篇,我们终于按下了 “Next” ...

  3. 关于Context

    Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄.很多方法需要通过 C ...

  4. FreeRtos——单任务

    原创(当然借鉴了官网资料^_^): 在之前的移植工作准备好之后,我们需要调用freertos提供给我们的API函数实现操作系统地运行.首先,第一个函数: 任务函数任务是由 C 语言函数实现的.唯一特别 ...

  5. Android——区别DVM与JVM (2)

    区别DVM与JVM 1.首要差别 Dalvik: 基于寄存器,编译和运行都会更快些 JVM: 基于栈, 编译和运行都会慢些 2.字节码的区别 Dalvik: 执行.dex格式的字节码,是对.class ...

  6. supervisor配置详解

    原文:http://lixcto.blog.51cto.com/4834175/1539136 有阵子没写博客了,这段时间一直在研究python django框架和前端相关的东西.楼主学通信的,对we ...

  7. Easyui 编辑表格行删除

    1.问题描述 easyui 编辑表格新增一条数据后,删除最后一行删除不了,原因是没有提交数据acceptChanges. 源码中deleteRow方法,根据坐标获取行html,方法为opts.find ...

  8. 使用asp.net调用谷歌地图api

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  9. Hive三种不同的数据导出的方式

    转自:http://blog.chinaunix.net/uid-27177626-id-4653808.html Hive三种不同的数据导出的方式,根据导出的地方不一样,将这些方法分为三类:(1)导 ...

  10. 如何过滤php中危险的HTML代码

    用php过滤html里可能被利用来引入外部危险内容的代码.有些时候,需要让用户提交html内容,以便丰富用户发布的信息,当然,有些可能造成显示页面布局混乱的代码也在过滤范围内. 以下是引用片段: #用 ...