insmod helloworld в init.rc перед монтированием файловых систем на Android

Я пытаюсь изменить файл init.rc на устройстве Nexus 7, которое имеет root-права. Я хочу внедрить простой модуль hello world до монтирования моего раздела /userdata/. Что я пробовал:

  1. Извлек boot.img из устройства, извлек RAM-диск, внес изменения в init.rc (которые не работают), воссоздал boot.img (используя инструмент mkbootimg), а затем снова прошил его на устройстве.

  2. Я поместил свой hello.ko, скомпилированный для ядра, в 2 места: одно — это текущий каталог, в котором находится init.rc, так что я могу сделать что-то вроде insmod hello.ko, и он его найдет. Во-вторых, я создал каталог /lib/modules/ и поместил его в этот

  3. В моем init.rc я поместил insmod /lib/modules/hello.ko сразу после on_boot. Я также изменил init.flo.rc и поместил insmod до и после ./mount_all, который монтирует файловую систему. Однако я вообще не вижу загрузки моего модуля. Набор разрешений был 0644 (я тоже пытался с 0777)

  4. Я создал init.d внутри /etc/folder и поместил loadmodule.sh, который выполняет insmod /lib/modules/hello.ko, и этот модуль загружается, но после завершения процесса загрузки.

В идеале я хочу сделать это прямо перед монтированием раздела /userdata/.

Может кто-то помочь мне с этим?

Мое устройство — Nexus 7, с flo_kernel и рутом, установлен busybox и т. д.


person Tejas Chopra    schedule 16.05.2014    source источник


Ответы (1)


Корневая файловая система на устройстве Android доступна «только для чтения», поскольку вы не можете повесить какие-либо файлы из корневого дерева и ожидать, что оно останется. Это та же самая причина, по которой вам нужно было извлечь виртуальный диск и переупаковать его содержимое, чтобы сохранить изменения в init.rc; любые файлы, которые вы хотите также разместить на /, также должны быть упакованы на виртуальный диск. Android извлекает root-права с виртуального диска при каждой загрузке.

Более обычным местом для этого файла будет системный раздел, скажем, в /system/lib.

person devunwired    schedule 16.05.2014
comment
Ok. Я внес изменения в init.rc и пытаюсь вставить hello.ko из каталога /system/lib. Проблема в том, что я вижу загрузку модуля, но после того, как файловая система была смонтирована. Несмотря на то, что insmod находится на строке выше mount_all. Но я продолжу попытки :-). Во-вторых, давайте предположим, что я делаю что-то подобное для recovery.img, т.е. я модифицирую скрипт init.rc, перепаковываю и прошиваю рекавери, перезагружаю систему, я не вижу загруженный модуль в моем журнале восстановления (даже mkdir не проходит) . Я что-то пропустил? Нужно ли мне модифицировать /sbin/recovery/ и если да, то есть ли способ это сделать? Спасибо - person Tejas Chopra; 16.05.2014