web-dev-qa-db-ja.com

init.rcに永続的な変更を加えます

Androidパッドのinit.rcファイルを変更したいのですが、変更してシステムを再起動すると、元のinit.rcが返されます。

システムを再構築せずにinit.rcを永続的に変更するにはどうすればよいですか(システムのソースコードがないため)。または、回避する方法はありますか?

39
user1278251

ホスト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
13
tripler

このサイトを試してください: 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

10
John

多くのAndroidデバイスには、システムファイルへのルート変更を防ぐコードが含まれています。これを行う方法は、リカバリパーティションを使用することです。再起動時に、リカバリイメージを使用してシステムパーティションを復元しますシステムがそれを行っている場合、永続的な変更を行うことはできません-再起動後に実行するものをフックして、変更を再適用するのが最善です。おそらく、アプリまたはウィジェットを作成してから、スクリプトを起動して、データパーティションからsetuidルートスクリプトを使用して必要なmodを作成できます。独自のROMこの地域。

おそらく、リカバリイメージを取得し、それを解凍して、変更を加えてから再パックしてフラッシュすることができます。ただし、これを試す前にfastbootで回復できることを確認してください。

10
patthoyts

Androidシステムが起動すると、ubootは、 'uRamdisk'と呼ばれる特別な圧縮ボールのファイルをブートパーティションにRAMに展開し、それらのファイルをシステムのルートディレクトリを構成するように定義します。入っているファイルを含むパーティションのマウントポイントとして機能するディレクトリ(システム、データ、メディアなど)の束。ただし、initバイナリやinitのような起動スクリプトなど、システムに不可欠な非常に基本的なファイルもあります。 .rc。

init.rcを編集するとき、実際にはRAMにあるinit.rcのパッケージ化されていないコピーを編集しました。それを実際に変更するには、uRamdiskをコピーして展開し、そこからinit.rcを編集し、uRamdiskを再パッケージ化してから、/ boot内の新しいものを古いものに置き換える必要があります。

「xuramdisk」および「mkuramdisk」スクリプトを検索してみてください。これらにより、プロセスが非常に簡単になります。

9
enthdegree

ルートパーティション(/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
4
Edward Falk

あなたがまだこれをしようとしているのかどうかはわかりませんが、あなたの正確なデバイスを知らなければ、誰もあなたに正確な答えを与えることはできません。

dd imageすべての内部パーティションで、xdaフォーラムのAndroid kitchen。に含まれるようなスクリプトを使用します。リカバリパーティションとブートパーティションの両方にRAMディスクがありますが、init.rc の中に boot.imgリカバリモードではない変更のみが必要な場合を除き、リカバリではありません。

不慣れなことはすべてのデバイスに適用されるわけではなく、ほとんどのデバイスは異なるパーティションレイアウトを持っているので、どのブートで、どのタイプのfsであるかを把握する必要があります。デバイスの仕様を指定すれば、より良い答えが得られるかもしれません。

3
user1658800

このファイルを変更するよりも、起動時に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を一緒に再構築する必要があります。それであなたを助けることはできません、ごめんなさい!

0
user6754053