#android #operating-system #filesystems
Вопрос:
Мне нужно создать папку в хранилище/эмулировано/0, а затем выполнить операцию монтирования.
Сначала я пытаюсь сделать это в /system/core/rootdir/init.rc
mkdir /storage/emulated/0/avtmp mount tmpfs tmpfs /storage/emulated/0/avtmp size=10m
но он не работает при «при инициализации» или «при обработке данных после fs»,и mkdir работает с использованием другого пути,например
mkdir /system/test
Поэтому я думаю, что вопрос заключается в сроках создания /хранения/эмуляции/0 Я также пытался сделать это в /system/core/rootdir/Android.mk
LOCAL_POST_INSTALL_CMD = ; mkdir /storage/emulated/0/avtmp LOCAL_POST_INSTALL_CMD = ; mount -t tmpfs -o size=10m tmpfs /storage/emulated/0/avtmp
Это тоже не работает.
Я искал помощь в Google или другими способами,но все ответы, которые я получаю, касаются разработки приложений, а не системы.Кто-нибудь может мне помочь?
Ответ №1:
Теперь эта проблема решена. хранилище/эмулируется/0,смонтированное процессом «vold», а не процессом «инициализации», поэтому мы должны выполнить mkdir и смонтировать в VolumeManager.
Код в /system/vold/VolumeManager.cpp
int VolumeManager::linkPrimary(userid_t userId) { std::string source(mPrimary-gt;getPath()); if (mPrimary-gt;getType() == android::vold::VolumeBase::Type::kEmulated) { source = StringPrintf("%s/%d", source.c_str(), userId); fs_prepare_dir(source.c_str(), 0755, AID_ROOT, AID_ROOT); //MYCODE BEGIN std::string mountPath = StringPrintf("%s/avtmp", source.c_str()); fs_prepare_dir(mountPath.c_str(), 0755, AID_ROOT, AID_SDCARD_RW); std::vectorlt;std::stringgt; cmd; cmd.push_back("mount"); cmd.push_back("-t"); cmd.push_back("tmpfs"); cmd.push_back("-o"); cmd.push_back("size=10m"); cmd.push_back("tmpfs"); cmd.push_back(mountPath.c_str()); android::vold::ForkExecvp(cmd); //MYCODE END .......//other codes } }