我想修改安卓平板电脑的init.rc
文件。但是,在我修改后重新启动系统后,原始的init.rc
文件又回来了。
有什么方法可以使对init.rc
的更改持久化,而不需要重建系统(因为我没有系统的源代码)?或者有没有其他解决办法?
我想修改安卓平板电脑的init.rc
文件。但是,在我修改后重新启动系统后,原始的init.rc
文件又回来了。
有什么方法可以使对init.rc
的更改持久化,而不需要重建系统(因为我没有系统的源代码)?或者有没有其他解决办法?
mkdir /tmp/initrc cd /tmp/initrd
sudo mount /dev/sdb1 /mnt
sdb1
是存储 uramdisk/uInitrd
的分区。
dd bs=1 skip=64 if=/mnt/uInitrd of=initrd.gz
gunzip initrd.gz
在这一点上运行命令 file initrd
应该会显示:
mkdir fs
cd fs
cpio -id < ../initrd
修改 init.rc
文件。
使用以下命令打包 uramdisk:
find ./ | cpio -H newc -o > ../newinitrd
cd ..
gzip newinitrd
mkimage -A arm -O linux -C gzip -T ramdisk -n "My Android Ramdisk Image" -d newinitrd.gz uInitrd-new
当安卓系统启动时,uboot会将存储在启动分区中的一个名为'uRamdisk'的特殊压缩文件解压到RAM中,并定义这些文件组成系统的根目录。uRamdisk通常包含一些目录(如system、data、media等),用于挂载包含相应文件的分区,但也包含一些非常基本的文件,如init二进制文件和启动脚本(例如init.rc),这些文件对于您的系统至关重要。
当您编辑init.rc时,实际上是编辑了驻留在RAM中未打包的init.rc副本。因此,如果要进行真正的更改,则需要复制uRamdisk并将其解压,从其中编辑init.rc,重新打包uRamdisk,然后将新的uRamdisk替换/boot目录中的旧文件。
尝试查找“xuramdisk”和“mkuramdisk”脚本,这样可以使该过程变得非常简单。
您的根分区(/init.rc所在的位置)是一种RAM磁盘,每次设备启动时都会从initrd文件中解压缩并挂载。您所做的任何更改都只针对RAM磁盘,并将在下次重启时丢失。
如果您可以获取initrd文件,则可以将其挂载到Linux主机系统上,修改其中的文件,卸载它,然后将其写回Android设备。
initrd文件存在于设备上的自己的分区中。如果您可以找出它在哪个分区中,就可以从设备上抓取它到主机上,将其挂载,修改它,然后将其写回设备。这就是tripler在上面谈到的。
通常,修改boot.img仅由系统开发人员执行。如果您正在构建整个Android系统,则将可访问所需的源代码。我的工作流程如下:
# Modify init.rc
m -j8 bootimage_signed
adb reboot bootloader
fastboot flash boot $OUT/boot.img
fastboot reboot
我不知道你是否还在尝试着做这个,但是没有确切的设备信息,没有人能给出确切的答案。
尝试对所有内部分区进行dd镜像
,并使用一些如xda论坛上包含的android厨房脚本。您的恢复和引导分区都将具有Ram磁盘,但很可能您想要修改boot.img
中的init.rc
而不是恢复,除非您只希望在恢复模式下进行更改。
解压yaffs不适用于所有设备,并且大多数设备具有不同的分区布局,因此您必须弄清楚哪个是启动分区以及它是何种类型的文件系统。也许如果您提供设备规格,您可以得到更好的答案。
boot.img
的文件,可以通过以下方式提取(在已root的Android设备上运行,未经root测试):dd if=/dev/block/platform/<someplatform>/by-name/boot of=/sdcard/boot.img
然后将您的Android手机连接到电脑上,从中复制boot.img
文件。
脚本:
http://linuxclues.blogspot.ca/2012/11/split-bootimg-python-android.html
这是 tripler 指令的一个修改版,更容易查看(假定boot.img
在 tmp 中):cd /tmp
mkdir fs
# Now use the linked script above to split the boot.img file into ramdisk.gz and kernel
python split_boot_img.py -i boot.img -o parts
cd fs
gunzip -c ../parts/ramdisk.gz | cpio -id
# make changes to init.rc
在这种情况下,您将不得不在重新刷写之前重新构建boot.img
,这是与设备相关的。对此我无能为力,抱歉!
在构建Android平板文件系统之前,您必须编辑/更改init.rc
。这是首选的方法,始终可行。