Нет поддержки карт памяти или не найдены vold blocks
Способ №2. Используем настройки ОС Андроид 6.0 и выше
Кроме первого способа, в котором я рассмотрел, как переключить память телефона на карту памяти, существует и другой способ, работающий только на настройках ОС Андроид 6.0 (Marshmallow) или выше, и позволяющий задействовать SD-карту как основную для сохранения файлов и работы с ними. Для его реализации рекомендую сделать копию данных с вашей SD-карты (если таковые на ней имеются), так как данная карта будет отформатирована системой.
- Подключите SD-карту к вашему устройству;
- Перейдите в настройки гаджета, затем в «Хранилище и ЮБС-накопители»;
- Тапните по пункту «SD-карта»;
Прежде чем начать!
У вас Android версии 5.1 или новее? Отлично! Тогда возможно на вашем смартфоне можно увеличить или объединить память внешнюю с внутренней!
Способ 1
способ 2
Если у вас нет таких настроек? Тогда читайте далее статью!
Что нужно для установки SD-карты основной памятью
Для осуществления данной задачи вам понадобится скоростная SD-карта (желательно, 10 класса или быстрее). Карты 6, а особенно 4 и 2 классов для таких целей не пригодны, ваша система вследствие их использования существенно замедлит свою работу, что вряд ли понравится кому-то из пользователей.
Также важно понимать, что срок действия такой SD-карты вследствие активной на неё нагрузки будет существенно меньше, нежели если бы нагрузка на карту проходила в стандартном режиме.
Внимание!
Прежде чем начать выполнять какие либо изменения воспользуйтесь официальной возможностью подмены карты памяти — Карта SD как внутренняя память Android.
Риски и что необходимо знать
Замена внутренней памяти Android на карту памяти происходит только при наличии установленных root прав (нет root, способ не работает)! Для тех кто не знает что такое Root и как получить:
Помимо этого вы обязаны знать структуру файловой системы Android.
Подмена памяти возможна только при условии что на вашем Android устройстве имеется системный файл vold.fstab по пути /system/etc, если такового у вас нет, то данный способ к сожалению не для вас! Воспользуйтесь альтернативными способами (ссылка 1, ссылка 2, ссылка 3). Также если на Android нет собственной памяти, то эта статья также не для вас. Статья в большей степени для устройств с процессором Mediatek (MTK) или Rockchip.
С подменной внутренней памяти на карту памяти, у последней очень сильно падает срок эксплуатации (из-за частого чтения/записи), а также может упасть скорость работы Android если очень низкий класс карты MicroSD.
Заключение
В данной статье мной были рассмотрены варианты того, как установить на Андроиде внешнюю карту SD в качестве основной памяти. Важно учитывать, что данные способы работают далеко не всегда — первый требует рут прав и ОС Андроид ниже, нежели 4.4.2., а второй работает с ОС Андроид 6.0 и выше (при этом есть ряд современных устройство, например «LG G5», на которых реализация последнего способа невозможна по внутренним причинам). Также учтите, что реализация данных способов выполняется вами на свой страх и риск, и гарантировать 100%-процентный результат в данном случае вряд ли полагается возможным.
Малое количество внутренней памяти на дешевых смартфонах и планшетах Android главная проблема в невозможности установить приложения в таких случаях вам может помочь замена внутренней памяти Android на карту памяти.
Для тех кто не понял из заголовка о чем данная статья: предположим у вас 400 МБ внутренний памяти Android, что очень мало (примерно 12-20 установленных приложений), то тогда можно подумать чтобы взять и подменить основную память на карту памяти.
Отформатированная SD-карта для анализа исходного кода Android-vold (10)
В этой статье начинается обсуждение функции форматирования SD-карты. Обычно я использую операционную систему Windows и часто форматирую диск. Приглашена
Операция имеет следующие шаги:
1. Записать информацию о разделе в таблицу разделов в структуре MBR первого узла устройства на жестком диске;
2. Отформатируйте раздел в соответствии с указанным типом файловой системы.
Расположение таблицы разделов в MBR составляет 446-509, что занимает 64 байта. Структура MBR поддерживает только 4 основных раздела, поэтому
Есть четыре 16-байтовые области. Позвольте мне кратко объяснить структуру таблицы разделов MBR:
Как видно из этой таблицы, относительно области таблицы разделов 446-509, 5-й байт каждого основного раздела хранит файл
Системный флаг, который используется для определения раздела, используйте инструмент fdisk, чтобы проверить, существуют ли следующие шестнадцатеричные флаги для файловой системы:
Если вам нужно прочитать эти флаги файловой системы, вам нужно только прочитать 450 местоположений MBR, занимающих размер в байтах.
Слишком далеко, вернитесь к теме, эта статья должна проанализировать функцию SD-карты в формате Android, в части форматирования, она включает в себя
имеет некоторые функции системы, которые не имеют ничего общего с vold. Просто объясните их.
Когда система Android форматирует SD-карту, она сначала определит, есть ли на SD-карте раздел. Если на SD-карте нет раздела,
Затем необходимо повторно инициализировать область MBR, поэтому область таблицы разделов в структуре MBR кратко представлена выше.
Функции форматирования Две основные задачи назначены функциям initializeMbr и Fat :: format:
1. Функция initializeMbr отвечает за инициализацию MBR;
2. Функция Fat :: format отвечает за форматирование раздела.
Сначала рассмотрим инициализацию функции initializeMbr:
Некоторые важные структуры размещены здесь:
После завершения инициализации задайте структурную переменную pinfo с помощью функции apply_disk_config:
Эта функция сначала открывает узел устройства SD-карты, а затем записывает информацию об инициализации MBR в первый блок (512B).
Здесь задействовано много функций, которые не обсуждаются в vold.
После записи MBR раздел должен быть отформатирован и отформатирован как FAT32. Функция Fat :: format вызывается напрямую.
Системная команда newfs_msdos используется для форматирования нового раздела. Если диск обнаружен, функция Fat :: check напрямую вызывает системную команду.
fsck_msdos для обнаружения разделов.
Наконец, форматирование завершено, и Framework уведомляется о том, что SD-карта свободна:
Затем каркас должен повторить операции монтирования и монтирования.
В следующей статье описывается связь между системой Android и компьютером, функция OTG, и ее полное имя на ходу.
Продолжение следует. ,
До Android 4.4 был vold.fstab, в котором можно было спокойно поменять разделы (sd карта вместо внутренней памяти), а с приходом киткат он пропал. Подскажите, возможно как то поменять разделы на 4.4?
До Android 4.4 был vold.fstab, в котором можно было спокойно поменять разделы (sd карта вместо внутренней памяти), а с приходом киткат он пропал. Подскажите, возможно как то поменять разделы на 4.4?
/[email protected] /data ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check,encryptable=footer
/[email protected]_f /protect_f ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
/[email protected]_s /protect_s ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard0:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard1:auto
Что и где нужно изменить, чтобы разделы поменялись местами? Пробовал очевидные варианты - пока не получилось.
Что и где нужно изменить, чтобы разделы поменялись местами? Пробовал очевидные варианты - пока не получилось.
Zhenchikyo,
Ну да) Ещё пробовал стирать ',noemulatedsd' - тоже не получается. Так же пробовал заменить создание симлинков в factory_init.rc (тоже в ядре) - так же ничего не дало.
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
sanek922,
Пробовал - не помогает. Сд карта вообще не монтируется - не определяется устройством.
Скопировал с одного форума,
Как поменять местами внешнюю и внутреннюю память на RK3188 Android 4.4.2 KitKat
Т.е. что бы система думала что ваша microSD это внутренняя память.
Отредактировать:
fstab.rk30board.bootmode.unknown
Должно быть так:
/dev/block/mtd/by-name/user /mnt/external_sd vfat defaults voldmanaged=external_sd:auto,noemulatedsd
/devices/platform/rk29_sdmmc.0/mmc_host/mmc /mnt/internal_sd vfat defaults voldmanaged=internal_sd:auto
fstab.rk30board.bootmode.emmc
Должно быть так:
/dev/block/platform/emmc/by-name/user /mnt/external_sd vfat defaults voldmanaged=external_sd:auto,noemulatedsd
/devices/platform/rk29_sdmmc.0/mmc_host/mmc /mnt/internal_sd vfat defaults voldmanaged=internal_sd:auto
Собрать обратно и прошить.
Да, способ работает. Поменял местами внутреннюю и внешнюю SD на клоне Chuwi V88 с прошивкой OMA 3.1 KitKat.
Разбирал и собирал boot.img на Windows 7 с помощью RK3xxx_firmware_tools_5.10.28.00
Правил файлы fstab.rk30board.bootmode.unknown и fstab.rk30board.bootmode.emmc с помощью AkelPad.
Прошил измененный boot.img (остальные галочки снял) с помощью RKAndroidTool v1.37.
Правленый boot.img
Farton,
Это уневерсальный бут? Пойдет ли он на galaxy gio s5660 с cyanogenmod 11, который по сути тоже считается 4,4 версией?
Проблема нехватки памяти – одна из основоположных как для ПК, так и для мобильных устройств. При малом количестве свободной памяти система обычно начинает подтормаживать, подвисать, работает нестабильно и ненадёжно. Особенно актуально это для Андроид-устройств, многие из которых изначально обладают довольно небольшим объёмом основной памяти (т.н. «Internal Storage»). В такой ситуации у некоторых пользователей может возникнуть идея попробовать использовать внешнюю SD-карту в качестве основной памяти на их Андроид-устройстве. В данном материале я расскажу, поставить основной памятью карту SD на гаджетах Андроид, и какие способы нам в этом помогут.
Способ №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
Сохраните произведёнными вами изменения, а затем перезагрузите гаджет.
Ещё один вариант как сделать карту памяти основной на андроид:
Инициализация 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:
- CommandListener::CommandListener() :
- FrameworkListener("vold")
- registerCmd(new DumpCmd());
- RegisterCmd (new VolumeCmd ()); // обрабатывать события тома
- registerCmd(new AsecCmd());
- registerCmd(new ObbCmd());
- registerCmd(new StorageCmd());
- registerCmd(new XwarpCmd());
- registerCmd(new CryptfsCmd());
- >
В приведенном выше коде мы видим, что класс FrameworkListener сначала создается с параметром "vold". После завершения вызывается метод registerCmd () в классе FrameworkListener для регистрации некоторых классов методов обработки. В случае монтирования SD-карты мы сначала Сосредоточьтесь на классе VolumeCmd, который является внутренним классом FrameworkListener, используемым для обработки событий Volume. Далее, посмотрите на конструктор FrameworkListener:
- FrameworkListener::FrameworkListener(const char *socketName) :
- SocketListener (socketName, true)
- mCommands = new FrameworkCommandCollection();
- >
- SocketListener::SocketListener(const char *socketName, bool listen)
- mListen = listen;
- MSocketName = socketName; / сохранить строку vold в переменной mSocketName
- mSock = -1;
- pthread_mutex_init(&mClientsLock, NULL);
- MClients = new SocketClientCollection (); // Создать контейнер клиента сокета
- >
На самом деле, это очень просто, то есть для выполнения инициализации некоторых переменных, используйте переменную 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;
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))/ Создать новый поток
Инструкция замена внутренней памяти Android на карту памяти
1. Установить файловый менеджер Root Browser (если выбрали другой, то в комментариях не писать «умных» вопросов «не вижу» «не редактирует»)
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.
Читайте также: