Как отложить размонтирование SD-карты на Android, чтобы завершить мой собственный файл IO

1

Мое приложение нуждается в гарантированном времени для завершения ввода-вывода на SD-карте до того, как SD-карта будет размонтирована. Мое решение состоит в том, чтобы написать модуль ядра linux, который вставляет обертку вокруг системного вызова umount, который задерживает фактический umount и перезвонит мне, чтобы завершить мою работу.

Мой код может иметь привилегированные компоненты root.

Любые менее обструктивные решения?

  • 0
    Это не должно позволить вам отключить диск, к которому в данный момент осуществляется доступ. Что ты делаешь так долго?
  • 0
    Я предоставляю файловую систему специального назначения (за пределами Android, но с правами пользователя) и храню некоторые данные в буфере. Я не думаю, что наличие дескрипторов открытых файлов предотвращает размонтирование. Таким образом, любое пользовательское приложение может заблокировать системный вызов.
Теги:
android-sdcard

1 ответ

0
Лучший ответ

Хотя я не могу этого гарантировать, я считаю, что umount будет автоматически ждать этого. Это одна из причин использования umount (вместо прямого удаления sdcard).

Кроме того, вы не можете "написать модуль ядра Linux" и "установить" его в устройство Android. То, что вам нужно было сделать, будет включать перекомпиляцию Android, создание пользовательского ПЗУ и установку его на нужное устройство. Каждому устройству понадобится другое ПЗУ и т.д. Я не думаю, что это возможно для вас.

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

  • 0
    Предположим, что мой код установлен OEM-производителями в системную файловую систему r / o, так что да, у меня может быть модуль ядра linux. Не то чтобы я этого хотел. Если возможно, я бы хотел этого избежать. Ваш ответ, кажется, говорит о том, что вы не видите другого пути. Верный? В любом случае, спасибо за ваш ответ.
  • 0
    Я не ожидал, что это будет приемлемый вариант ... Во всяком случае, я не вижу другого вокруг этого. Но опять же: Linux скажет «Устройство занято», а umount сообщит об ошибке. Может быть, Android делает то же самое? Посмотрите этот пример Linux ocaoimh.ie/how-to-umount-when-the-device-is-busy

Ещё вопросы

Сообщество Overcoder
Наверх
Меню