支持HW团队,就支付宝领取下面的红包吧! (打开支付宝就能领取!er1OEj73Uj), (打开支付宝收索“516503473”), 你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

Login or Sign up | Validate
| Search

博主:初学MPEG

初学MPEG 本博客-采用Python的web框架Django与Mysql数据库,致力于对Python、Django的了解 与研究
Django技术QQ群:XXXXXXX
Python技术QQ群:XXXXXXX

Category

Keywords

本站最新博文

友情链接  

[转]Linux环境变量rootdelay=1

类别:linux 状态:6,可回,会员可关联(良好) 阅读:5339 评论:0 时间:March 5, 2012, 3:50 p.m.
关键字:

 这个礼拜在研究一个问题:将linux内核裁剪到一定程度后,mount root fail并且系统crash。我的环境变量设置是以SD卡作为rootfs的,跟踪后发现在系统开始做mount root的时候,SD卡还没有被bind。初步分析认为是SD卡的初始化和系统的mount root是在两个不同的线程中进行的,因为内核被裁剪后,很多功能模块都被remove或者disable掉了,从而系统的主线程运行完毕需要的时间变少。而SD卡的初始化是在启动过程的最后几步进行的,而且和硬件通讯所需的时间比较长。这就造成了在主线程已经跑完的时候SD卡还没有ready.

 

问题确定了,如何解决呢?开始我试图在主线程mount root的函数里加一些delay,但是无效,只好试图跟踪出是哪里的数据结构不对造成系统找不到root。经过3天辛苦的深挖,终于发现是prepare_namespace()里面mount root fail。同时也发现这个function里面有个全局变量root_delay。在这个函数被调用时会先做delay root_delay秒。然后又查找了一下这个变量被赋值的地方,发现是通过bootargs环境变量传入的。在bootargs里面加上rootdelay=1之后,系统就能够正常的mount root了。

 

查了整整3天,最后就加了这么个参数,没改任何代码。程序员的生命真是很浪费啊~Linux环境变量rootdelay=1

操作:

Please Login (or Sign Up) to leave a comment