• 【原创】Windows® Embedded CE 6.0 Fundamentals 读书笔记_Chapter 7


    Chapter 7
    这一章主要介绍操作系统的启动流程,相对前面几章理解上稍微简单一些。
    首先还是一些单词
    //============单词==============
    components
    manufacturer
    presence
    preliminary
    preparation
    implementation
    prepare
    table of contents (TOC)
    validates
    separated out
    appropriate
    attempts
    determined
    //============简单翻译============
    组件
    制造商
    存在
    初步
    准备
    执行
    准备
    目录表(TOC)
    验证
    分离出来
    适当
    尝试
    确定

    Chapter7 系统启动
    对驱动开发完成后我们可以编译出一套属于自己的WinCE操作系统,那操作系统是如何启动的呢,这一章对这个问题进行了描述。
    这一章分为四个步骤,准备镜像,启动处理,加载文件系统,加载驱动管理。下面我们逐一来看。

    第一节准备镜像


    首先提出的就是系统镜像的构建,一个系统镜像构建需要做以下的一些准备,首先需要做好配置文件,也就是为镜像的运行预备好 空间,其次要建立一套镜像内容的目录表,最后通过目录表指针来运行NK。NK在wince的镜像中是一个非常重要的部分,当bootloader完成对系统的启动后就会转入NK的执行,bootloader其主要的任务就是将处理器进入预处理状态,并初始化底层的硬件设备,例如初始化内存控制,平台soc初始化等,完成这些任务后进入NKStartup。进入内核后会做一系列的动作。具体大家可以参考下文章列出的一些实例。对系统的整体启动的运作有个认识。大概的顺序为,初始化NK全局结构体,中间调用OEMInitGlobals函数,完成后会返回NK全局结构体,并初始化一些动态库以及Kitl,完成后进入ARMSetup()(MIPS的进入MIPSSetup()),如果kitl在镜像中,会先加载Kitl的入口点,完成后开放OEMInitDebugSerial() ,通过这个函数可以通过串口查看调试,当整体系统平台初始化完成后执行OEMInit() ,完成后执行 KernelFindMemory(),通过armtrap.s调用KernelStart(),通过KernelStart()来启动,完成后执行KernelInit()。

    第二节启动处理
    接着上面一节提出的一个流程,我们简化一下,StartUp() – KernelStart()/KernelInitialize() – NKStartup() (<Kernel Entry>()),按照这个顺序我们再仔细来看看具体的处理过程,大家可以自己阅读图7-1System startup process StartUp()- ><KernelEntry>,这里大家需要去看看schedule.c这个文件,这里列出了一些函数的调用顺序,在内核的调用是一个比较复杂的过程,整个启动过程也可以看作KernelInit()->SystemStartupFunc()->RunApps(),其中的函数调用大家可以参考图7-2。

    第三节文件系统加载
    首先我们再来回顾下文件系统是什么,文件系统模式大家可以看看第六章151页,文件系统驱动的概念,其功能是预定义一些函数以及IOCTL控制。当系统冷启动需要加载,文件系统加载首先会对自己进行一个内存地址初始化,并将自身初始化,接下来对应用程序API接口进行一个初始化,设置文件系统自身的一些API,数据库,点对点的消息队列,事件日志,注册表。接下来对注册表数据进行初始化,总体说来,一个系统部分的加载就是其自身以及相关功能初始化的过程。完成文件系统初始化后,系统将完全运行,图7-3对系统启动中文件系统启动进行了描述。

    第四节
    关于设备管理加载就更好理解,通过以上几个部分的准备,设备管理将会按照以上初始化中生成的一些信息以及注册表信息对设备进行逐一的初始化工作。特别主要的依据是注册表,文中给出了一段注册表的实例,具体的意义大家可以回到第六章157页表6-3再回顾一下。最后举两个例子,例如我们想在系统启动时将系统的一些属性隐藏,想对系统的音量进行设定等都可以通过注册表修改,因为当执 行到设备管理加载的时候,注册表会作为一个准备的依据,比如,我们想在开机的时候把WINCE的开始和任务栏给隐藏,我们就可以 使用以下一段注册表来实现。

    ;===========auto bar==============
    ;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell\AutoHide]
    ;    "Default"=dword:1
    ;[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop]
    ;    "Default"=dword:0
    ;[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\SlideTaskBar]
    ;    "Default"=dword:0
    ;===================================

    这一张内容虽然少,但是都是非常重要的部分,对系统运行的理解有一个很重要的引导作用,大家需要仔细的结合上面几章再阅读一下。

    第七章学习完毕

  • 相关阅读:
    014.Nginx跨域配置
    013.Nginx动静分离
    附002.Nginx代理相关模块解析
    附001.Nginx location语法规则
    016.Nginx HTTPS
    015.Nginx重定向
    Blazor带我重玩前端(四)
    数据结构中的树(二叉树、二叉搜索树、AVL树)
    Flask前后端分离项目案例
    LeetCode-位运算相关题解
  • 原文地址:https://www.cnblogs.com/mercuryxu/p/1611886.html
Copyright © 2020-2023  润新知