Нет поддержки карт памяти или не найдены vold blocks

Обновлено: 04.07.2024

Добрый вечер. Который день уже пытаюсь поменять местами память в телефоне. Приложения по умолчанию ставятся на внутреннюю, там размещают данные и оттуда берут. На другом телефоне наоборот и все так устраивает. Искал в системе fstab. Не нашел, посоветовали разобрать boot.img Нужна помощь, а именно что отредактировать чтоб решить вопрос.

Содержимое файла fstab.universal5422 [cut]

/dev/block/mmcblk0p18 /system ext4 ro,errors=panic wait /dev/block/mmcblk0p3 /efs ext4 nosuid,nodev,noatime,noauto_da_alloc,discard,journal_async_commit,errors=panic wait,check /dev/block/mmcblk0p19 /cache ext4 nosuid,nodev,noatime,noauto_da_alloc,discard,journal_async_commit,errors=panic wait,check /dev/block/mmcblk0p21 /data ext4 nosuid,nodev,noatime,noauto_da_alloc,discard,journal_async_commit,errors=panic wait,check,encryptable=footer

/devices/platform/dw_mmc.2/mmc_host/mmc2,/devices/12220000.dwmmc2/mmc_host/mmc2 auto vfat default voldmanaged=extSdCard:auto,noemulatedsd /devices/platform/exynos-dwc3.0/exynos-xhcisda,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sda auto vfat default voldmanaged=UsbDriveA:auto /devices/platform/exynos-dwc3.0/exynos-xhcisdb,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sdb auto vfat default voldmanaged=UsbDriveB:auto /devices/platform/exynos-dwc3.0/exynos-xhcisdc,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sdc auto vfat default voldmanaged=UsbDriveC:auto /devices/platform/exynos-dwc3.0/exynos-xhcisdd,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sdd auto vfat default voldmanaged=UsbDriveD:auto /devices/platform/exynos-dwc3.0/exynos-xhcisde,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sde auto vfat default voldmanaged=UsbDriveE:auto /devices/platform/exynos-dwc3.0/exynos-xhcisdf,/devices/usb.1/12000000.dwc3/xhci-hcd.4.auto/usb2sdf auto vfat default voldmanaged=UsbDriveF:auto

newphonebass ( 27.11.19 21:23:45 )
Последнее исправление: newphonebass 27.11.19 21:34:04 (всего исправлений: 4)

Содержимое файла fstab.goldfish

/dev/block/mtdblock0 /system ext4 ro,barrier=1 wait /dev/block/mtdblock1 /data ext4 noatime,nosuid,nodev,barrier=1,nomblk_io_submit wait,check /dev/block/mtdblock2 /cache ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check /devices/platform/goldfish_mmc.0 auto vfat defaults voldmanaged=sdcard:auto

Не хочет под спойлер прятаться.

На 4pda глухо. Впринципе, не вижу помехи в форуме linux/mobile. Не unix’овая ли система андроид. Нужно подредактировать файл. Есть что по делу, буду рад, нет - проходите мимо.


Нужно достать рамдиск из бут.имг найти фстаб. Найти строчку монтирование дата и карты памяти. пример /dev/block/mmcblk0p21 /data опции /dev/bloc/mmcblk1p1 /sdcard опции удалеете обе строчки. пишите /dev/block/mmcblk1p1 /data опции Вам нужно смонтировать блочное устройство раздела карты памяти на директорию /data

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

Замена внутренней памяти Android на карту памяти

Для тех кто не понял из заголовка о чем данная статья: предположим у вас 400 МБ внутренний памяти Android, что очень мало (примерно 12-20 установленных приложений), то тогда можно подумать чтобы взять и подменить основную память на карту памяти.

Прежде чем начать!

У вас Android версии 5.1 или новее? Отлично! Тогда возможно на вашем смартфоне можно увеличить или объединить память внешнюю с внутренней!

Способ 1

способ 2

Если у вас нет таких настроек? Тогда читайте далее статью!

Риски и что необходимо знать

Замена внутренней памяти Android на карту памяти происходит только при наличии установленных root прав (нет root, способ не работает)! Для тех кто не знает что такое Root и как получить:

Помимо этого вы обязаны знать структуру файловой системы Android.

Подмена памяти возможна только при условии что на вашем Android устройстве имеется системный файл vold.fstab по пути /system/etc, если такового у вас нет, то данный способ к сожалению не для вас! Воспользуйтесь альтернативными способами (ссылка 1, ссылка 2, ссылка 3). Также если на Android нет собственной памяти, то эта статья также не для вас. Статья в большей степени для устройств с процессором Mediatek (MTK) или Rockchip.

С подменной внутренней памяти на карту памяти, у последней очень сильно падает срок эксплуатации (из-за частого чтения/записи), а также может упасть скорость работы Android если очень низкий класс карты MicroSD.

