当前位置: 首页 > news >正文

中山做网站排名做app的网站

中山做网站排名,做app的网站,网站备案中页面,德阳企业网站建设1.启动 它是从rc文件中启动的#xff0c;rc文件是second stage init才会解析的#xff0c;也就是说vold主要作用做second stage mount#xff0c;那first stage mount是怎么做的呢#xff0c;第一阶段实际上直接调用的是fs_mgr进行的mount#xff0c;fs_mgr_do_mount_one…1.启动 它是从rc文件中启动的rc文件是second stage init才会解析的也就是说vold主要作用做second stage mount那first stage mount是怎么做的呢第一阶段实际上直接调用的是fs_mgr进行的mountfs_mgr_do_mount_one() system/core/rootdir/init.rc 584 on early-fs 585 # Once metadata has been mounted, well need vold to deal with userdata checkpointing 586 start vold 2. vold main()分析 这里省略不中要的代码 65 int main(int argc, char** argv) { .... 74 LOG(DEBUG) Detected support for: --- 这里log输出内核支持的文件系统结果来自/proc/filesystems见2.1 75 (android::vold::IsFilesystemSupported(ext4) ? ext4 : ) 76 (android::vold::IsFilesystemSupported(f2fs) ? f2fs : ) 77 (android::vold::IsFilesystemSupported(vfat) ? vfat : ) 78 (android::vold::IsFilesystemSupported(texfat) ? texfat : ) 79 (android::vold::IsFilesystemSupported(exfat) ? exfat : ); 80 81 VolumeManager* vm; --- vold中两个主要的组件VolumeManager和NetlinkManager 82 NetlinkManager* nm; --- VolumeManager负责volume的管理 NetlinkManager 负责block device uevent的管理 ......... 93 mkdir(/dev/block/vold, 0755); 94 95 /* For when cryptfs checks and mounts an encrypted filesystem */ 96 klog_set_level(6); --- 设置kernel log输出level 默认是KLOG_INFO_LEVEL 6 97 98 /* Create our singleton managers */ 99 if (!(vm VolumeManager::Instance())) { --- 为 VolumeManager 创建实例 100 LOG(ERROR) Unable to create VolumeManager; 101 exit(1); 102 } 103 104 if (!(nm NetlinkManager::Instance())) { --- 为 NetlinkManager 创建实例 105 LOG(ERROR) Unable to create NetlinkManager; 106 exit(1); 107 } 108 109 if (android::base::GetBoolProperty(vold.debug, false)) { --- vold.debug可以用来打开log 用作显示block device uevent的发生 110 vm-setDebug(true); 111 } 112 113 if (vm-start()) { --- VolumeManager 做初始化的操作 114 PLOG(ERROR) Unable to start VolumeManager; 115 exit(1); 116 } 117 118 VoldConfigs configs {}; 119 if (process_config(vm, configs)) { --- 获取volume的config信息, 其实config信息解析自fstab中的flags见2.2 120 PLOG(ERROR) Error reading configuration... continuing anyways; 121 } 122 123 android::hardware::configureRpcThreadpool(1, false /* callerWillJoin */); 124 125 ATRACE_BEGIN(VoldNativeService::start); --- VoldNativeService是Ivold的实现作为binder server创建实例并加入到ServiceManager里 126 if (android::vold::VoldNativeService::start() ! android::OK) { 127 LOG(ERROR) Unable to start VoldNativeService; 128 exit(1); 129 } 130 ATRACE_END(); 131 132 LOG(DEBUG) VoldNativeService::start() completed OK; 133 134 ATRACE_BEGIN(NetlinkManager::start); 135 if (nm-start()) { --- NetlinkManager 做初始化的操作 136 PLOG(ERROR) Unable to start NetlinkManager; 137 exit(1); 138 } 139 ATRACE_END(); 140 141 // This call should go after listeners are started to avoid 142 // a deadlock between vold and init (see b/34278978 for details) --- 从volume的config信息设置property 143 android::base::SetProperty(vold.has_adoptable, configs.has_adoptable ? 1 : 0); 144 android::base::SetProperty(vold.has_quota, configs.has_quota ? 1 : 0); 145 android::base::SetProperty(vold.has_reserved, configs.has_reserved ? 1 : 0); 146 android::base::SetProperty(vold.has_compress, configs.has_compress ? 1 : 0); 147 148 // Do coldboot here so it wont block booting, 149 // also the cold boot is needed in case we have flash drive 150 // connected before Vold launched 151 coldboot(/sys/block); --- 重新触发一下block device uevent和init进程的RegenerateUevents()类似,见2.3 152 153 ATRACE_END(); 154 155 android::IPCThreadState::self()-joinThreadPool(); ------ 开启主线程 binder looper 156 LOG(INFO) vold shutting down; 157 158 exit(0); 159 } 2.1 cat proc/filesystems nodev代表vfs 好多啊 头大 搞那么多VFS我是真的服 nodev sysfsnodev tmpfsnodev bdevnodev procnodev cgroupnodev cgroup2nodev cpusetnodev binfmt_miscnodev configfsnodev debugfsnodev tracefsnodev securityfsnodev sockfsnodev bpfnodev pipefsnodev ramfsnodev devptsext3ext2ext4vfatmsdosexfatfuseblknodev fusenodev fusectlnodev virtiofsnodev overlaynodev incremental-fsf2fserofsnodev selinuxfsnodev bindernodev pstorenodev functionfs 2.2 process_config() 229 static int process_config(VolumeManager* vm, VoldConfigs* configs) {230 ATRACE_NAME(process_config);231 232 if (!ReadDefaultFstab(fstab_default)) { ------- 读取fstab233 PLOG(ERROR) Failed to open default fstab;234 return -1;235 }236 237 /* Loop through entries looking for ones that vold manages */238 configs-has_adoptable false;239 configs-has_quota false;240 configs-has_reserved false;241 configs-has_compress false;242 for (auto entry : fstab_default) {243 if (entry.fs_mgr_flags.quota) {244 configs-has_quota true;245 }246 if (entry.reserved_size 0) {247 configs-has_reserved true; -------- userdata分区是有reserved size的所以你的手机存储满了还是可以运行的248 }249 if (entry.fs_mgr_flags.fs_compress) {250 configs-has_compress true;251 }252 253 /* Make sure logical partitions have an updated blk_device. */254 if (entry.fs_mgr_flags.logical !fs_mgr_update_logical_partition(entry) 255 !entry.fs_mgr_flags.no_fail) {256 PLOG(FATAL) could not find logical partition entry.blk_device;257 }258 259 if (entry.mount_point /data !entry.metadata_key_dir.empty()) {260 // Pre-populate userdata dm-devices since the uevents are asynchronous (b/198405417).261 android::vold::defaultkey_precreate_dm_device(); ------ 这个好像有点内容我还没看262 }263 264 if (entry.fs_mgr_flags.vold_managed) { ---- 就两个 /storage/sdcard1 /storage/usbotg wait,voldmanagedsdcard1:auto265 if (entry.fs_mgr_flags.nonremovable) {266 LOG(WARNING) nonremovable no longer supported; ignoring volume;267 continue;268 }269 270 std::string sysPattern(entry.blk_device);271 std::string nickname(entry.label);272 int flags 0;273 274 if (entry.is_encryptable()) {275 flags | android::vold::Disk::Flags::kAdoptable; ---- sdcard 作为adoptable storage 能卡死..呵呵..笑了276 configs-has_adoptable true;277 }278 if (entry.fs_mgr_flags.no_emulated_sd ||279 android::base::GetBoolProperty(vold.debug.default_primary, false)) {280 flags | android::vold::Disk::Flags::kDefaultPrimary;281 }282 283 vm-addDiskSource(std::shared_ptrVolumeManager::DiskSource( ---- 申明voldmanaged的这俩被vm添加到了mDisksource284 new VolumeManager::DiskSource(sysPattern, nickname, flags)));285 }286 }287 return 0;288 } 2.3 do_coldboot()   188 static void do_coldboot(DIR* d, int lvl) {189 struct dirent* de;190 int dfd, fd;191 192 dfd dirfd(d);193 194 fd openat(dfd, uevent, O_WRONLY | O_CLOEXEC);195 if (fd 0) {196 write(fd, add\n, 4); -------- 因为vold启动前就已经有block device add了所以需要重新触发 add block device uevent197 close(fd);198 }199 200 while ((de readdir(d))) {201 DIR* d2;202 203 if (de-d_name[0] .) continue;204 205 if (de-d_type ! DT_DIR lvl 0) continue;206 207 fd openat(dfd, de-d_name, O_RDONLY | O_DIRECTORY | O_CLOEXEC);208 if (fd 0) continue;209 210 d2 fdopendir(fd); 211 if (d2 0)212 close(fd);213 else {214 do_coldboot(d2, lvl 1); -------- sys/block/没有找到uevent文件递归往子目录查找215 closedir(d2);216 }217 }218 }
http://www.hkea.cn/news/14507394/

