Androidパッドのinit.rc
ファイルを変更したいのですが、変更してシステムを再起動すると、元のinit.rc
が返されます。
システムを再構築せずにinit.rc
を永続的に変更するにはどうすればよいですか(システムのソースコードがないため)。または、回避する方法はありますか?
ホストPCで次のコマンドを使用してuramdiskを解凍します(Linux)
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
このサイトを試してください: http://bootloader.wikidot.com/linux:boot:Android 下部のセクションをお読みください:•Android boot image:boot。 img◦ブートイメージの展開、再パック: http://Android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Background
多くのAndroidデバイスには、システムファイルへのルート変更を防ぐコードが含まれています。これを行う方法は、リカバリパーティションを使用することです。再起動時に、リカバリイメージを使用してシステムパーティションを復元しますシステムがそれを行っている場合、永続的な変更を行うことはできません-再起動後に実行するものをフックして、変更を再適用するのが最善です。おそらく、アプリまたはウィジェットを作成してから、スクリプトを起動して、データパーティションからsetuidルートスクリプトを使用して必要なmodを作成できます。独自のROMこの地域。
おそらく、リカバリイメージを取得し、それを解凍して、変更を加えてから再パックしてフラッシュすることができます。ただし、これを試す前にfastbootで回復できることを確認してください。
Androidシステムが起動すると、ubootは、 'uRamdisk'と呼ばれる特別な圧縮ボールのファイルをブートパーティションにRAMに展開し、それらのファイルをシステムのルートディレクトリを構成するように定義します。入っているファイルを含むパーティションのマウントポイントとして機能するディレクトリ(システム、データ、メディアなど)の束。ただし、initバイナリやinitのような起動スクリプトなど、システムに不可欠な非常に基本的なファイルもあります。 .rc。
init.rcを編集するとき、実際にはRAMにあるinit.rcのパッケージ化されていないコピーを編集しました。それを実際に変更するには、uRamdiskをコピーして展開し、そこからinit.rcを編集し、uRamdiskを再パッケージ化してから、/ boot内の新しいものを古いものに置き換える必要があります。
「xuramdisk」および「mkuramdisk」スクリプトを検索してみてください。これらにより、プロセスが非常に簡単になります。
ルートパーティション(/init.rcが存在する場所)は、initrdファイルから解凍され、デバイスが起動するたびにマウントされるramdiskです。変更はRAMディスクのみに適用され、次回の再起動時に失われます。
Initrdファイルを取得できる場合は、Linuxホストシステムにファイルをマウントし、そこでファイルを変更してアンマウントし、Androidに書き戻すことができます。
Initrdファイルは、デバイス上の独自のパーティションに存在します。どのパーティションかを把握できる場合は、デバイスからホストに取り込み、マウントし、変更し、デバイスに書き戻すことができます。これが、トリプラーが上で話していたことです。
一般に、boot.imgの変更はシステム開発者のみが行うことです。 Androidシステム全体を構築している場合、必要なソースコードにアクセスできます。このワークフローは次のようになります。
# Modify init.rc
m -j8 bootimage_signed
adb reboot bootloader
fastboot flash boot $OUT/boot.img
fastboot reboot
あなたがまだこれをしようとしているのかどうかはわかりませんが、あなたの正確なデバイスを知らなければ、誰もあなたに正確な答えを与えることはできません。
dd image
すべての内部パーティションで、xdaフォーラムのAndroid kitchen。に含まれるようなスクリプトを使用します。リカバリパーティションとブートパーティションの両方にRAMディスクがありますが、init.rc
の中に boot.img
リカバリモードではない変更のみが必要な場合を除き、リカバリではありません。
不慣れなことはすべてのデバイスに適用されるわけではなく、ほとんどのデバイスは異なるパーティションレイアウトを持っているので、どのブートで、どのタイプのfsであるかを把握する必要があります。デバイスの仕様を指定すれば、より良い答えが得られるかもしれません。
このファイルを変更するよりも、起動時にScripterなどのアプリを使用してスクリプトを実行する方が簡単な場合があることに注意してください。
上記の@triplerの指示に従う前に、boot.img
と呼ばれるファイルが必要です。このファイルは(rooted Android device、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
修正された、見やすいバージョンのトリプラーの命令を次に示します(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
を一緒に再構築する必要があります。それであなたを助けることはできません、ごめんなさい!