Внимание!

Инструкция замена внутренней памяти Android на карту памяти

2. Запускаем файловый менеджер Root Broswser и переходим по пути:

/system/etc/

3. Ищем файл vold.fstab и открываем его (зажимаем на файле и выбрать Edit)

4. В файле vold.fstab видим примерно такую картину:

На данном примере обратите внимание выделено две строки, если внимательно перед этим прочитали структуру файловой системы Android, то вы уже знаете, что /sdcard или /sdcard0 это внутренняя память, а /extsd или /external_sdcard, /sdcrad1, /sdcrad2, /external_sd это внешняя память, то есть MicroSD.

Все что нужно сделать это заменить эти две строки местами:

Еще один пример, на другом устройстве:

Меняем на следующее:

У вас еще остались дополнительные вопросы? Задавайте их в комментариях, рассказывайте о том, что у вас получилось или наоборот!

Вот и все! Оставайтесь вместе с сайтом Android +1, дальше будет еще интересней! Больше статей и инструкций читайте в разделе Статьи и Хаки Android.

Инициализация Android vold и процесс установки SD-карты (воспроизведено)

1 Общее введение

В Android, когда SD-карта вставлена ​​в систему, система автоматически смонтируется. Vold отвечает за монтирование SD-карты, а полное имя vold - это Volume Volume Daemon. Фактически, именно демон отвечает за выполнение задач по монтажу системного CDROM, запоминающего устройства USB, карты MMC и другого расширенного хранилища. Основная функция, которую он предоставляет, - поддержка горячей замены этих периферийных устройств хранения.

1.1 Общая блок-схема


Ø Зеленая стрелка: указывает на передачу события и установку SD-карты после установки SD-карты.

Ø Желтая стрелка: указывает, что MountService выдал команду для монтирования / размонтирования SD-карты.

1.2 Общая диаграмма классов


В main.cpp, функции входа vold, система выполнит только исполняемый файл vold и передаст эту основную функцию.

DirectVolume: находится в /system/vold/DirectVolume.cpp. Этот класс является классом инструментов, который в основном отвечает за дальнейшую обработку входящих событий.Блокированные события можно разделить на четыре типа: Добавить, Удалить, Изменить и Noaction.

2 Процесс инициализации

2.1 Временная диаграмма


Когда система Android запускается, процесс init анализирует файл init.rc. В этом файле присутствуют следующие коды:

service vold /system/bin/vold

socket vold stream 0660 root mount

Определите службу vold для выполнения программы vold и создайте сокет с именем vold. После анализа процесса init выполняется программа vold для создания сокета, который взаимодействует со слоем java.

Файл main.cpp в пути исходного кода Android / system / vold - это вход в программу vold. Давайте рассмотрим основную функцию, код которой выглядит следующим образом:

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

Затем он должен инициализировать интерфейс связи сокетов между vold и java-уровнем. Экземпляр CommandListener создан. В связи с диаграммой классов выше мы знаем, что CommandListener наследуется от FrameworkListener, а FrameworkListener наследуется от SocketListener. Сначала посмотрите на код инициализации CommandListener:

  1. CommandListener::CommandListener() :
  2. FrameworkListener("vold")
  3. registerCmd(new DumpCmd());
  4. RegisterCmd (new VolumeCmd ()); // обрабатывать события тома
  5. registerCmd(new AsecCmd());
  6. registerCmd(new ObbCmd());
  7. registerCmd(new StorageCmd());
  8. registerCmd(new XwarpCmd());
  9. registerCmd(new CryptfsCmd());
  10. >

В приведенном выше коде мы видим, что класс FrameworkListener сначала создается с параметром "vold". После завершения вызывается метод registerCmd () в классе FrameworkListener для регистрации некоторых классов методов обработки. В случае монтирования SD-карты мы сначала Сосредоточьтесь на классе VolumeCmd, который является внутренним классом FrameworkListener, используемым для обработки событий Volume. Далее, посмотрите на конструктор FrameworkListener:

  1. FrameworkListener::FrameworkListener(const char *socketName) :
  2. SocketListener (socketName, true)
  3. mCommands = new FrameworkCommandCollection();
  4. >
  1. SocketListener::SocketListener(const char *socketName, bool listen)
  2. mListen = listen;
  3. MSocketName = socketName; / сохранить строку vold в переменной mSocketName
  4. mSock = -1;
  5. pthread_mutex_init(&mClientsLock, NULL);
  6. MClients = new SocketClientCollection (); // Создать контейнер клиента сокета
  7. >

На самом деле, это очень просто, то есть для выполнения инициализации некоторых переменных, используйте переменную mSocketName для хранения строки «vold», эта vold очень специфична, потому что в службе vold, определенной в init.rc, создается имя с именем vold Порт сокета будет получен через "vold" позже.

На этом этапе инициализация CommandListener завершена.

Мы возвращаемся к основной функции после создания экземпляра CommandListener, а затем вызываем метод setBroadcaster для VolumeManger, чтобы сохранить экземпляр CommandListener в переменной mBroadcaster, код выглядит следующим образом:

void setBroadcaster(SocketListener *sl)

На самом деле NetlinkManager выполнил ту же настройку, но я пока не нашел ее полезной, поэтому больше не обращаю на это внимания.

Затем я начал вызывать метод process_config () файла main.cpp. Перед введением я должен сначала представить файл конфигурации vold.fstab. Этот файл конфигурации анализируется в process_config () и файле конфигурации vold.fstab. , Используется для описания действия монтажа vold, пример конфигурации следующий:

dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0

Команда монтажа Ярлыки Точки монтажа Количество подразделов Количество подразделов Путь монтажа Путь монтажа

Мы используем приведенный выше пример для иллюстрации, это означает, что /devices/platform/goldfish_mmc.0 монтируется в / mnt / sdcard, /devices/platform/goldfish_mmc.0 может рассматриваться как путь, указанный ядром. Если число подразделов равно auto, это означает, что имеется только один подраздел или любое целое число, отличное от 0. Если vold.fstab проанализирован правильно, VolueManager создаст DirectVolume.

Хорошо, вы можете увидеть метод process_config () ниже, код выглядит следующим образом:

Этот метод анализируется построчно через метод wihle. Если это считается разумным, полученная информация используется для создания экземпляра DirectVolume, а затем вызывается метод volumeVanager addVolume и сохраняется в переменной mVolumes.

struct sockaddr_nl nladdr;

int sz = 64 * 1024;

memset(&nladdr, 0, sizeof(nladdr));

