Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1071546
  • 博文数量: 277
  • 博客积分: 8313
  • 博客等级: 中将
  • 技术积分: 2976
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 11:25
文章分类

全部博文(277)

文章存档

2013年(17)

2012年(66)

2011年(104)

2010年(90)

我的朋友

分类: LINUX

2011-06-23 14:17:54

有时候要修改Android的ramdisk.img,如果每次都将那些命令都敲一遍,那确实有点烦,那有没有快速简单的方法呢?有,就是将这些命令放在
一起,创建了一个简单的脚本:
这个脚本很简单,直接将脚本放到放有ramdisk.img的目录下,运行就行了,
运行时,输入1,会将ramdisk.img解压出来,输入2会将修改后的ramdisk重新打包成ramdisk.img。


root@o-2rl2:/home/percy# cat shell/ramdisk

#!/bin/bash
echo "Modify the ramdisk.img"
echo "1.Inflate the image"
echo "2.Create the image"

read -p "Choose:" CHOOSE
#case ${CHOOSE} in
#1)inflate();;
#2)create() ;;
#esac
if [ "1" = ${CHOOSE} ];then
echo "inflate()"
cp ramdisk.img ramdisk.cpio.gz
gzip -d ramdisk.cpio.gz
[ -e "tmp" ] ||{ echo "mkdir tmp"; mkdir tmp;}
cp ramdisk.cpio tmp/
cd tmp
cpio -i -F ramdisk.cpio
elif [ "2" = ${CHOOSE} ];then
echo "create()"
[ -e "tmp" ] && { cd tmp;cpio -i -t -F ../ramdisk.cpio | cpio -o -H newc -O ../ramdisk_new.cpio;echo "Create ramdisk_new.cpio finished ";}
fi


    解压、修改Android的ramdisk.img的手动方法:
    将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
    gunzip ramdisk.img.gz
  然后新建一个文件夹,叫ramdisk吧,进入,输入命令
    cpio -i -F ../ramdisk.img
    这下,你就能看见并操作ramdisk里面的内容了。
    根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像
    cpio -i -t -F ../ramdisk.img > list
    cpio -o -H newc -O lk.img < list 

    当前目录下生成的lk.img就是我们的新镜像了。




ramdisk.img在android中的使用
 ramdisk中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init,一些重要的配置文件等,总之它控制着整个android的启动.
 ramdisk的使用有两种方法:1,编译进内核;2,将ramdisk单独烧写
1,编译进内核
将 ramdisk解压,可以看到它里面有很多文件和目录, 如:data,dev,proc,sbin,sys,system,default.prop,init,init.rc等,有点像板子跑起来的根目录. 将解压出来的文件夹重命名为root,放到linux内核代码的根目录下,并用make menuconfig配置启动这个root文件夹,配置保存后会生成如下项:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="root"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
这些也可以直接在xxxx_defconfig改,然后make xxxx_defconfig使其生效.
这样做了以前,root将被编译进zImage,并随之一起烧进板子.
2,将ramdisk单独烧写
也 可以将ramdisk作为一个单独的包烧写,就烧在zImage的后面.假如zImage烧在0x600000,那么ramdisk就烧在 0x800000就好.值得注意的是,ramdisk在烧写之前要进行一次转换.因为bootloader在运行的时候,会将ramdisk从FLASH 加载到RAM中,它会把FLASH上0x800000-0x880000的空间作为ramdisk读取,并检查其最后四个字节,这四个字节保存的是 ramdisk.img的实际大小.所以我们要做的转换工作就是把原来的ramdisk.img(100多字节)转换成512字节,并在其最后四个字节写 ramdisk.img的实际长度.最后在bootloader中写程序把ramdisk加载到RAM.同时.config中的配置项只要:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""

阅读(2293) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~