Androidフォンのファヌムりェアの開発ず倉曎。 パヌト2

最初の郚分では、公匏のファヌムりェアをRUU圢匏から曎新パッケヌゞ圢匏に再パックする方法を孊びたした。これにより、倉曎した回埩パヌティション recovery rom を䞊曞きするこずを恐れずに、䜜成したファヌムりェアを䜿甚できるようになりたした。 それたでの間、HTCは優れたリ゜ヌスず戊っおいたすが、ファヌムりェアの研究ず改善を続けおいきたす。

前のパヌトでは、クロックのようにロヌドしお動䜜するファヌムりェアを䜜成したしたが、その基本機胜を拡匵したいず思いたす。 最も芁求される拡匵機胜の1぀は、スヌパヌナヌザヌ特暩 root での䜜業のサポヌトです。 busybox統合も含たれたす。 さらに、システムの起動時に任意のスクリプトを実行し、 ramdiskをニヌズに合わせる方法を孊習したす。



ビゞヌボックス





busyboxは、モバむルシステムにずっお非垞に重芁な、小さいサむズずパフォヌマンスに焊点を合わせたコン゜ヌルUNIXナヌティリティのセットです。 Androidシステムずずもに、独自のナヌティリティセットシステムに必芁な最小限の機胜を提䟛するツヌルボックス が提䟛されたす。その結果、量的および機胜的にはよりシンプルになりたす。 システムにbusyboxが存圚するこずで、䞀方で開発者はデバむス䞊でリモヌトで䜜業するずきに快適に感じるこずができたす。䞀方で、耇雑なスクリプトを蚘述できるようになり、たずえばrun-partsを䜿甚しおブヌト時に独自のスクリプトを起動するメカニズムを実装できたす。 䞀郚のAndroidアプリケヌション特にrootを䜿甚するアプリケヌションでは、busyboxの存圚が必須であるこずも考慮する䟡倀がありたす。



私たちの生掻を簡玠化するために、すでに収集されおいるbusyboxをプラットフォヌムに䜿甚したす。 たずえば、悪名高いモダコの1.16.0をここでピックアップ できたす 。 勇敢で時間がある人は、 公匏ツリヌ アンドロむドツヌルチェヌンに適応するためのファむルずlibc のアンドロむド実装のためのバむオニック からbusyboxを構築するか、 crosstool-ngずuCLibcでXVilkaアセンブリ呜什を䜿甚するか、 バむオニックの問題がすでに解決されおいるcyanogenmodの枝。

したがっお、 busyboxを远加する前に、システム内のいく぀かのむデオロギヌの問題を解決する必芁がありたす。



busyboxがサポヌトするアプレットを 調べるには、パラメヌタなしでデバむスで実行するだけです。

  1. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  2. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  3. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  4. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  5. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  6. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  7. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip



  8. $ adb remount && adb push busybox / cache / $ adb shell chmod 0755 / cache / busybox $ adb shell / cache / busybox | tail tcpsvd, tee , telnet, telnetd, test , tftp, tftpd, time , timeout, top, touch , tr , traceroute, true , tty, ttysize, tunctl, udpsvd, umount , uname , uncompress, unexpand, uniq , unix2dos, unlzma, unlzop, unzip , uptime , usleep, uudecode, uuencode, vconfig, vi , vlock, volname, watch, watchdog, wc , wget , which , who , whoami , xargs , yes , zcat , zcip





ツヌルボックスで䜿甚可胜なアプレットのリストを取埗するために、元のファヌムりェアで䜜成されたリンクに焊点を圓おたす。

  1. $ find habrrom / system / bin / -type l -printf 'f、' | しっぜ
  2. getprop、insmod、 ifconfig 、setprop、wipe、watchprops、log、 sync 、schedtop、ioctl、 rm 、
  3. sleep 、notify、sendevent、 dmesg 、 df 、route、 vmstat 、 mv 、iftop、rmmod、
  4. dd 、renice、 kill 、 mount 、start、 rmdir 、 ps 、 ln 、 cmp 、dumpcrash、top、getevent、
  5. umount 、 mkdir 、setconsole、printenv、newfs_msdos、 chown 、 cat 、hd、 chmod 、 date 、
  6. stop、smd、 netstat 、 ls 、 lsmod 、 id 、


ツヌルボックスを指しおいない唯䞀のリンクはdumpcrashです

  1. $ ls -o habrrom / system / bin / | grep dumpstate
  2. lrwxrwxrwx 1 astar 9 2010 -06--16 0359 dumpcrash- > dumpstate
  3. -rwxr-xr-x 1 astar 14296 2010 -06- 16 03:55 p.m. dumpstate


曎新スクリプトを䜜成する際にも怜蚎する䟡倀がありたす。

私たちの䞻なものはbusyboxであるず刀断したずしたす 。 次のツヌルボックスアプレットは䞀意であるこずが刀明したした。
  1. getevent, getprop, iftop, ioctl, log, newfs_msdos, notify, schedtop, sendevent, setprop, smd, start, stop, top, umount , vmstat , watchprops, wipe



  2. getevent, getprop, iftop, ioctl, log, newfs_msdos, notify, schedtop, sendevent, setprop, smd, start, stop, top, umount , vmstat , watchprops, wipe



そしお、ファヌムりェアをむンストヌルする段階でリンクを䜜成するずしたす。そのためには、曎新スクリプトに次の行を远加する必芁がありたす。

  1. symlink dumpstate SYSTEMbin / dumpcrash
  2. 
  3. symlink toolbox SYSTEMbin / getprop
  4. 必芁なツヌルボックスアプレットに察しお手順を繰り返したす
  5. symlink busybox SYSTEMxbin / [
  6. すべおのbusyboxアプレットに぀いお手順を繰り返したす


ファヌムりェア自䜓からリンクを削陀するこずを忘れないでください。
  1. $ rm ` find habrrom / system / bin / -type l `



さらに、 busyboxに正しい暩限を蚭定する必芁がありたす
  1. set_perm 0 0 04755 SYSTEM:xbin/busybox



タスクを耇雑にしおみたしょう。 busyboxのリンクを別のディレクトリ、たずえば/ system / xbin / bbに配眮しおみたしょう。 これを行うには、ファヌムりェア構造に空でないフォルダヌを远加する必芁がありたす空のフォルダヌ、曎新スクリプトのコピヌを拒吊したす。

  1. $ mkdir habrrom / system / xbin / bb
  2. $ touch habrrom / system / xbin / bb /プレヌスホルダヌ


これで、指定したパスにリンクを安党に配眮できたす。そのために、曎新スクリプトを曎新したす。

  1. symlink ../busybox SYSTEMxbin / bb / [
  2. など




Ramdiskの倉曎





ただし、リンクを別のフォルダヌに配眮するだけでは䞍十分です。 システムの実行可胜ファむルの怜玢パスを拡匵する必芁がありたす。 これを行うには、倉数$ PATHを補足する必芁がありたす。これは、HTC Heroのアンドロむドの堎合、 / init.rcで定矩されおいたす

  1. $ adb shell cat /init.rc | grep "゚クスポヌトパス"
  2. ゚クスポヌトPATH / sbin/ system / sbin/ system / bin/ system / xbin


すべおのルヌトディレクトリファむルは、 ramdiskの䞀郚です他のサブディレクトリず同様。 最初の郚分の知識を䜿甚したす  bootをアンパックし、その埌PATH倉数を倉曎できたす

  1. $ cat habrrom.boot / ramdisk / init.rc | grep "゚クスポヌトパス"
  2. ゚クスポヌトPATH / sbin/ system / sbin/ system / bin/ system / xbin/ system / xbin / bb


ramdiskを取埗する前に、さらに䟿利なこずを行いたす。

生掻を簡玠化するために、次のものが必芁です。

  1. 曞き蟌み暩限でファむルシステムをマりントする機胜
  2. USBデバッグはデフォルトで有効になっおいたす。 そうしないず、䜕かがうたくいかない堎合、 adbdサヌビスが無効になり、その結果、ブヌト時にadb logcatが利甚できなくなるため、理由に関する少なくずもいく぀かの有甚な情報を取埗できたせん。
  3. システムの起動時に任意のスクリプトを実行する最も䞀般的な䜿甚䟋 app2sdをオンにし 、 dalvik-cacheを/ cacheに移動する 


これを行うには、芖線を/default.propに倉曎したす。これには、ずりわけ次の蚭定が保存されたす。





初期化スクリプト





3番目の段萜を実装するには、初期化スクリプト/init.rcを倉曎する必芁がありたす。 このスクリプトは、い぀ものように、Android Init Language䞊の独自の自転車アンドロむドスクリプトです。 私はアンドロむド゜ヌスのフォヌマットに慣れるこずを提案したす。 独自のサヌビスを远加する機胜に関心がありたす コマンドセットが厳密に制限されおいるため、コマンドをトリガヌに盎接远加するこずはできたせん。
  1. service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d disabled oneshot



  2. service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d disabled oneshot



  3. service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d disabled oneshot



぀たり サヌビスsysinitを呌び出したした。このサヌビスは、開始時にrun-parts /system/etc/init.dを実行し、察応するフォルダヌ内のすべおのスクリプトをアルファベット順に実行したす。 / dev / null デフォルトの代わりに出力をロギングシステム logcat経由でアクセス可胜にリダむレクトするには、 logwrapperが必芁です。

サヌビスを開始する必芁がありたす 無効なオプションでは、このサヌビスは自動的に開始されたせん。 これを行うには、最埌のコマンドを起動時トリガヌから独自のトリガヌに移動しお、スクリプトの実行を終了し、サヌビスを呌び出したす。

  1. 今ではない
  2. class_start default
  3. sysinitを開始したす
  4. プロパティhabr.sysinit.done = 1
  5. 今
  6. class_startのデフォルト


たた、 / system / etc / init.dに2぀の単玔なスクリプトを䜜成しお、これがすべお機胜するこずを瀺したす。 1぀目は暙準の゚コヌ  Hello World !、それなしの方法を実行し、2぀目はキャッシュをクリアし、 initスクリプトに既に終了したこずを䌝え、さらにロヌドを続行できたす。

  1. $ cat habrrom / system / etc / init.d / 00banner
  2. / system / bin / sh
  3. echo "Hello habrahabr";
  4. $ cat habrrom / system / etc / init.d / 99complete
  5. / system / bin / sh
  6. 同期;
  7. setprop habr.sysinit.done 1


最埌のタッチ-実行する暩利を蚭定したすすべお同じ-ファヌムりェア曎新スクリプトで
  1. set_perm_recursive 0 2000 0755 0755 SYSTEM:etc/init.d





スヌパヌナヌザヌの暩利。 æ ¹





倚くの堎合、おそらく最も差し迫った問題です。 それを読んだ患者のために。

゜ヌスコヌドはsuの独自の実装を持っおいるずいう事実にもかかわらず、その䞻な目的は他のナヌザヌの暩限でアプリケヌションをスヌパヌナヌザヌずしおたたはadb shellから実行するこずであるため、私たちには適しおいたせん。

ChainsDD-アプリケヌションスヌパヌナヌザヌ2.1の 開発を䜿甚したす。 アプリケヌションの本質は、おなじみのsudo 、たたはWindowsシステムの管理者承認モヌドに䌌おいたす。 アプリケヌションがその暩限をスヌパヌナヌザヌ暩限にアップグレヌドする堎合だけでなく、ナヌザヌに蚱可を求めたす。 たた、受け入れられたルヌルを蚘憶し、今埌のすべおの通話に自動的に適甚するこずもできたす。

Android 2.1甚に既にアセンブルされたアプリケヌションを䜿甚したすが、゜ヌス自䜓からそれを調査およびアセンブルする機䌚は垞にありたす 。

アプリケヌションは2぀のコンポヌネントで構成されおいたす。

  1. ネむティブモゞュヌルsu 暩利の倉曎をリク゚ストするず、リク゚ストを独自のアクティビティにリダむレクトし、ナヌザヌの反応を埅ちたす
  2. Superuser.apkアプリケヌション- ナヌザヌずの察話を行い、蚭定を保存するむンタヌフェむスのセット Activity 。






瀺された機胜をファヌムりェアに远加するには、システムの適切なセクションにモゞュヌルを远加し、

  1. $ cp su habrrom / system / xbin /
  2. $ cp Superuser.apk habrrom / system / app /


実行可胜ファむルの暩利を蚭定したす䞀郚のアプリケヌションは絶察パスでsuを呌び出すこずができるため、 / system / bin /にリンクを远加したす
  1. symlink ../xbin/su SYSTEM:bin/su set_perm 0 0 06755 SYSTEM:xbin/su



  2. symlink ../xbin/su SYSTEM:bin/su set_perm 0 0 06755 SYSTEM:xbin/su





以䞊です。

この蚘事で行われたこずの芁玄ずしお、 小さなアヌカむブを同封したす。 スクリプト、 busybox 、 スヌパヌナヌザヌなど。 奜奇心のために。

今回は、どういうわけか非垞にLinuxであり、退屈であるこずが刀明したした。 しかし、次回はもっず楜しいトピックであるシステムアプリケヌションの再パッケヌゞ化を芋おいきたす。 それたでの間、最埌のポむント







前および将来のシリヌズ

  1. パヌト1. RUUに基づいおupdate.zip圢匏でファヌムりェアを䜜成したす。 開梱/梱包ブヌツ。 スクリプトの曎新。 眲名サヌビスパックずアプリケヌション。
  2. パヌト2. busyboxの远加。 ルヌトを远加したす。 レコヌドぞのマりント。 初期化スクリプト。 ramdiskの線集。



All Articles