[Система Android]Как создать папку в хранилище/эмулируется/0 до/во время фазы загрузки?

#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  } }