If ((mSock = socket (PF_NETLINK, // Создать сокет, вернуть дескриптор файла

SLOGE("Unable to create uevent socket: %s", strerror(errno));

if (setsockopt(mSock, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz)) < 0)

SLOGE("Unable to set uevent socket SO_RECBUFFORCE option: %s", strerror(errno));

if (setsockopt(mSock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0)

SLOGE("Unable to set uevent socket SO_PASSCRED option: %s", strerror(errno));

if (bind(mSock, (struct sockaddr *) &nladdr, sizeof(nladdr)) < 0)

SLOGE("Unable to bind uevent socket: %s", strerror(errno));

mHandler = new NetlinkHandler(mSock);

Фактически, это вызов функции socket () для создания порта сокета, возврата дескриптора после некоторых настроек, а затем использование дескриптора в качестве параметра для создания экземпляра NetlinkHandler, а затем прямой вызов метода start. Посмотрите на конструктор NetLinkHandler:

В конструкторе ничего не делается, NetlinkHandler наследуется от NetlinkListener, а затем передается дескриптор порта сокета.

Строков кода очень мало, NetlinkListener также наследуется от SocketListener, поэтому он также передает дескриптор сокета и снова создает экземпляр SocketListener, поэтому в системе vold есть два экземпляра SocketListener. Глядя на его конструктор, конструктор здесь отличается от предыдущего, код выглядит следующим образом:

SocketListener::SocketListener(int socketFd, bool listen)

mClients = new SocketClientCollection();

На самом деле, он похож на описанный выше конструктор, за исключением того, что переданные параметры отличаются: предыдущая - это строка «vold», а здесь дескриптор сокета.

Хорошо, конструктор создан, затем посмотрите на метод NetlinkHandler-> start ():

Возвращаем this-> startListener (); // Он указывает на socketListener

Метод startListener здесь находится в SocketListener, код выглядит следующим образом:

if (!mSocketName && mSock == -1)

> else if (mSocketName)

if ((mSock = android_get_control_socket(mSocketName)) < 0)

if (mListen && listen(mSock, 4) < 0)

> else if (!mListen)

MClients-> push_back (new SocketClient (mSock, false)); // Создать клиент-сокет и добавить его в контейнер mClients.

If (pthread_create (& mThread, NULL, SocketListener :: threadStart, this))

24 02 2021 22 52 15

Редактирование файла vold .fstab поможет вам заменить внутреннюю карту памяти на внешнюю.

Если у вас планшет с 4 ГБ памяти, то вы возможно уже столкнулись с проблемой нехватки встроенной памяти для установки программ больше 1 ГБ.

vold.fstab

Но если у вас есть карта памяти microSD, объемом больше встроенных 4ГБ, то можно поменять их местами. То есть встроенную память сделать внешней, а карточка MicroSD внутренней.
За распределение памяти на планшете с ОС Android отвечает файл vold.fstab, который находится в системе по адресу /system/etc/

Редактирование файла vold.fstab

Откройте ES проводник и скопируйте файл на встроенную память, а затем на компьютер.

Обязательно сохраните файл vold.fstab отдельно. Для восстановления при необходимости

На компьютере открываем файл используя блокнот или notepad++.

Внизу находится две строчки, которые как раз и отвечают за перераспределение памяти.

24 02 2021 22 51 00

В данном случае строчка dev_mount sdcard…. отвечает за встроенную память, а dev_mount sdcard2…. за внешнюю (MicroSD). Что бы встроенная память поменялась с внешней, то необходимо поменять строчки местами. Но не полностью, а только надписи, которые идут за dev_mount sdcard/storage/sdcard0 и dev_mount sdcard2/storage/sdcard1 соответственно.

В нашем случае после редактирования строчка должна выглядеть так.

24 02 2021 22 51 32

Теперь сохраняем файл, копируем его на планшет и через ES проводник переносим в папку /system/etc/ перезаписав его.

24 02 2021 22 52 15

После перезагрузки память MicroSD будет определяться как память телефона. А игры будут устанавливаться без проблем.

Проблема нехватки памяти – одна из основоположных как для ПК, так и для мобильных устройств. При малом количестве свободной памяти система обычно начинает подтормаживать, подвисать, работает нестабильно и ненадёжно. Особенно актуально это для Андроид-устройств, многие из которых изначально обладают довольно небольшим объёмом основной памяти (т.н. «Internal Storage»). В такой ситуации у некоторых пользователей может возникнуть идея попробовать использовать внешнюю SD-карту в качестве основной памяти на их Андроид-устройстве. В данном материале я расскажу, поставить основной памятью карту SD на гаджетах Андроид, и какие способы нам в этом помогут.

Рисунок к Андроидом и картой памяти

Что нужно для установки SD-карты основной памятью

Для осуществления данной задачи вам понадобится скоростная SD-карта (желательно, 10 класса или быстрее). Карты 6, а особенно 4 и 2 классов для таких целей не пригодны, ваша система вследствие их использования существенно замедлит свою работу, что вряд ли понравится кому-то из пользователей.

Также важно понимать, что срок действия такой SD-карты вследствие активной на неё нагрузки будет существенно меньше, нежели если бы нагрузка на карту проходила в стандартном режиме.

Фото карты памяти 10 класса

Способ №1. Изменяем содержимое файла Vold.fstab

Первый из описанных способов предполагает изменение содержимого файла системных настроек «Vold.fstab». После осуществления указанных изменений ОС Андроид будет считать вашу SD-карту внутренней памятью устройства, при этом учтите, что ряд установленных ранее приложений могут перестать работать.

Важно знать, что данный способ работает только на рутированных устройствах, на которых установлена ОС Андроид ниже (!), нежели версия 4.4.2. В версиях ОС Андроид 4.4.2 и выше указанный файл, скорее всего, вы попросту не найдёте.

Также учтите, что ошибка в реализации данного способа (в частности, добавление в нужные строки лишних символов) может самым печальным образом сказаться на работоспособности вашего устройства. Потому тщательно взвесьте возможные риски, и если, всё-таки, приняли решение, тогда приступайте к его реализации.

Итак, для осуществления данного способа выполните следующее:

Например, это могут быть такие строки:

  • dev_mount sdcard/storage/sdcard0 emmc@xxxxxx
  • dev_mount sdcard2/storage/sdcard1 auto/xxxxxx

Для осуществления нужных изменений нам необходимо поменять путь в указанных строках местами, то есть, проще говоря, вместо 0 поставьте единичку в первой строке, а во второй вместо 1 поставьте 0.

После изменений эти строки будут иметь вид:

  • dev_mount sdcard/storage/sdcard1 emmc@xxxxxx
  • dev_mount sdcard2/storage/sdcard0 auto/xxxxx

Сохраните произведёнными вами изменения, а затем перезагрузите гаджет.

Ещё один вариант как сделать карту памяти основной на андроид:

Иллюстрация нужных изменений в тексте

Способ №2. Используем настройки ОС Андроид 6.0 и выше

Кроме первого способа, в котором я рассмотрел, как переключить память телефона на карту памяти, существует и другой способ, работающий только на настройках ОС Андроид 6.0 (Marshmallow) или выше, и позволяющий задействовать SD-карту как основную для сохранения файлов и работы с ними. Для его реализации рекомендую сделать копию данных с вашей SD-карты (если таковые на ней имеются), так как данная карта будет отформатирована системой.

  • Подключите SD-карту к вашему устройству;
  • Перейдите в настройки гаджета, затем в «Хранилище и ЮБС-накопители»;
  • Тапните по пункту «SD-карта»;

Заключение

Читайте также: