Meego系统全面解析

Meego从上电复位,bootloader执行,到kernel启动的过程不在该文包含之内,另有文章专门介绍。本文专注于kernel启动后第一个进程init的执行,系统先期初始化到桌面启动过程的分析。
  
  Meego是一款比较纯正的Linux移动OS。Kernel内的初始化线程最终退化成系统内的第一个进程init。init进程是系统内所有进程的祖先进程,也就是所有的进程都直接或者间接是这个进程的子进程或者子孙进程。
  init进程会解析/etc/inittab中的配置文件,根据该配置决定不容的初始化路线。现在介绍下这个文件的结构。
如下:
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#               Modified for moblin by Auke Kok
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault: #默认情况下系统会进入level 5也就是x11桌面,更改此处的数值就能够控制系统进入的level。不同的level系统相对于win的安全模式,受限模式等。

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit #rc.sysinit是一个系统初始化shell script,它是系统初始化的起点

l0:0:wait:/etc/rc.d/rc 0  #针对不同的runlevel会执行不同的/etc/rc.d/rc文件夹里面的初始化脚本(Meego采用Redhat类似的chkconfig系统来配置服务的启动状态,这点类似于win的msconfig)
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now #用于捕捉系统运行中的一些中断以便控制系统

# Run gettys in standard runlevels
1:235:respawn:/sbin/mingetty --noclear tty1 #根据不同的runlevel获取一个登录terminal来show登录界面
2:23:respawn:/sbin/mingetty tty2
3:23:respawn:/sbin/mingetty tty3
4:23:respawn:/sbin/mingetty tty4
5:23:respawn:/sbin/mingetty tty5
6:23:respawn:/sbin/mingetty tty6
# For debugging and testing only, should always be disabled and only enabled
# when needed
#s0:23:respawn:/sbin/agetty -L 115200 ttyS0 vt100

x1:4:once:/sbin/boot-and-install

# Run X in runlevel 5
x:5:respawn:/usr/sbin/meego-dm

以上是init进程。接下来我们看看init进程执行了哪些script以及程序。
现在我们来看看/etc/rc.d/rc.sysinit这个脚本做了些什么事情。

1)为了加速系统的启动速度(主要是提升由于磁盘io delay造成的时间浪费),一般会根据OS的启动历史(debugfs),在并未使用磁盘设备的时候开启几个thread将启动历史中的文件事先buffer到mem中,使用的时候就会速度大升,该部分的知识感兴趣的人可以自己查找学习下。

9 [ -x /sbin/sreadahead ] && /sbin/sreadahead >/dev/null 2>&1
2)我们知道kernel与userspace沟通的一个很重要的渠道就是procfs以及sysfs。由于系统早期的初始化需要很多kernel的参数以及调整kernel工作状态的途径,因此需要及时mount上来(Android中也是如此)
     11 if [ ! -e /proc/mounts ]; then
     12         mount -n -t proc /proc /proc
     13         mount -n -t sysfs /sys /sys >/dev/null 2>&1
     14 fi
3)该部分export出很多初始化函数,等会专门研究。
15 . /etc/init.d/functions
4)从prcfs中提取kernel的启动参数为初始化做准备。
     17 cmdline=$(cat /proc/cmdline)
     18 if strstr "$cmdline" quiet ; then
     19         quiet="yes"
     20 fi
     21 if strstr "$cmdline" nosplash ; then
     22         nosplash="yes"
     23 fi
5)让光标开始闪烁
     25 if [ -e /sys/devices/virtual/graphics/fbcon/cursor_blink ]; then
     26     echo 0 > /sys/devices/virtual/graphics/fbcon/cursor_blink
     27 fi
6)chvt 2切换到terminal模式下,并开启spalsh程序
     29 if [ -z "$nosplash" ]; then
     30     [ -x /usr/bin/chvt ] && /usr/bin/chvt 2
     31     [ -x /usr/bin/ply-p_w_picpath ] && /usr/bin/ply-p_w_picpath
     32 fi
7)设置接网络相关的配置
45 if [ -f /etc/sysconfig/network ]; then
     46     . /etc/sysconfig/network
     47 fi

8)如果该kernel支持usb设备,则mount usbfs
 48 if grep -q usbfs /proc/filesystems ; then
     49         mount -n -t usbfs /proc/bus/usb /proc/bus/usb
     50 fi
     51 
9)调整系统log的level。对于系统的log系统大家可以自己找些资料学习下
 if [ -n "$LOGLEVEL" ]; then
     64         /bin/dmesg -n $LOGLEVEL
     65 fi
10)建立文件标志,为后面的初始化作判断使用(该文件是空文件,仅仅作为一个标志使用)
     67 touch /dev/.in_sysinit >/dev/null 2>&1
     68 
     69 nice -n 20 /sbin/start_udev
开启udev系统,为外设的hotplug系统建立环境

70 
     71 mount -n /dev/pts >/dev/null 2>&1
     72 
     73 
     74 # Configure kernel parameters
     75 sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
根据配置文件,调整系统的运行参数,详细内容可以参考相关的man page
11)这部分code应该是作系统文件系统check之类的事情的。
     81 if [ -f /fsckoptions ]; then
     82         fsckoptions=`cat /fsckoptions`
     83 fi
     84 
     85 if [ -f /forcefsck ] || strstr "$cmdline" forcefsck ; then
     86         fsckoptions="-f $fsckoptions"
     87 elif [ -f /.autofsck ]; then
     88         [ -f /etc/sysconfig/autofsck ] && . /etc/sysconfig/autofsck
     89         if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
     90                 AUTOFSCK_OPT="$AUTOFSCK_OPT -f"
     91         fi
     92         if [ -n "$AUTOFSCK_SINGLEUSER" ]; then
     93                 echo
     94                 echo $"*** Warning -- the system did not shut down cleanly. "
     95                 echo $"*** Dropping you to a shell; the system will continue"
     96                 echo $"*** when you leave the shell."
     97                 sulogin
     98         fi
     99         fsckoptions="$AUTOFSCK_OPT $fsckoptions"
    100 fi

转载于:https://blog.51cto.com/dongyulong/476364

Meego系统全面解析相关推荐

  1. Meego系统全面解析(初始化)

    http://blog.chinaunix.net/space.php?uid=20451980&do=blog&cuid=2320277 Meego系统全面解析   Meego从上电 ...

  2. ITS智能交通监控系统技术解析

    ITS智能交通监控系统技术解析 红灯,逆行,变道 车辆抓拍和车速检测 非法停车和交通流量检测 交叉路口违法检测 发生碰撞的交叉口是智能交通管理. 机动执法 当你需要一个可以移动的系统时,会跟着你移动. ...

  3. 千万级在线推送系统架构解析

    2019独角兽企业重金招聘Python工程师标准>>> 千万级在线推送系统架构解析 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受 ...

  4. Meego系统的终结 诺基亚QT部门解散

    就在昨天刚刚曝出诺基亚宣布将裁员10000人的新闻之后,今天又有消息传出,诺基亚已经停止Meltemi系统开发,QT部门被解散,而基于此的Meego系统看来也将完结. 也许真要对Meego说再见了 Q ...

  5. SHELL常见的系统变量解析

    SHELL常见的系统变量解析 : $0 当前脚本的名称 $n 当前脚本不能的 第n个参数,n=,1,2-10 $* 当前脚本的所有参数(不包括程序本身) $# 当前脚本的参数个数不包括程序本身() $ ...

  6. 从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...

    http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...

  7. Java电商平台-电商订单系统全解析

    说明:Java电商平台-电商订单系统全解析主要讲解OMS的内容,设计,开发,架构等知识 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订单系统的解构 3.垂直电商订单系统设计思路 一. ...

  8. 诺基亚确认将推出平板电脑 拟配置MeeGo系统

    日前诺基亚公司首席执行官Stephen Elop确认了该公司正在紧锣密鼓的为首台平板电脑的发布做准备,但他没有透露该设备的细节信息.有一点可以肯定,该设备没有使用微软的Windows平台,而是一种不同 ...

  9. 哇呼IM即时通讯系统——技术解析

    哇呼IM即时通讯系统--技术解析 哇呼 哇呼"Chat"是一款包含android客户端/ios客户端/pc客户端/WEB客户端的即时通讯系统.本系统完全自主研发,服务器端源码直接部 ...

最新文章

  1. mac14.5 mojave安装错误
  2. MicroStation V8i简体中文版中文字体乱码解决办法
  3. 蓝牙调试工具如何使用_使用此有价值的工具改进您的蓝牙项目:第2部分!
  4. python中表达式4**0.5的值为_Python内置函数__用来返回序列中的最小元素
  5. akka balance router的实现
  6. 最小栈设计并实现一个minstack类_栈相关
  7. mysql ddl 进度_MySQL DDL详情揭露
  8. 从青铜到王者,来聊聊 Synchronized 底层实现原理 | 原力计划
  9. WMI-Win32_BIOS 参数说明
  10. C#实现上位机与PLC通信
  11. (西工程-金花)小米路由器连接哆点设置WiFi保姆式教程
  12. 做一个简单网页(做一个简单网页多少钱)
  13. 【python】把某一列从文本转换成数值
  14. 当在浏览器地址栏输入一个URL后回车,将会发生的事情?
  15. Flash鼠绘入门第十一课:可爱瓢虫的绘制-Flash鼠绘可爱瓢虫3
  16. 对于脚本木马的免杀(特别针对安全狗的V3.0)的经验副过狗菜刀
  17. 初中信息技术计算机课件,初中信息技术说课课件
  18. autofac 作用域_.Net Core3.1下使用Autofac实现依赖注入
  19. 文件IO中read()函数读取输出字符串有乱码
  20. 学生管理系统中遇到的问题

热门文章

  1. 沐神动手深度学习 06线性回归从0开始实现
  2. 在日本生活是什么体验
  3. 浏览器趋势2016年4月:三星的浪潮
  4. http-server : 无法加载文件 C:\Users\mes\AppData\Roaming\npm\http-server.ps1,因为在此系统上禁止运行脚本。有关详细信息, 请参阅 http
  5. Python 字典Dictionary详解
  6. SQL错误(1366):Incorrect String Value
  7. FME2012世界之旅——实时博客
  8. 超图 iDesktop 加载天地图
  9. java+天地图,天地图开发之Android-天地图显示
  10. iTunes备份到电脑F盘