Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

Классификация файлов

В папке /system/bin (или просто /bin) содержатся исполняемые файлы, которые обеспечивают функционирование системы и приложений. Общее количество таких файлов (включая симлинки), которые можно увидеть в выводе команды ls, примерно 450. В представленном здесь справочнике по системным файлам сделана попытка их систематизации и классификации, а также выявления назначения и функций каждого отдельно взятого файла.

В папке содержатся файлы двух типов:

  • бинарные исполняемые elf-файлы
  • текстовые файлы bash-скриптов
  • симлинки на другие файлы

Исполняемые бинарные файлы по функциональному назначению делятся на:

  • консольные утилиты командной строки (многие как симлинки на toybox)
  • исполняемые elf-файлы служб или демонов

Текстовые файлы bash-скриптов можно условно разделить на:

  • самостоятельные bash-скрипты, выполняющие несколько консольных команд оболочки
  • скрипты, запускающие службы (командой cmd)
  • скрипты, запускающие Java-приложения Android (командой exec app_process)

Bash-cкрипты обычно имеют достаточно простую структуру и минимум (или полное отсутствие) параметров запуска (options). Имена некоторых файлов скриптов содержат расширение .sh, в других оно отсутствует.

Скрипты запуска JAVA-приложений (.jar) обычно имеют большое количество параметров (options) для передачи их приложению через вызов команды app_process.

Часть консольных команд, которые выполнить вызовом обращением к файлу на /system/bin, на самом деле являются симлинками на Toybox - командный файл с мультивызовами, который пришел на смену Busybox. При этом некоторые команды, хотя и включены в Toybox, в то же время представлены как самостоятельные файлы, т.е. продублированы. Кроме того, имеются консольные команды, которые выполняются только запуском своего файла, они отсутствуют в Toybox.

Таким образом, все файлы консольных команд можно разделить на три группы:

  1. симлинки на Toybox, т.е. не имеющие самостоятельных файлов командных утилит
  2. самостоятельные файлы утилит, без симлинка Toybox
  3. команды в виде самостоятельных файлов (без симлинка Toybox), но имеющие дубли в виде вызова Toybox с именем команды в качестве параметра.

При этом поведение команды 3-й группы и набор параметров в обоих вариантах её вызова могут отличаться.
Примером команды 3-й группы является консольная команда arping, которая имеет два варианта исполняемого файла и может быть вызвана двумя способами:

  • вызов утилиты arping
  • вызов toybox arping

    Практически все симлинки ведут на соответствующий файл в папке /bin (которая сама является симлинком на system/bin). Однако есть несколько симлинков на файлы в папке /apex:

    1. dalvikvm -> /apex/com.android.art/bin/dalvikvm
    2. dex2oat -> /apex/com.android.art/bin/dex2oat32
    3. linker -> /apex/com.android.runtime/bin/linker
    4. linker_asan -> /apex/com.android.runtime/bin/linker
    5. linkerconfig -> /apex/com.android.runtime/bin/linkerconfig


    Распределение файлов по категориям выглядит так:

    • Консольные команды - 348
    • Службы (в т.ч. скрипты) - 63
    • Bash-скрипты - 16
    • Cкрипты запуска Java-приложений - 17

    В соответствии с приведенной выше классификацией составлена база данных, интерфейс которой позволяет выбирать имя файла по алфавитному указателю с учетом принадлежности его к той или иной категории.

  • При выборе в меню конкретной категории файла отображается список, содержащий имя файла и его краткое функциональное назначение. Имя файла - ссылка на страницу с более подробной информацией.
  • При выборе в меню категории 'Все' в списке для каждого файла дополнительно показаны категория файла, а также признаки его самостоятельности (симлинк, Toybox).

    По каждому системному файлу приведена некоторая поясняющая информация:

  • функциональное назначение (иногда не очень точное или предположительное)
  • для консольных команд - вывод хелпа с параметрами, а также его перевода на русский
  • для служб - описание её действия
  • для sh-скриптов - полный текст скрита
  • для некоторых исполняемых файлов - исходный текст (на C или С++)
  • комментарии к отдельным файлам по результатам поиска (на Github, Android Developers, Android Googlesource и др.)

    Примечания.

  • 1. Для некоторых файлов не удалось найти однозначную и точную информацию о его функциях, поэтому приведеные о них сведения могут иметь предположительный или вероятностный характер.
  • 2. Исходные тексты для бинарных исполняемых файлов показаны исключительно для понимания алгоритма их работы. При этом точное соответствие исходного текста elf-файлу никак не гарантировано (могут быть разные версии, редакции и даже найденные ошибочно из-за случайно совпавших имен).


    Тестируемые платформы с Android 12

    В качестве тестовых платформ, на которой функционирует Android 12, использовались устройства на основе SoC Allwinner H618, а именно: одноплатный ПК (SBC)OrangePi Zero3 и ТВ-бокс (приставка) Tanix TX68, имеющие очень похожую архитектуру и достаточно совпадающую элементную базу, поэтому программно совместимые между собой.

    Вывод консольной команды ls для устройств:

  • Одноплатный ПК OrangePi Zero3

  • ТВ-бокс Tanix TX68

    Содержимое папки /bin для этих двух устройств практически идентично, разница только в нескольких файлах, конкретные отличия приведены ниже.

    В OpiZero3 добавленны файлы:

  • blink_all_gpio
  • gpiox
  • qw

    А также исключены файлы, имеющиеся в /bin Tanix:

  • busybox
  • lpadd
  • lpflash
  • lpmake
  • lpunpack

    Примечание. О бинарнике qw в Linux/Android пока не удалось найти какой-либо информации. Возможные версии :

  • quote word - аналог Perl-функции qw (список строк в кавычках)
  • quota - квота файловой системы
  • queue - очередь
  • query - запрос