相关文章:

  • 公司网站在哪里做快速搭建网站模板
  • 网站色彩搭配表适合初学者做的网页
  • 昆山网站建设公司怎么样wordpress 不能查看站点
  • 电子商务学网站建设好吗网站权重一般有几个等级
  • codeorg免费编程网站贵州省住房与城乡建设厅网站
  • 做自媒体网站开发做网站工资怎么样
  • 无锡前洲行业网站建设半瓶的wordpress之旅
  • 广州企业网站模板建站2024年还有新冠吗
  • 天津网站建立seo教程免费分享
  • 携程的网站建设石家庄网站建设流程
  • 山东莱州市建设局网站有没有专门帮人推广的公司
  • 陕西的网站建设公司排名网站建设平台官网河间米各庄
  • 大连网站设计公司wordpress自学
  • 太平洋建设 网站深圳极速网站建设电话
  • 设计行业网站泰安抖音seo
  • 怎么做html网站个人网站 不备案
  • 深圳石岩建网站深圳网站设计美工
  • 网站开发工程师是什么中国建筑未来走势预测
  • 24什么网站建设网站开发背景图
  • 上海自助建站 上海网站建设wordpress 页面怎么添加表格
  • wordpress解压到空间上海外包seo
  • 嘉定网站设计制作优化排名如何发布网站
  • 国外免费logo网站国家企业信息公示系统官网平台
  • 网站怎么做弹窗有名的装修公司都有哪些
  • 756ka网站建设简单电商网站模板
  • 网站运营经验wordpress 参数 传递
  • 可信网站权威性怎么样网站建站教程
  • 怎么免费建设自己网站wordpress菜单管理
  • 网站备案负责人修改ASP网站开发教程实验总结
  • 中国空间站设计在轨飞行几年铜陵网站建设费用