Ueventd android что это

Русские Блоги

[Передача] Android анализ процесса инициализации Ueventd

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

Процесс запуска ueventd

system / core / init / Android.mk видит, что ueventd — это просто ссылка на init

Затем вызовите ueventd_main в system / core / init / init.c в соответствии с именем запуска

Общий код ueventd относительно прост, в основном из трех частей:

  • Разбор ueventd.rc
  • Инициализация информации об устройстве
  • Петля опроса случайное сообщение

Функция ueventd_main и связанные функции

Обработка и разбор ueventd.rc

Эта часть очень проста по сравнению с init.rc, ничего особенного. Главным образом через файл rc для управления разрешениями узла каталога. Такие как:

Детали не должны быть расширены, вы можете в основном понять.
Инициализация устройства
При загрузке устройства ядро ​​отправляет события uevent в пространство пользователя через сокет. В init, получив эти события uevent, создается узел устройства. Основная функция — device_init ()

Функция инициализации — device_init

uevent_open_socket();
Это сокет для открытия события. Событие здесь состоит в том, чтобы использовать событие ядра в netlink для уведомления функции пользовательского режима (NETLINK_KOBJECT_UEVENT), которая является очень хорошим способом для ядра и пользовательского режима для выполнения двунаправленной передачи данных.В дополнение к eventd, netd и vold также используют uevent.
В функции инициализации обратите внимание на функцию «холодной загрузки», которая буквально означает «холодный запуск», функция которой заключается в повторном использовании драйверов, добавленных до запуска uventd. Позвольте им снова отправить сообщение о событии, и номер верхнего уровня обрабатывается целевым образом.
Здесь он перебирает устройства в / sys / class, / sys / block и / sys / devices:

write (fd, «add \ n», 4) активирует ядро, повторно отправляет событие события add handle_device_fd (), отвечает на сообщение о событии и обрабатывает его.

обработка сообщений

После того, как инициализация завершена, программе-демону нужно только опросить новое событие события.По прибытии опроса она вызывает handle_device_fd (); чтобы обработать ее, вы можете посмотреть на эту функцию:

Функция состоит в том, чтобы получить сообщение о событии, отправленное ядром, и затем проанализировать это сообщение, чтобы обработать соответствующее событие сообщения.

Основная функция handle_device_event заключается в создании / удалении узлов устройства на основе отправленного события и обновлении некоторых разрешений узла настройками разрешений, описанными в ueventd.rc.

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

Источник

Русские Блоги

Маленькие знания Android — процесс запуска системы в глубине глубокой поддержки Android (ON)

Процесс запуска процесса init

Обзор процесса init.

Система Android основана на Linux, процесс INIT — первый процесс пользовательского пространства в системе Android, номер процесса 1, код исходного кода INIT находится в каталоге System / Core / init. Поскольку процесс init — первый процесс пользовательского пространства системы Android, он в основном отвечает за следующие две вещи:

Читайте также:  Журнал уведомлений андроид самсунг

Анализируйте конфигурацию init.rc, затем запустить различные собственные процессы системы, такие как Zygote Processing, ProuscingFlesser процессы и медиа-процессы.

Инициализируйте и начать атрибуты службы.

Функция ввода процесса init

Функция ввода INIT является основной, код следующим образом:

Примечание 1 Судействуя текущий процесс — UEVENTD. Процесс init создает подраздел UEVENTD и довериет работу созданного файла узла устройства в UEVENTD. UEVENTD в основном отвечает за создание узлов оборудования, а также настроек власти. Служба дополнительно обрабатывается с помощью UVENT для мониторинга отправленного сообщения.

UEVENTD создает файл узла устройства двумя способами.

«Холодная пробка» основана на предварительно определенном устройстве информации, а затем создает файлы узлов устройства при запуске UEVENTD. Этот тип файла узла устройств также известен как файлы статического узла.

«Горячая пробка», то есть в запуске системы, когда устройство вставлено в порт USB, UEVENTD получит это событие для динамически создания файлов узлов устройств для вставленного устройства. Этот тип узла узла оборудования также известен как файлы динамических узлов.

Примечание 2 Судействуя текущий процесс — WatchDogd. Система Android сталкивается с различным оборудованием и программным обеспечением под длительным прогоном. Чтобы решить эту проблему, Android разработал класс Watchdog в качестве программного обеспечения для наблюдения за темами в Systemserver. После того, как проблема, Watchdog убьет процесс системного двигателя. После родительского процесса Systemserver Zygote получает смерть сигнала системы Systemserver, он убьет себя. После того, как зиготе процесс умирает, процесс INIT убьет все дочерние процессы в процессе Zygote и перезапустить Zygote.

