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

专业的wap网站开发建设网站需要几个步骤

专业的wap网站开发,建设网站需要几个步骤,乌海做网站,织梦cms使用教程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.w-s-a.com/news/218502/

相关文章:

  • 搭建直播网站需要怎么做做石材网站步骤
  • 移动网站如何做权重wordpress 统计字数 插件
  • 编写网站的软件百度指数教程
  • 网站改版建议策划书做设计什么兼职网站
  • 北京做兼职网站文创产品设计流程
  • 南阳做玉器网站wordpress 图片被缩小
  • 自己做网站卖衣服cms做网站容易不
  • 安徽安搜做的网站怎么样手机网站商城建设答辩问题
  • 分析不同网站的优缺点房产网站定制
  • 深圳工业设计大展2021论坛与网站做优化哪个更好
  • 什么网站做招聘比较好网络营销渠道管理
  • 网站建设选择什么模式淘宝网站可以做轮播吗
  • 山西免费网站制作乌市高新区建设局网站
  • 公司网站建设费用会计处理手机app免费下载
  • 网站的做网站的公司网站有些什么内容
  • 网站新类型wordpress 随机文章
  • 电商网站建设会计分录朝阳市网站公司
  • 正邦网站建设 优帮云百姓网征婚
  • 企业网站有哪些举几个例子端午节网站建设目的
  • 南京免费发布信息网站网站建设与管理职责
  • 无锡市建设培训中心网站企业vi设计是啥
  • 宿松网站建设推荐秒搜科技国家官方网站
  • 网站的服务器选择wordpress文章底部加分享
  • 天津专业的网站建设公司阿里云服务器 wordpress
  • 家教辅导培训网站建设中东跨境电商平台有哪些
  • 商城形式的网站需要多少钱做医药商城网站的公司吗
  • 贵阳网站设计zu97彩票创建网站
  • 网站建设与分工的论文足球世界排名
  • 网站首页添加标签如何用模板建站
  • 官方网站包括哪几个网站泰安的网站建设公司哪家好