如何将ramdisk.img 编译进内核和修改init.rc
2015-03-28 01:08
441 查看
一 将ramdisk.img编译进内核
android系统可以不用ramdisk.img 文件就可以启动文件系统,原因是在android内核编译的时候使用配置选项已经将文件系统编译进内核。方法是在编译配置选项中打开File Systems->"The Extended 4 (ext4) filesystem", 如图:
![](http://blog.chinaunix.net/attachment/201303/7/24410388_1362633934T9MN.png)
我经过亲身实验,如果关掉ext4,打开ext3文件系统,那么在系统的时候不可以登录,无法进入rootfs,而且提示错误信息,如:
init: Unable to open persistent property directory /data/property errno: 2
init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
init: cannot find '/system/bin/vold', disabling 'vold'
init: cannot find '/system/bin/netd', disabling 'netd'
init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
isa bounce pool size: 16 pages
init: cannot find '/system/bin/rild', disabling 'ril-daemon'
init: cannot find '/system/bin/surfaceflinger', disabling 'surfaceflinger'
scsi 0:0:0:0: Direct-Access Generic Flash Disk 5.00 PQ: 0 ANSI: 2
init: cannot find '/system/bin/app_process', disabling 'zygote'
init: cannot find '/system/bin/drmserver', disabling 'drm'
而插入优盘等操作内核皆可以识别到,说明内核正常工作,但是无法登录文件系统。因而通过rootfs 找其他挂载的系统也会失败。
二 修改init.rc
如果android采用将ramdisk.img 编译进内核,那么修改init.rc就只能通过重新编译android内核的方式了。
方法:将android kernel top目录下/arch/arm/boot/ramdisk.img 文件拷贝到某目录下如tmpdir
1.解压ramdisk.img
进入tmpdir,将ramdisk.img修改为ramdisk.img.gz
#mv ramdisk.img ramdisk.img.gz
#gunzip ramdisk.img.gz
#mkdir ramdisk //创建ramdisk目录
#cd ramdisk //进入ramdisk目录
#cpio -i -F ../ramdisk.img //将ramdisk.img 解压到当前目录
这样可以修改init.rc 文件,修改后保存
2.打包ramdisk.img
#cpio -i -t -F ../ramdisk.img > list
#cpio -o -H newc -O ../new.img < list
#gzip new.img //生成new.img.gz
#mv new.img.gz ramdisk.img //改名为ramdisk.img
然后重新编译android kernel, 生成的boot.img二进制文件拷贝到原sdcard根目录下,更新boot.img后,再次启动系统,查看init.rc即是已经修改过的了。
另外需要注意:也可以用命令find . -print |cpio -o > ../new.img 或者 cpio -i -t -F ../ramdisk.img |cpio -o > ../new.img打包,但是使用这样打包之后更新的boot.img 系统启动之后挂掉了。
在用第一种方法打包时文件大小有636个blocks,但是用第二种方法打包的文件是633个blocks,还不知道这两种方式本质的区别。
android系统可以不用ramdisk.img 文件就可以启动文件系统,原因是在android内核编译的时候使用配置选项已经将文件系统编译进内核。方法是在编译配置选项中打开File Systems->"The Extended 4 (ext4) filesystem", 如图:
![](http://blog.chinaunix.net/attachment/201303/7/24410388_1362633934T9MN.png)
我经过亲身实验,如果关掉ext4,打开ext3文件系统,那么在系统的时候不可以登录,无法进入rootfs,而且提示错误信息,如:
init: Unable to open persistent property directory /data/property errno: 2
init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
init: cannot find '/system/bin/vold', disabling 'vold'
init: cannot find '/system/bin/netd', disabling 'netd'
init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
isa bounce pool size: 16 pages
init: cannot find '/system/bin/rild', disabling 'ril-daemon'
init: cannot find '/system/bin/surfaceflinger', disabling 'surfaceflinger'
scsi 0:0:0:0: Direct-Access Generic Flash Disk 5.00 PQ: 0 ANSI: 2
init: cannot find '/system/bin/app_process', disabling 'zygote'
init: cannot find '/system/bin/drmserver', disabling 'drm'
而插入优盘等操作内核皆可以识别到,说明内核正常工作,但是无法登录文件系统。因而通过rootfs 找其他挂载的系统也会失败。
二 修改init.rc
如果android采用将ramdisk.img 编译进内核,那么修改init.rc就只能通过重新编译android内核的方式了。
方法:将android kernel top目录下/arch/arm/boot/ramdisk.img 文件拷贝到某目录下如tmpdir
1.解压ramdisk.img
进入tmpdir,将ramdisk.img修改为ramdisk.img.gz
#mv ramdisk.img ramdisk.img.gz
#gunzip ramdisk.img.gz
#mkdir ramdisk //创建ramdisk目录
#cd ramdisk //进入ramdisk目录
#cpio -i -F ../ramdisk.img //将ramdisk.img 解压到当前目录
这样可以修改init.rc 文件,修改后保存
2.打包ramdisk.img
#cpio -i -t -F ../ramdisk.img > list
#cpio -o -H newc -O ../new.img < list
#gzip new.img //生成new.img.gz
#mv new.img.gz ramdisk.img //改名为ramdisk.img
然后重新编译android kernel, 生成的boot.img二进制文件拷贝到原sdcard根目录下,更新boot.img后,再次启动系统,查看init.rc即是已经修改过的了。
另外需要注意:也可以用命令find . -print |cpio -o > ../new.img 或者 cpio -i -t -F ../ramdisk.img |cpio -o > ../new.img打包,但是使用这样打包之后更新的boot.img 系统启动之后挂掉了。
在用第一种方法打包时文件大小有636个blocks,但是用第二种方法打包的文件是633个blocks,还不知道这两种方式本质的区别。
相关文章推荐
- 如何将ramdisk.img 编译进内核和修改init.rc
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/d
- Android 修改init.rc (related to ramdisk.img)
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- [转]android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/d
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- 如何把android 的init.rc文件制作成.img文件
- 解压RK3288的boot.img修改init.rc 添加开机自启动脚本
- 如何修改android模拟器里的 init.rc
- 如何将驱动编译进内核 修改Kconfig 和Makefile 文件
- 如何编译内核Linux
- 如何在系统运行过程中修改内核参数
- 如何编译一个内核 - Ubuntu方式(转)