Примечание 3 Определите, следует ли перезагрузить, если он перезагружается, если оно срочно, установите соответствующий процессор сообщений.

Примечание 1 Добавить переменные среды. Примечание 2 Получение этого запуска — это первая фаза запуска системы, если это первая фаза, введите следующее, если оператор, создайте и смонтируйте соответствующую файловую систему.

Пять типов файловых систем, созданных и установленных выше, показаны ниже:

TMPFS: виртуальная файловая система памяти, которая хранит все файлы в виртуальной памяти, если вы удалите файловую систему TMPFS, то все содержимое ниже не будет существовать. TMPFS может использовать RAM или использовать раздел Exchange, который изменит размер на основе ваших действительных потребностей. Скорость TMPFS очень удивительна, ведь она находится в оперативной памяти, то есть производительность все еще очень отлично. Поскольку TMPF проживает в оперативной памяти, его содержание не будет продолжаться. После выключения питания содержание TMPF исчезло, что также является корневой причиной TMPFS.

Devpts: предоставляет стандартный интерфейс для Pseudo Terminal, а его стандартный крючок является / dev / pts. Пока открывается первичное составное устройство / dev / ptmx of pty, в / dev / pts создается новый файл устройства pty.

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

Читайте также:  Как отключить подписку андроид яндекс плюс

SYSFS: аналогично файловой системе ProC, это также виртуальная файловая система, которая не учитывает какое-либо дисковое пространство. Обычно он скрыт в каталоге / SYS. Файловая система SYSFS представлена ​​ядром Linux2.6, которое пересекает устройство и организацию шины, подключенную к системе в иерархический файл, так что они могут получить доступ в пространстве пользователя.

SELinuxFS: Используется для поддержки файловой системы SELinux, SELinux предоставляет набор правил для записи файлов политики безопасности, который называется языком политики SELINUX.

ПРИМЕЧАНИЕ 1. Инициализация Framework Framework AVB (Android Verified Boot), AVB в основном используется для предотвращения вмешательства системных файлов, а также содержать функции, которые предотвращают обратную связь системы, чтобы избежать использования систем отката и использование предыдущих уязвимостей. ПРИМЕЧАНИЕ 2. SELINUX_INITIALIZE Запускает SELinux.

Примечание 1 Инициализируйте службу недвижимости через функцию Property_Init, Примечание 3 Запустите службу свойств через функцию Start_Property_Service. Примечание 2 Функции обработки сигналов сигнала_handler_init Установка подпрограмма, когда процесс дочернего процесса ненормально выходит, процесс INIT будет схватить информацию о исключительной информации. После того, как она будет зафиксировать эту информацию об исключении, будет вызываться соответствующая настройка функции захвата. Например, детский процесс процесса init Process Zygote, процесс INIT отражает эти исключительные данные, вызовут функцию DILL_Signal () для перезапуска процесса Zygote.

ПРИМЕЧАНИЕ 1. Анализ профиля INIT.RC и выполните команды, соответствующие подпрограмму в примечании 2, то есть команда, настроенная в файле init.rc. Перезапустите мертвое обслуживание на примечаниях 3.

Анализ init.rc.

Язык, используемый в init.rc, называется языком Android INITAL, переведен — это «язык инициализации Android», язык INITAL имеет пять типов выражений соответственно соответственно:

Действие: действие содержит серию команды.

Команда: команда в языке init.

Сервис: сервис, созданный процессом init.

Опция: Параметры конфигурации для сервисов.

Импорт: представляя другие профили.

Синтаксис действия действия заключается в следующем:

Trigger здесь — это триггер, выполненный действием. Когда условие запуска выполняется, команда будет выполнена. Trigger имеет следующие две категории:

Trigger события: срабатывает при возникновении указанного события. Мероприятие может быть выпущено командой «Trigger», или процесс INIT выдан функцией QueueeVenttrigger ().

Свойство триггер: срабатывает, когда указанное свойство удовлетворяет значение.

Команда в действии — это команда определения языка INIT, все поддерживаемые команды следующие:

команда Формат параметра Описание
bootchart_init Начать bootchart.
chmod octal-mode path Изменить доступ к файлам
chown owner group path Изменить владелец файла и группы
class_start serviceclass Запустите службу указанной категории
class_stop serviceclass Остановить и «отключить», чтобы указать услугу категории
class_reset serviceclass Остановите службу указанной категории, но не «отключить»
copy src dst Копировать файл
domainname name Установите доменное имя
enable servicename Включите службу отключенным
exec [seclabel[user[group]]] — command [argument]* Детский процесс для выполнения указанной команды
export name value Переменная экспорта среды
hostname name Установите имя хоста
ifup iterface Сетевая карта онлайн
insmod path Установите модуль указанного пути
load_all_props Нагрузка атрибутов из / System, / Vendor и другие пути
load_persist_props Загрузка постоянных атрибутов
loglevel level Установите уровень журнала ядра
mkdir path[mode][owner][group] Создать каталог
mount_all fstab[path]*[—option] Установите файловую систему и импортировать указанный файл .rc
mount typedevicedir[flag]*[options] Установите файловую систему
powerctl Внутренняя реализация
restart service Перезапустить сервис
restorecon path[path]* Установка контекста безопасности файла
restorecon_recursive path[path]* Рекурсивная версия Restorecon
rm path Unlink (2) для указанного пути
rmdir path Удалить папку
setprop namevalue Установите значение атрибута
setrlimit resourcecurmax Rlimit для указанных ресурсов
start service Начать сервис
stop service Вне услуги
swapon_all fstab Компас fs_mgr_swapon_all в указанном файле
symlink targetpath Создать цепочку
sysclktz mins_west_of_gmt Уточните системное тестовое тело
trigger event Вызвать событие
umount path UMMount указанная файловая система
verity_load_state Внутренняя реализация
verity_update_state mount_point Внутренняя реализация
wait path[timeout] Ожидание файла до таймаута, если вы существуете, вернитесь напрямую
write pathcontent Написать содержимое в указанный файл

Сервис — это исполняемый файл, который начался процесс INIT, синтаксис экспрессии сервиса выглядит следующим образом:

Вариант — это модификация службы, которая влияет на процесс инициализации и при запуске службы. Все поддерживаемые варианты отображаются в:

Option Формат параметра Описание
critical Логотип — это критическая система системы, которая заставит систему перезапустить в режим восстановления, если вы выходите несколько раз.
disabled Не сможет выразить звезду, поскольку категория автоматически начинается
setenv name value Установите переменные среды для процесса запуска
socket nametypeperm[user[group[seclabel]]] Создать сокет домена Unix
user username Переключите пользователь перед выполнением сервиса
group groupname[groupname]* Изменить группу перед выполнением службы
seclabel seclabel Переключайте SecLabel перед выполнением службы
oneshot Одноразовый сервис, не перезапустите после смерти
class name Укажите категорию службы
onrestart Выполните команду, когда служба перезапускается
writepid file. PID, написанный в детский процесс к указанному файлу

Импорт — это ключевое слово вместо команды, вы можете загрузить другие файлы .rc через это ключевое слово в файле .rc, его синтаксис выглядит следующим образом:

Путь может быть еще одним файлом .rc или папка. Если это папка, все файлы под этой папкой импортируются, но не зацикливается файлы в подкаталоге.

Начать зиготе

INIT.RC Файл имеет следующий код конфигурации:

В начале файла INIT.RC используйте оператор типа импорта для введения сценариев загрузки ZyGote, где RO.Zygote представляет разные файлы в соответствии с разным контентом, начиная с Android 5.0, Android начинает поддерживать 64-битные программы, Zygote имеет 32 Биты и 64-битные, как показано ниже:

Код для init.zygote64.rc выглядит следующим образом:

Служба используется для уведомления процесса init для создания процесса под названием Zygote. Этот процесс выполняет путь к / System / bin / app_process64. Следующий код проходит параметр, передаваемый в App_Process64, а класс главным образом относится к классному значению Отказ Добавьте объект сервиса в список сервисов при расстановке оператора типа службы.

Вернитесь и посмотрите профиль init.rc:

CLASS_START — это команда, соответствующая функция do_class_start, используемая для начала класса для службы, который является предыдущим ZyGote, поэтому основной Main Class_Start используется для запуска Zygote, функция do_class_start определяется в spotins.cpp, код как следует:

Функция FOREACHSERVICEINCLASS будет проходить список Service Lin, найдите ClassName Zygote и выполните функцию startifnobabled, код следующим образом:

Если сервис не устанавливает опцию отключенной опции в соответствующем RC-файле, вызывается функция запуска, и функция запуска выглядит следующим образом:

Источник

Читайте также:  Связать свой аккаунт гугл с андроидом
Оцените статью