Android文件系统加载之一

1. fstab变量

在文件core/init/first_stage_mount.cpp中:

229 std::unique_ptr<FirstStageMount> FirstStageMount::Create() {                    
230     auto fstab = ReadFirstStageFstab();                                         
231     if (IsDtVbmetaCompatible(fstab)) {                                          
232         return std::make_unique<FirstStageMountVBootV2>(std::move(fstab));      
233     } else {                                                                                                                                                                                                   
234         return std::make_unique<FirstStageMountVBootV1>(std::move(fstab));      
235     }                                                                           
236 } 

debug信息:

[    1.381627] init: init first stage started!
[    1.381996] init: tom L=231
[    1.382236] init: tom F=ReadFirstStageFstab L=149
[    1.382623] init: tom F=ReadFstabFromDt L=674
[    1.383014] init: [libfs_mgr]ReadFstabFromDt(): failed to read fstab from dt
[    1.383578] init: tom F=ReadFstabFromDt L=674
[    1.383984] init: [libfs_mgr]tom L=474 line=# Android fstab file for ramdisk
[    1.384663] init: 
[    1.384837] init: [libfs_mgr]tom L=474 line=#<dev>  <mnt_point> <type>  <mnt_flags options> <fs_mgr_flags>
[    1.385621] init: 
[    1.385831] init: [libfs_mgr]tom L=474 line=system   /system     ext4    ro,barrier=1     wait,logical,avb=vbmeta,first_stage_mount
[    1.386947] init: 
[    1.387164] init: [libfs_mgr]tom L=474 line=vendor   /vendor     ext4    ro,barrier=1     wait,logical,first_stage_mount
[    1.388142] init: 

2. 调用流程

FirstStageMount::Create()—>ReadFirstStageFstab() ---->ReadDefaultFstab(Fstab* fstab)---->std::string GetFstabPath()

FirstStageMount::Create的定义如下:

230 std::unique_ptr<FirstStageMount> FirstStageMount::Create() {                    
231     auto fstab = ReadFirstStageFstab();                                                                                                                                                                 
232     if (IsDtVbmetaCompatible(fstab)) {                                          
233         return std::make_unique<FirstStageMountVBootV2>(std::move(fstab));      
234     } else {                                                                    
235         return std::make_unique<FirstStageMountVBootV1>(std::move(fstab));      
236     }                                                                           
237 }

ReadFirstStageFstab的定义如下:

147 static Fstab ReadFirstStageFstab() {                                            
148     Fstab fstab;                                                                
149     LOG(INFO) << "tom F="<<__FUNCTION__<<" L="<<__LINE__;                       
150     if (!ReadFstabFromDt(&fstab)) {                                             
151         if (ReadDefaultFstab(&fstab)) {                                                                                                                                                                 
152             fstab.erase(std::remove_if(fstab.begin(), fstab.end(),              
153                                        [](const auto& entry) {                  
154                                            return !entry.fs_mgr_flags.first_stage_mount;
155                                        }),                                      
156                         fstab.end());                                           
157         } else {                                                                
158             LOG(INFO) << "Failed to fstab for first stage mount";               
159         }                                                                       
160     }                                                                           
161     return fstab;                                                               
162 } 

GetFstabPath的定义如下:

448 // Identify path to fstab file. Lookup is based on pattern fstab.<hardware>,    
449 // fstab.<hardware.platform> in folders /odm/etc, vendor/etc, or /.             
450 std::string GetFstabPath() {                                                    
451     for (const char* prop : {"hardware", "hardware.platform"}) {                
452         std::string hw;                                                         
453                                                                                 
454         if (!fs_mgr_get_boot_config(prop, &hw)) continue;                       
455                                                                                 
456         for (const char* prefix : {"/odm/etc/fstab.", "/vendor/etc/fstab.", "/fstab."}) {                                                                                                               
457             std::string fstab_path = prefix + hw;                               
458             if (access(fstab_path.c_str(), F_OK) == 0) {                        
459                 return fstab_path;                                              
460             }                                                                                            
461         }                                                                                                
462     }                                                                                                    
463                                                                                                          
464     return "";                                                                                           
465 }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android应用源码安卓源码(172个合集),可以做为你的学习参考。 365MobileSecretary v1.0.6(365手机助手AIDL) 888个经典 Logo.rar AdXmpp(Openfire+asmack+spark) .zip AidlDemo(简单aidl的例子) aidl跨进程调用.rar andbatdog电池监控.rar andbatdog监视电池.rar andricoFacebook客户端.rar Android Gamex分析报告.rar Android 英语单词记忆程序源码 AndroidPdfViewerPDF查看器.zip AndroidPlayer(仿酷狗播放器).tar androidtalk_2010_11_17【Sundy系列】全看懂了-加两年经验-语音朗读-语音识别-语音.rar Android下的信息客户端 WhisperSystems-TextSecure.zip Android与js交互.rar Android中监听电话状态.rar Android之Wifi学习教程.rar Android之用PopupWindow实现弹出菜单.rar android在wifi下手机与电脑的socket通信.rar android多线程断点下载.rar Android手机一键Root原理分析.zip Android手机的VoIP客户端 Sipdroid.rar Android有未接来电后处理(判断未接来电).rar Android模仿乐淘的应用程序分析源码.zip Android游戏源码——忍者快跑.rar Android自动发送短信.rar Android自动开关机实现.rar Android视频采集+RTSP完整代码(可用) Android远程登录含有loading登录效.zip Angle v1.0_2D游戏引擎.ZIP BOOK看遍所有UI控件.7z BrewClock闹钟.zip BTAndroidWebViewSelection(webview选择文字) cellmap v2.0 基站查询定位导航系统 .rar DialogShow.rar dialog去除边框代码.rar DocumentViewer(PDF阅读器) douBanList(滚动到底部加载新的,软缓存,懒加载) Droid Wall 手机防火墙.zip FBReader修改epub快速加载.rar FiveChess五子棋.zip Flashlight灯光.zip GetSDTree(简单SD卡文件浏览器) hotel宾馆系统.zip ImageView 图片循环跑马灯的效果.rar ipcamera-for-android 手机变成IP Camera.rar jamendo-开源在线音乐.rar jchat4android手机聊天程序.rar LoginXml.rar MineSweeper由java实现.zip miniTwitter登录界面.rar MyAppWeixin(仿微信界面) MyBrowser(简单网页浏览器) Myjob3(图片剪辑功能).rar OPENG开发的示例代码.rar OpenSudoku一个简单的九宫格数独游戏.zip OssSystem(OA系统图书管理简单版).rar Phonegap+HTML5+CSS3+jQuer简单界面模板示例及源码.rar ProgressBar 几乎全部的用法.rar QQ_UI之分类菜单DEMO.zip QQ的登录界面 源代码 .zip quitesleep手机电话功能软件.rar rokon_src_2-0-3_游戏引擎.zip scientific-calculator-for-android( 功能强大的科学计算器).zip SeeJoPlayer(播放器).7z SipDroid客户端源码.rar sipdroid语音及视频通话.rar tablelogin(登陆界面).rar TankWar坦克大战.zip telecapoland-jamendo-android-6cd07fb(国外开源音乐播放器) TorProxy应用实现了Android手机无线电电传通讯(TOR).rar UI设计之 仿做蘑菇街UI设计 源码.zip ViewPager-实现左右两个屏幕的切换.rar VIEW双缓冲与SurfaceView比较.zip weibo4andriod-2011-01-14.zip WordPress for Android zirco-browser浏览器源码.rar Zirco-browser:超越海豚的开源浏览器.rar zz-doctor中医大夫助

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值