http://blog.chinaunix.net/space.php?uid=20451980&do=blog&cuid=2320277

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-image ] && /usr/bin/ply-image
     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

Meego系统全面解析(初始化)相关推荐

  1. Meego系统全面解析

    Meego系统全面解析 Meego从上电复位,bootloader执行,到kernel启动的过程不在该文包含之内,另有文章专门介绍.本文专注于kernel启动后第一个进程init的执行,系统先期初始化 ...

  2. 类加载过程(加载+验证+准备+解析+初始化)

    2019独角兽企业重金招聘Python工程师标准>>> JVM把class文件加载的内存,并对数据进行校验.转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机 ...

  3. Trembling ! Java类的加载过程详解(加载验证准备解析初始化使用卸载)

    [1]类的生命周期 一个类从加载进内存到卸载出内存为止,一共经历7个阶段: 加载->验证->准备->解析->初始化->使用->卸载 其中,类加载包括5个阶段: 加载 ...

  4. virtualbox安装linux黑屏,VirtualBox安装MeeGo系统黑屏问题处理

    VirtualBox安装MeeGo系统具体过程与VirtualBox虚拟机安装MeeGo车载系统图文教程相同,请查看相关文档,本文主要为了大家解决大家在安装完系统之后出现黑屏无法进入系统的问题. 这个 ...

  5. Linux2.6 Slab系统机制解析(一)slab系统理论

    一.Slab系统理论 1.1 slab系统结构 1.2 slab精细结构 1.3 slab染色与硬件cache对齐 1.4 cache本地缓存机制 1.5 slab系统数据结构字段注释 1.5.1 c ...

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

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

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

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

  8. 此时无法停用连接。这个连接可能在用一个或多个不支持即插即用的协议,或者它是由其他用户或系统帐户初始化的。...

    在电脑桌面右下角结束本地连接时无法结束,并且报错"此时无法停用连接.这个连接可能在用一个或多个不支持即插即用的协议,或者它是由其他用户或系统帐户初始化的."的最新终极解决方法.如下 ...

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

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

最新文章

  1. java两人猜数字游戏,java之猜数字游戏
  2. 大工20春计算机原理在线作业二,大工20春《计算机原理》在线作业【答案满分】...
  3. Linux系统中的load average
  4. 学妹问我,并发问题的根源到底是什么?
  5. Spring Boot 前后端分离解决跨越问题
  6. 大数据之-Hadoop完全分布式_集群时间同步---大数据之hadoop工作笔记0043
  7. 【测试工具】工具整理
  8. java web 编程技术 答案_《javaweb编程技术》课后习题答案.docx
  9. linux gt240驱动下载,支持GT540M NVIDIA新款Linux显卡驱动
  10. 北京机动车和自住房摇号查询
  11. 在Windows 10中打开PowerShell的9种方法
  12. yarn application -kill application_id yarn kill 超时任务脚本
  13. sqllabs详解与知识点汇总(内含代码审计)
  14. 用java下载apk解析包出错_教大家解析包时出现问题怎么解决
  15. mac 电脑使用小鹤音形和小鹤双拼
  16. 新一轮勒索病毒变种全球肆虐 中国已遭攻击
  17. HT366 具有防破音功能的2×20W立体声D类音频功放IC
  18. iGuard简单突破
  19. 浏览器拍照功能(Vue+ElementUI组件)
  20. 5V开关电路应用设计

热门文章

  1. 全站 HTTPS 来了
  2. mysql报ascii 0_导入mysql文件提示“ASCII '\0' appeared in the statement”
  3. VS2019 MFC 对话框拆分窗格
  4. 华硕ax56u刷机_华硕WiFi6家用路由RT-AX56U初体验
  5. 三种IP核总线接口比较分析
  6. 输掉战役赢战争(博弈论的诡计)
  7. hdu 3944 数学组合+帕斯卡定理
  8. android仿摩拜贴纸碰撞|气泡碰撞
  9. 怎么区分单线双线BGP线路的服务器?
  10. Android UI Layout 之 AbsoluteLayout