AndroidL系统启动及加载流程分析

AndroidL系统启动及加载流程分析
AndroidL系统启动及加载流程分析

Android L系统启动及加载流程分析

1、概述

Android L的启动可以分为几个步骤:Linux内核启动、init进程启动、native系统服务及java系统服务启动、Home启动,主要过程如下图:

图1

整个启动流程跟4.4及之前的版本相差不多,只是有个别不同之处,本文我们主要分析Linux内核启动之后的过程。

2、启动过程分析

2.1 init进程启动

当系统内核加载完成之后,会启动init守护进程,它是内核启动的第一个用户级进程,是Android的一个进程,进程号为1,init进程启动后执行入口函数main(),主要操作为:

图2

AndroidL上将selinux的安全等级提高了,设为了enforcing模式,4.4上是permissive模式。

解析rc脚本文件,即init.rc脚本,该文件是Android初始化脚本,定义了一系列的动作和执行这些动作的时间阶段e aryl-init、init、early-boot、boot、post-fs等阶段。init进程main 函数中会根据这些阶段进行解析执行。AndroidL上为了流程更清晰,增加了charger(充电开机)、ffbm(工厂模式)、以及late-init阶段,实际上这些阶段是对其他阶段的组合执行,比如late-init:

2.2 ServiceManager的启动

servicemanager的启动就是init进程通过init.rc脚本启动的:

源码在frameworks/native/cmds/servicemanager/service_manager.c中,servicemanager是服务管理器,它本身也是一个服务(handle=0),通过binder调用,为native和Java系统服务提供注册和查询服务的,即某个服务启动后,需要将自己注册到servicemanager中,供其他服务或者应用查询使用。AndroidL上servicemanger中在处理注册和查询动作之前添加了selinux安全检测相关的处理。

2.3 SurfaceFinger、MediaServer进程启动

Android4.4以前,surfacefinger的启动根据属性system_init.startsurfaceflinger,决定是通过init.rc启动还是systemserver进程启动,之后的版本包括AndoridL都是通过init.rc启动的:

启动后会向servicemanager进程注册服务中,该服务启动时主要功能是初始化整个显

示系统,并且在初始化完成后,启动开机动画进程:

当开机过程完成点亮屏幕之前,WindowManagerService通过binder通信通知SurfaceFinger停止开机动画,SurfaceFinger服务会调用bootFinished函数设置service.bootanim.exit属性,开机动画进程bootanim判断该属性为1后,停止播放开机动画。

MediaServer也是init启动较早的一个服务进程:

对应代码在frameworks/av/media/mediaserver/main_mediaserver.cpp,该服务启动时会创建一些音频、camera相关的native服务,这些native服务也会注册到servicemanager中。在播放开机动画时如果需要播放开机音,bootanim需要等待mediaserver初始化完成才会播放

音乐。

2.4 Zygote启动

Zygote是系统中最重要的服务,在开机过程中zygote进程创建之后系统才进入了java 环境,进入了Android环境,另一方面zygote是通过socket接收AMS发送的请求,fork新的应用程序、启动其他的java系统服务。

init进程通过init.${ro.zygote}.rc启动zygote:

AndroidL是64位系统,可以支持两个zygote进程,比以前的版本增加了一个zygote,如果芯片是64位的话,ro.zygote属性为zygote64_32,init则通过init.zygote64_32.rc启动zygote,该rc文件中定义了以下两个zygote服务:

分别通过app_process64,app_process32两个app_process进程来启动zygote、zygote_secondary,其中zygote为primary zygote,进程名为zygote64,会负责创建systemserver 进程,一般系统服务进程都是由zygote64进程fork出来,其他应用进程由另外一个zygote fork。

源码在frameworks/base/cmds/app_process/app_main.cpp。

该服务启动时的主要工作是创建AndroidRuntime、registerZygoteSocket创建socket端口、preload加载类和资源、创建Systemserver进程,下面根据处理的顺序进行逐步解析。

2.4.1 AndroidRuntime创建

AndroidRuntime是android的运行环境(ART),在app_main.cpp中通过

runtime.start("com.android.internal.os.ZygoteInit", args)启动AndroidRuntime。

源码在/frameworks/base/core/jni/AndroidRuntime.cpp

AndroidRuntime启动后会创建虚拟机:

Android4.4上还是默认使用Dalvik虚拟机,在开发者选项中兼容ART模式,AndroidL 上完全采用了ART,加载libart.so。

startVm( )函数,首先会完成虚拟机很多资源的分配,然后初始化ART相关的option、调用JNI_CreateJavaVM()创建ART虚拟机。

由于Dalvik VM的效率不高,在android4.4开始,google就开发了AndroidRuntime即android运行环境。Dalvik虚拟机下,应用每次运行都要将字节码转成机器码,ART不同,应用第一次安装的时候,通过dex2oat字节码就会转成机器码,并保存起来,理论上应用启动时会更快。(但是之前陈翔工针对ART和Dalvik作过对比测试,从对比数据上看,ART 下应用的启动速度提高没有很明显,而且由于安装时的dex2oat过程,导致应用的安装和系统的启动速度会较慢,可能后期的版本androidL有优化。)

2.4.2 registerZygoteSocket

AndroidRuntime启动完虚拟机之后,会创建的第一个虚拟机java进程就是ZygoteInit进程,这个ZygoteInit进程可以理解成真正的zygote,在zygoteInit的main函数中首先就是调用registerZygoteSocket(“zygote”),注册一个LocalServerSocket类型的Socket通道,变量命名为sServerSocket,作为Socket的服务端。当SystemServer进程创建后,在SystemServer 进程中则会创建一个Socket客户端LocalSocket,具体实现在Process.java中。

这样就创建了一个zygote和SystemServer进程的socket通信通道,所谓zygote是应用孵化器,就是利用该Socket 创建其他的应用进程。

当服务端LocalServerSocket端口准备好后,ZygoteInit的main()函数调用runSelectLoop ()进入非阻塞读操作循环,通过selectReadable()将文件描述符添加到select的列表中,如果有请求就调用ZygoteConnection类的runOnce()函数处理每一个Socket接收到的命令。

当要创建新应用时,客户端SystemServer进程中ActivityManagerService通过startActivity()一步步调用到的StartProcessLocked()函数进入Process.java,最终通过startViaZygote ->zygoteSendArgsAndGetPid,通过LocalSocket发给zygote进程,zygote在通过runOnce函数fork新进程。

2.4.3 preload预加载类和资源

创建完socket之后,zygote进程开始调用preload()函数加载类和资源等信息。

这个过程会预装的Framework大部分类及资源。preloadClasses()加载的类列表是在framework.jar中的一个文本文件列表,名称为preload-classes,该列表的原始定义在frameworks/base/preload-classes文本文件中,该文件是通过

frameworks/base/tools/preload/WritePreloadedClassFile.java类自动生成的。在Android源码编译的时候,会最终把preload-classes文件打包到framework.jar中。

预加载的资源是在frameworks/base/core/res/res/values/arrays.xml中被定义的,包含两类资源,一类是drawable资源,另一类是color资源,preloadResources()通过分别调用preloadDrawables()和preloadColorStateLists()加载这两类资源。

preloadSharedLibraries()函数加载链接库。

2.4.4 SystemServer进程创建

Zygote进程加载完类和资源后,如果需要创建SystemServer(zygote64)则通过startSystemServer()->Zygote.forkSystemServer创建SystemServer进程,SystemServer进程几乎是所有java系统服务的守护进程。

SystemServer启动后首先加载libandroid_servers.so并调用nativeInit()进行初始化,之后就要启动Android的java系统服务Power Manager、Activity Manager、PackageManager、

WindowManager等服务,在AndroidL之前的版本在这里将会创建一个ServerThread线程,由ServerThread线程启动这些Android Java 的关键服务。而AndroidL上没有ServerThread 线程,而是创建了一个SystemServiceManager服务来启动管理这些系统服务,并且将系统服务区分为Bootstrap服务、Core服务、Other服务,分别启动这些服务:

Installer、ActivityMangerService、PowerManagerService、DisplayManagerSerivce和PackageManagerServcie作为Bootstrap服务启动,LightsService、BatteryService、UsageStatsService、WebViewUpdateService服务作为第二阶段在startCoreServices()函数执行,其余的服务的启动和systemReady的处理在startOtherServices()中。

在系统启动过程中,有些服务需要等待其他条件或者其他服务初始化完成之后再启动,AndroidL中的处理跟之前的版本也有不同,之前的版本上是直接调用waitForxxx() 函数等待响应的服务处理,而L上将系统的启动分为几个阶段:

通过调用SystemServiceManager类中的startBootPhase(final int phase)

设置启动阶段:

例如启动应用管理服务PackageMangerService之前,需要等待DisplayManagerSerivce 初始化完成,在DisplayManagerSerivce服务启动后,调用mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISP LAY) 等待DisplayManagerSerivce响应了onBootPhase()之后再启动PackageMangerService 扫描安装应用。

ActivityManagerService、WindowManagerService、PackageManagerService等服务,每个服务的功能都很复杂,对这些java系统服务的具体启动和功能不在这里详细说明了,简单说下PackageMangerService服务,它是应用管理服务,负责应用的扫描、安装、卸载、查询等管理功能,开机启动过程中会扫描安装system/app、system/priv-app、data/app等目录下的系统和非系统应用。

2.5 Home及锁屏启动

系统启动成功后SystemServer通过xxx.systemReady( )通知各个服务,Home就是在ActivityManagerService.systemReady( )通知的过程中创建的,调用startHomeActivityLocked( )查询启动HomeStack中的第一个Activity,Launcher。

在wm.systemReady( )通知WindowManagerService,进而调用PhoneWindowManager,通知SurfaceFinger停止开机动画播放,最终通过LockPatternKeyguardView显示解锁界面。

系统启动完成。

WindowsXP启动过程概述

WindowsXP启动过程概述 从按下计算机开关启动计算机,到登入到桌面完成启动,一共经过了以下几个阶段: 1. 预引导(Pre-Boot)阶段; 2. 引导阶段; 3. 加载内核阶段; 4. 初始化内核阶段; 5. 登陆。 每个启动阶段的详细介绍 a) 预引导阶段 在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test (POST),POST检测系统的总内存以及其他硬件设备的现状。如果计算机系统的BIOS(基础输入输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。计算机的基础输入输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。在预引导阶段,计算机要加载Windows XP的NTLDR文件。 b) 引导阶段 Windows XP Professional引导阶段包含4个小的阶段。 首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR 将计算机微处理器从实模式转换为32位平面内存模式。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。 接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。(至于操作系统选单,由于暂时条件不够,没办法截图,但是笔者模拟了一个,见图一。) 在boot.ini中,主要包含以下内容: [boot loader]

操作系统的启动实验报告

操作系统实验报告 工程大学 计算机科学与技术学院

一.实验概述 1.实验名称:操作系统的启动 2.实验目的: 1)跟踪调试EOS在PC机上从加电复位到成功后启动的全过程,了解操作系统的启动过程; 2)查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。 3.实验类型:验证,设计 4.实验容: 1)准备实验,启动OS Lab,新建一个EOS Kernel项目; 2)调试EOS操作系统的启动过程 ①使用Bochs作为远程目标机 ②调试BIOS程序 ③调试软盘引导扇区程序 ④调试加载程序 ⑤调试核 ⑥查看EOS启动后的状态和行为 二.实验环境 操作系统:windows XP 编译器:Tevalaton OS Lab 语言:C++ 三.实验过程 1.设计思路和流程图: 2.实验过程:

1)在Console窗口中输入调试指令sreg,查看当前CPU中各个段寄存器的值,其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000。 2)输入调试命令r,显示当前CPU中各个通用寄存器的值,“rip: 0x00000000:0000fff0”表示 IP 寄存器的值为 0xfff0。 3)输入调试命令 xp /1024b 0x0000,查看开始的 1024 个字节的物理存。在Console 中输出的这 1K 物理存的值都为 0,说明 BIOS 中断向量表还没有被加载到此处。 4)输入调试命令 xp /512b 0x7c00,查看软盘引导扇区应该被加载到的存位置。输出的存值都为 0,说明软盘引导扇区还没有被加载到此处。 可以验证 BIOS 第一条指令所在逻辑地址中的段地址CS寄存器值是一致的,偏移地址和 IP 寄存器的值是一致的。由于存还没有被使用,所以其中的值都为0。 5)输入调试命令 vb 0x0000:0x7c00,这样就在逻辑地址 0x0000:0x7c00(相当于物理地址 0x7c00)处添加了一个断点。输入调试命令 c 继续执行,在 0x7c00 处的断点中断。中断后会在 Console 窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令。 6)输入调试命令 sreg 验证 CS 寄存器(0x0000)的值。

Z-Turn Board U-Boot启动流程 zynq

Z-Turn Board使用Xilinx的Zynq 7000系列芯片,即Zynq-7000 Extensible Processing Platform,是一个可扩展处理平台,简单说就是有个FPGA做外设的A9双核处理器。 所以,它的启动流程自然也和FPGA完全不同,而与传统的ARM处理器类似。 Zynq7000支持多种设备启动,包括Jtag、NAND、parallel NOR、Serial NOR (Quad-SPI)以及SD 卡。按手册说明除了Jtag之外的启动方式均支持安全启动,使用AES、SHA256加密后的启动代码(不过在勘误里说到,当前硅片版本的无法正常使用secure configuration功能,所以俺就不介绍它鸟) 还是按照时间顺序来介绍下具体流程吧 1、在器件上电运行后,处理器自动开始Stage-0 Boot,也就是执行片内BootROM中的代码。 2、BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码:FSBL (First Stage Bootloader)。 不过这又有一个问题了,之前说到,Zynq支持多种启动设备,BootROM怎么知道从哪个启动设备里去加载FSBL?这就得靠几个特殊的MIO引脚来选择了,具体见下图。 BootROM会去读取MIO[2..8],从而确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM中,并将控制器交给FSBL。 3、FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由咱自己控制了。Xilinx提供了一份FSBL代码,如果没什么特殊要求,可以直接使用。按照手册说明,FSBL应该完成以下几件事。 使用XPS提供的代码,继续初始化PS(ARM)。 将bitstream写入PL(配置FPGA),不过这一步也可以以后再做。 将接下来启动用的Second Stage Bootloader(SSBL,一般就是U-Boot一类的东西),或者裸奔程序,复制到内存中 跳到SSBL运行去 4、接下来的步骤就没啥特别了,U-boot开始运行,初始化好Linux启动环境,然后开始运行Linux系统。 双核处理器, Board, 程序, 加密, 上电

WINDOWS操作系统启动过程详解

WINDOWS操作系统启动过程详解 基本上,操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。 预引导阶段: 当我们打开计算机电源后,预引导过程就开始运行了。在这个过程中,计算机硬件首先要完成通电自检(Power-On Self Test,POST),这一步主要会对计算机中安装的处理器、内存等硬件进行检测,如果一切正常,则会继续下面的过程。 如果计算机BIOS是支持即插即用的(基本上,现阶段能够买到的计算机和硬件都是支持这一标准的),而且所有硬件设备都已经被自动识别和配置,接下来计算机将会定位引导设备(例如第一块硬盘,设备的引导顺序可以在计算机的BIOS设置中修改),然后从引导设备中读取并运行主引导记录(Master Boot Record,MBR)。至此,预引导阶段成功完成。 引导阶段: 引导阶段又可以分为:初始化引导载入程序、操作系统选择、硬件检测、硬件配置文件选择这四个步骤。在这一过程中需要使用的文件包括:Ntldr、Boot.ini、https://www.360docs.net/doc/411507897.html,、Ntoskrnl.exe、Ntbootdd.sys、Bootsect.dos(非必须)。 初始化引导载入程序: 在这一阶段,首先出场的是ntldr,该程序会将处理器由实模式(Real Mode)切换为32位平坦内存模式(32-bit Flat Memory Mode)。不使用实模式的主要?因是,在实模式下,内存中的前640KB是为MS-DOS保留的,而剩余内存则会被当作扩展内存使用,这样Windows XP将无法使用全部的物理内存。而32位平坦内存模式下就好多了,Windows XP自身将能使用计算机上安装的所有内存(其实最多也只能用2GB,这是32位操作系统的设计缺陷)。 接下来ntldr会寻找系统自带的一个微型的文件系统驱动。大家都知道,DOS和Windows 9x操作系统是无法读写NTFS文件系统分区的,那么Windows XP的安装程序为什么可以读写NTFS分区?其实这就是微型文件系统驱动的功劳了。只有在载入了这个驱动之后,ntldr 才能找到硬盘上被格式化为NTFS或者FAT/FAT32文件系统的分区。如果这个驱动损坏了,就算硬盘上已有分区,ntldr也认不出来。 读取了文件系统驱动,并成功找到硬盘上的分区后,引导载入程序的初始化过程就已?完成了,随后我们将会进行下一步。 操作系统选择: 这一步并非必须,只有在计算机中安装了多个Windows操作系统的时候才会出现。不过无论计算机中安装了几个Windows,计算机启动的过程中,这一步都会按照设计运行一遍,但只有在确实安装了多个系统的时候,系统才会显示一个列表,让你选择想要引导的系统。 如果已经安装了多个Windows操作系统,那么所有的记录都会被保存在系统盘根目录下一个名为boot.ini的文件中。ntldr程序在完成了初始化工作之后就会从硬盘上读取boot.ini 文件,并根据其中的内容判断计算机上安装了几个Windows,它们分别安装在第几块硬盘的第几个分区上。如果只安装了一个,那么就直接跳过这一步。但如果安装了多个,那么ntldr就会根据文件中的记录显示一个操作系统选择列表,并默认持续30秒。如果你没有选

zynq的启动方式

Zynq-7000AP SOC器件有效利用了片上CPU来帮忙配置。在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。 ZYNQ的两种启动模式:从BootROM主动启动,从JTAG被动启动。 ZYNQ的启动配置分多级进行的。配置至少需要两步,但通常按如下三个阶段进行: 阶段0:该阶段简称为BootROM,控制着整个芯片的初始化过程。放在BootROM中的代码是固化的,不可修改的,处理器核在上电或者热启动时自动执行这部分代码。 阶段1:该阶段的启动加载器(FSBL)也可以由用户代码控制。 阶段2:这阶段通常可以是用户的PS端的设计代码,当然也可以是第二阶段的启动加载器(SSBL),这个阶段可以完全由用户控制,是可选的。 ZYNQ外部启动条件: 1、电源要求:在阶段0 BootROM状态时,PS与PL的电源要求如表所示: 在阶段1 FSBL时,PS与PL都是必须上电的,因为PL将在这个阶段进行配置,而PS将负责配置的过程。 2、时钟要求:必须满足时钟 3、复位要求:主要有两个外部复位源将影响BootROM的执行。(电源复位信号,系统复位 信号) 4、启动引脚设置:需要配置好引脚才能正确启动平台。 BootROM 1、BootROM的作用:上电复位以后,PS端即开始进行配置。在不使用JTAG的情况下,ARM 将在片上的BootROM中开始执行代码。BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,使得ARM核可以访问、使用这些外设。而DDR等其他外设将在阶段1或者之后进行初始化。BootROM中的代码还负责加载阶段1的启动镜像。 PS的启动源是由外部模式引脚的高低电平来选择的,也就是指BootROM将根据外部配置引脚的设置来从不同的外部存储中加载阶段1的启动镜像,当然也支持在线性Flash 上直接运行。 需要注意的是PL的配置并不在BootROM中完成,BootROM只为配置PL做好准备。 FSBL 1、FSBL是在BootROM之后启动的引导程序。由BootROM加载到OCM或者直接在线性Flash 上运行。FSBL主要完成以下工作: 1)根据XPS中的配置,完成PS端的初始化。 2)使用比特流文件对PL进行配置 3)加载第二阶段引导程序(SSBL)或者裸跑程序(直接在ARM上运行无操作系统程序)到内存空间。 4)跳转执行SSBL或者裸跑程序。 注意:FSBL在跳转到SSBL或者裸跑程序前,并不使能MMU。这是因为许多操作系统,

Zynq学习笔记(基本设计流程)

Zynq学习笔记(基本设计流程) Zynq Standalone training 1.从“所有程序\xilinxDesign Tools\Vivado 2013.2\启动Vivado2013.2,创建新工程: LED_Controller,RTL Project,verilog,选择part:family:Zynq-7000;package:clg484. (XC7Z020-1CLG484C) 2.点击Flow Navigator/IP Integrator/Create Block Design,建立一个Zynq的框图设计。设计 名为System 3.在框图的上方处,点击Add IP,(可以在Search中加7过滤),选ZYNQ7 Processing System; 4.双击ZYNQ7 Processing System IP模块,打开PS的配置窗口。 ●配置PS的bank电平,bank0:LVCMOS3.3V,bank1:LVCMOS1.8V ●打开Memory Interfaces,配置QSPI。1-6,8(Feedback Clk)。点“+”可以看配置后 的各个参数。 ●点击I/O Peripherals,配置UART1:MIO48..49,Baud Rate配置在PS-PL Configuratin中。 ●勾选USB0,28-39 ●勾选Ethernet0,改EMIO为MIO :16-27,打开“+”,勾选MDIO:52-53 ●添加SD 0 40-45, CD:47, WP:46 ●点开GPIO,勾选GPIO MIO,设置MIO的Direction:50-51为输入,MIO7只能是输 出,其余为输入输出。若看不到,就向右拉移动条。 5.配置PS时钟:CLKIN=33.3333(常用的)。CPU=66 6.6666;DDR_CLK=533.333. CPU Clock Ratio=6:2:1,均为默认值。 设置外设时钟。 QSPI的模块内部有一个2分配的电路,应此想设置他的工作频率为100M,就需要将输入时钟设为200MHz。 SDIO(即SD卡的时钟),设为50MHz。 Ether0:1000MHz。 PL时钟:勾选FCLK_CLK0时钟并设置相应的时钟:100MHz。 6.配置DDR。Enable DDR(打勾)。DDR3, MT41J128M16HA-15E,32BIT(两片拼 接而成), Internal Vref打勾;填写Train/Board Detail,两种方式:一用户直接写;二通过计算。选择“计算”方式,然后点OK,填写各组信号线在PCB 板上的实际长度和Package的数值,相应的Delay参数就计算好了。

计算机启动过程

计算机启动过程 讲课教师:黄小龙 计算机启动过程总体分为两个过程,即硬件启动过程和操作系统启动过程。本课中操作系统我们仅选用Windows XP 的启动过程讲解。 一、硬件启动过程 ⑴加电 按下电源开关后,电源就开始向主板和其它设备供电,此时电压还不稳定, 主板上的控制芯片组会向CPU 发出并保持一个RESET(重置)信号,让CPU 初始化。当电源开始稳定供电后,芯片组便撤去RESET 信号(如果是按下Reset 按钮来重启,那么松开该按钮时芯片组就会撤去RESET 信号)。然后,CPU 马上就从地址FFFF0H 处开始执行指令(这是BIOS 的起始地址),但放在这里的只是一条跳转指令,跳到系统真正的BIOS 启动代码处,由BIOS 的代码进行下一步的POST 自检。 ⑵BIOS 进行post

POST就是加电自检,它是Power On Sel f Test的缩写。它是检查一些关键设备是否存在和能否正常工作,如内存和显卡等。如果发现错误,则通过喇叭发声来报告错误情况,此时的声音长短和次数代表了错误类型。 注:由于POST的检测过程在显示卡初始化之前,因此POST 自检过程发现的错误是无法在屏幕上显示出来的。 ⑶BIOS检测硬件的各种信息 BIOS进行加电自检后,就开始检测计算机上硬件设备的各种信息,如设备类型、工作频率、芯片组型号、出厂厂商等。这阶段的硬件检测顺序是:显示卡、CPU、内存、其它标准硬件设备(如硬盘、光驱、软驱、外设等)。 ⑷BIOS更新ESCD 按下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数据被存放在CMOS之中。通常ESCD数据只在系统硬件配置发生改变后才会进行更新,因此不是每次启动都能看到"Update ESCD... Success"这样的信息。不过,某些主板的BIOS在保存ESCD数据时使用了与Windows 9x 不相同的数据格式,于是Windows 9x在每一次启动都会把ESCD 数据转换成自己的格式,导致BIOS每次重新启动时都认为是硬件配置发生变化,并重新改写ESCD数据,这就是为什么有的计算机在每次启动时都会显示"Update ESCD... Success"信息的原因。

ZYNQ的启动原理和配置

ZYNQ的启动原理和配置 启动过程 设备配置包含用于初始化和配置ps和pl的所有方法及过程。在软件控制下,ps内的DevC 提供用于初始化和配置ps和pl的手段和方法,在zynq中提供两个模块用于控制配置过程:BootROM,一个静态存储块器块,当上电复位和暖复位后,有Cortex-A9的CPU执行这个内置程序; 设备配置单元:用于控制JTAG调试访问和提供连接到AES、HMAC和PCAP模块的接口,用于实现对芯片内的pl的配置及数据的解密。 在ps的控制下,可以实现安全或非安全的配置所有ps和pl。通过zynq提供的JTAG接口,用户可以在外部主机的控制下对zynq进行配置,zynq不支持最开始就配置pl的过程。对zynq的配置过程至少包含两个阶段,但是通常要求3个阶段。 阶段0:该阶段也称为BootROM,该阶段控制初始设备的启动。BootROM是上电复位或暖复位后,处理器所执行的用户不可修改的代码,该代码已经固化到zynq的BootROM中;阶段1:在该阶段,通常执行第一级启动引导程序。但是,它也可以是任何用户控制的代码; 在该阶段,通常执行用户自己编写的软件程序,但是,也可以是第二级的启动引导程序,该阶段完全是在用户的控制下实现的。 zynq的BootROM BootROM特性: 提供3种不同的方法,用于配置PS:两个主模式和一个从模式,即安全、加密的镜像、主模式;非安全的主模式;通过JTAG的非安全从模式; 支持4种不同的外部启动源:Quad-SPI Flash、NAND Flash、NOR Flash、SD; 支持使用AES-256和HMAC(SHA-256)的PS安全配置; 支持Soc调试安全性; 从NOR和QSPI芯片内执行配置过程。

企业管理流程优化方案全解析——最经典管理流程案例分析

企业管理流程优化方案全解析——最经典 管理流程案例分析 引言: 近年来,随着能源价格的上涨,能源开发产业呈井喷的态势,越来越多的企业投资矿山开采,矿山机械市场的需求旺盛,不少公司步入了发展快车道,企业资产和人员规模迅速扩大。然而市场需求的扩大还带来了大量的竞争者,市场竞争愈发激烈。但是企业在人工规模迅速扩大的情况下并没有优化管理流程,导致员工工作效率下降,企业效益也顺着下降,那么,企业如何优化自身管理流程,在优化管理流程的过程中又会出现什么问题,这些问题又该如何解决,这些都是企业管理人员需要注意的。人力资源专家——华恒智信在管理流程方面有着多年的关注与研究,本文是关于某企业对于优化管理流程的案例分析。 【客户行业】矿山机械销售企业 【客户背景】 A公司是一家专业矿山机械销售企业,近年来,随着能源价格的上涨,能源开发产业呈井喷的态势,越来越多的企业投资矿山开采,矿山机械市场的需求旺盛,A公司步入了发展快车道,企业资产和人员规模迅速扩大。企业职工增加到4000多人,且70%以上的人员是销售人员。经过10年的快速发展,该公司已一跃成为西北地区最大的矿山机械销售企业。 【现状问题】 A公司扩大销售人员规模,其主要意图是通过加强部署市场力量,以在矿山机械市场上占有更大的市场份额。而企业面临的现实情况是,一方面,看到中国矿山机械市场的巨大需求,外资企业纷纷染指,意欲分得矿山机械市场的一杯羹。外资企业凭借着系统的企业文化和远远优于国内企业的管理水平优势,在国内矿山机械市场上获得了迅猛发展,并占有了一定的市场份额,其竞争力不容小觑;另一方面,国内的矿山机械制造企业也不甘心将大部分利润让给A公司这种销售企业,他们凭借着专业生产制造等技术

如何在zynq上挂linux_第二章

上一章讲到这么一个网页: https://www.360docs.net/doc/411507897.html,/resources/tools-software/linux-drivers/platforms/zynq 你打开看看,密密麻麻好多英文啊 还有各种链接 本人时间确实有限,简略讲点要紧的部分吧。 这个网页讲了三大部分 1,u-boot,uImage,和dtb文件的编译 2,BOOT.bin的生成 3,UI界面下载和释放 教程第一章有这么一个图: 其实要启动一个linux, 你需要的就是以下四个文件: BOOT.bin devicetree.dtb uImage 和uramdisk.image.gz

BOOT.bin (来自于编译得来的u-boot文件和网页提供的参考设计) devicetree.dtb (编译得来) uImage (编译得来) 和uramdisk.image.gz (教程第一章里已经讲了怎么来的,xilinx网站之直接下载下来就行) 所以,在linux下要编译的是这几个文件: u-boot uImage devicetree.dtb 然后你就需要一台linux的电脑了 VNC接入工作站也行,虚拟机也行,或者你干脆装一台linux。 有两点注意:我试过14.04版的Ubuntu,在解压缩一个zip包的时候会出错,提示文件名过长。 我也试过一个桌面版的RHEL 6.4,结果里面没装GCC,而GCC在编译过程里是必须有的。(查看装没装GCC的办法之一是进/usr/bin看一下有没gcc文件)最后搞成功的是一台装了GCC的RHEL 6.3桌面版。

现在准备下载一堆东西吧 第一样,交叉编译环境安装包 https://www.360docs.net/doc/411507897.html,/member/mentor_codebench/xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 141M大小,去下载吧。 开个迅雷或者QQ炫风的会员会很快的。 第二样,u-boot编译环境 下载页面: https://https://www.360docs.net/doc/411507897.html,/Xilinx/u-boot-xlnx 点右边的“Download ZIP”就开始下载,然后你可以指定下载目录。 或者直接下载: https://https://www.360docs.net/doc/411507897.html,/Xilinx/u-boot-xlnx/archive/master.zip 这个zip包下载下来之后会自动重新命名为u-boot-xlnx-master.zip 放进linux之后解压缩 解压命令unzip -o u-boot-xlnx-master.zip 别忘了把这个补丁文件放进解压后的根目录 https://www.360docs.net/doc/411507897.html,/_media/resources/tools-software/linux-drivers/platforms/uboot-env.patch

zynq启动流程分析

1.纯PL开发,这个和一般的xilinx的FPGA没有很大的区别。 2.纯PS开发, 典型的就是helloworld工程,这个看到了网友的有两种方式。注:这两个方式后面都有相应的实验。 一种是传统的arm的方式,这个可以参考懒兔子博客。 还一种就是xilinx方法,这个是生成一个elf文件,这个elf文件包括了硬件配置信息(xmp),和裸跑程序(c文件)。 3.PS+PL(不跑操作系统)开发,这个可以参考懒兔子博客二,三笔记,生成的elf文件包括了硬件配置信息(xmp),还有裸跑程序(c文件),另外还有一个.bit文件可以看出和纯PS 开发的区别了。 4.PS+PL(跑操作系统)开发,这个就需要BOOT.BIN,设备树,linux内核镜像,文件系统了。其中BOOT.BIN是由3部分组成的(boot.elf,.bit,.fsbl.elf),boot.elf这个是由交叉编译环境产生的,相当于ssbl吧,.bit文件是PL使用产生,fsbl.elf这个就是fsbl吧。 Zynq启动过程简介 1.在器件上电运行后,处理器自动开始Stage-0 Boot,也就是执行片内BootROM中的代码 2.BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码,FSBL(First Stage Bootloader)。 不过这又有一个问题了----之前说到,Zynq支持多种启动设备,BootROM怎么知道从哪个启动设备里去加载FSBL?这就得靠几个特殊的MIO引脚来选择了: BootROM会去读取MIO[2..8],从而确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM(On Chip Memory)中,并将控制器交给FSBL。 3,FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由咱自己控制了。Xilinx提供了一份FSBL代码,如果没什么特殊要求,可以直接使用。 按照手册说明,FSBL应该完成以下几件事。 1). 使用XPS提供的代码,继续初始化PS 2). 将bitstream写入PL(配置FPGA),不过这一步也可以以后再做 3). 将接下来启动用的Second Stage Bootloader(SSBL,一般就是U-Boot一类的东西),或者裸奔程序,复制到内存中 4). 跳到SSBL运行去 4,接下来的步骤就没啥特别了,Uboot开始运行,初始化好Linux启动环境,然后开始运行Linux系统。 注明:由于自己zedboard还没有开始玩,现在的理解和以后的理解可能又不一样。很多理解粗浅而鄙陋,恳请大家指正,希望大家一起学习进步

电脑启动过程详解

电脑从按完开关加电开始直到进入到系统桌面的整个过程详解本文以Windows2000/xp和Windows Vista/7两个内核做讲解 电脑从加电到进桌面可以分为两大部分: 无论是Windows2000/XP还是Windows Vista/7,在硬件自检方面都是想同的,不同的是在系统加截。 硬件部分: 在讲解前,我们先来了解几个概念: BIOS:即“Basic Input/Output System”(基本输入输出系统),它是一组被“固化”在计算机主板上的一块 ROM 中直接关联硬件的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括系统 BIOS(主板 BIOS).其它设备 BIOS(例如 IDE 控制器 BIOS、显卡 BIOS 等)其中系统 BIOS 占据了主导地位.计算机启动过程中各个 BIOS 的启动都是在它的控制下进行的。 CMOS:即“Complementary Metal-Oxide-Semiconductor”(互补金属氧化物半导体),它本是计算机系统内一种重要的芯片,保存了系统引导最基本的资料。 内存地址:我们知道,内存空间的最基本单位是位,8 位视为一个字节,即我们常用的单位 B,内存中的每一个字节都占有一个地址(地址是为了让 CPU 识别这些空间,是按照 16 进制表示的),而最早的 8086 处理器只能识别 1MB(2 的 20 次方 B)的空间,这 1MB 内存中低端(即最后面)的 640KB 就被称为基本内存,而剩下的内存(所有的)则是扩展内存。这 640KB 的空间分别由显存和各 BIOS 所得。 我们来看一下硬件部分的流程图:

管理信息系统数据流程图和业务流程图经典作品

1.采购部查询库存信息及用户需求,若商品的库存量不能满足用户的需要,则编制相应的采购订货单,并交送给供应商提出订货请求。供应商按订单要求发货给该公司采购部,并附上采购收货单。公司检验人员在验货后,发现货物不合格,将货物退回供应商,如果合格则送交库房。库房管理员再进一步审核货物是否合格,如果合格则登记流水帐和库存帐目,如果不合格则交由主管审核后退回供应商。 画出物资订货的业务流程图。 2.在盘点管理流程中,库管员首先编制盘存报表并提交给仓库主管,仓库主管查询库存清单和盘点流水账,然后根据盘点规定进行审核,如果合格则提交合格盘存报表递交给库管员,由库管员更新库存清单和盘点流水账。如果不合格则由仓库主观返回不合格盘存报表给库管员重新查询数据进行盘点。 根据以上情况画出业务流程图和数据流程图。

“进书”主要指新书的验收、分类编号、填写、审核、入库。主要过程:书商将采购单和3. 新书送采购员;采购员验收,如果不合格就退回,合格就送编目员;编目员按照国家标准进行的分类编号,填写包括书名,书号,作者、出版社等基本信息的入库单;库管员验收入库单和新书,如果合格就入库,并更新入库台帐;如果不合格就退回。“售书”的流程:顾客选定书籍后,收银员进行收费和开收费单,并更新销售台帐。顾客凭收费单可以将图书带离书店,书店保安审核合格后,放行,否则将让顾客到收银员处缴费。 画出“进书”和“售书”的数据流程图。 进书业务流程:退书采购单/合格新编目书采购入库入库台入库库管员 进书数据流程: F3.2不合格采购单

F3.1采购单F3.3合格采购单p3.2P3.1供应商编目处理采购单审核F3.4不合F10入格入库单库单管理员入库够书清单F9p3.3合格入库清单F3.5S2图书库存情况存档入库单处理 售书业务流程: 新书收银员顾客未收费的销售台帐收费单收费单/保 售书数据流程: 4.背景:若库房里的货品由于自然或其他原因而破损,且不可用的,需进行报损处理,即这些货品清除出库房。具体报损流程如下: 由库房相关人员定期按库存计划编制需要对货物进行报损处理的报损清单,交给主管确认、审核。主管审核后确定清单上的货品必须报损,则进行报损处理,并根据报损清单登记流水帐,同时修改库存台帐;若报损单上的货品不符合报损要求,则将报损单退回库房。 试根据上述背景提供的信息,绘制出“报损”的业务流程图、数据流程图。 报损业务流程图: 业务流程图: 库存计划流水账合格报损清库存台帐报损清单主管库房单不合格报损清单

ERP系统生管操作流程(经典版)

ERP系统的生管操作流程(经典) ERP 所谓ERP是英文Enterprise Resource Planning(企业资源计划)的简写。 是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。ERP系统集中信息技术与先进的管理思想於一身,成为现代企业的运行模式,反映时代对企业合理调配资源,最大化地创造社会财富的要求,成为企业在信息时代生存、发展的基石。 Gartner Group提出ERP具备的功能标准应包括四个方面: 1.超越MRPⅡ范围的集成功能 包括质量管理;试验室管理;流程作业管理;配方管理;产品数据管理;维护管理;管 制报告和仓库管理。 2.支持混合方式的制造环境 包括既可支持离散又可支持流程的制造环境;按照面向对象的业务模型组合业务过程的能力和国际范围内的应用。 3.支持能动的监控能力,提高业务绩效 包括在整个企业内采用控制和工程方法;模拟功能;决策支持和用于生产及分析的图形能力。 4.支持开放的客户机/服务器计算环境 包括客户机/服务器体系结构;图形用户界面(GUI);计算机辅助设计工程(CASE),面向对象技术;使用SQL对关系数据库查询;内部集成 的工程系统、商业系统、数据采集和外部集成(EDI)。 ERP是对MRPⅡ的超越,从本质上看,ERP仍然是以MRPⅡ为核心,但在功能和技术上却超越了传统的MRPⅡ,它是以顾客驱动的、基于时 间的、面向整个供应链管理的企业资源计划。 进一步地,我们可以从管理思想、软件产品、管理系统三个层次给出它的定义:1.是由美国著名的计算机技术咨询和评估集团Garter Group Inc.提出的一整套企业管理系统体系标准,其实质是在MRP II(Manufacturing Resources Planning,“制造资源计划”)基础上进一步发展而成的面向供应链(Supply Chain)的管理思想; 2.是综合应用了客户机/服务器体系、关系数据库结构、面向对象技术、图形用户界面、第四代语言(4GL)、网络通讯等信息产业成果,以ERP管理思想为灵魂的软件产品; 3.是整合了企业管理理念、业务流程、基础数据、人力物力、计算机硬件和软件于一体的企业资源管理系统。 它是从MRP(物料资源计划)发展而来的新一代集成化管理信息系统,它扩展了MRP的功能,其核心思想是供应链管理,它跳出了传统企业边界,从供应链范围去优化企业的资源,是基于网络经济时代的新一代信息系统。它对于改善企业业务流程、提高企业核心竞争力的作用是显而易见的。ERP是在20世纪80年代初开始出现的。从90年代开始,以SAP、Oracle为代表的国际著名ERP产

zynq_ubuntu桌面系统的建立

UbuntuontheZynq?-7000SoCFeaturingthe Avnet ZedBoard 这个指南提供了一种集合几个不同的技术在一个平台的方法,使用Avnet ZedBoard,我们拥有800Mhz ARM-9 Cortex 32位双核处理芯片,联合Xilinx FPGA 无与伦比的灵活性实施自定义用户系统。我们使用一个Linux内核作为基础操作系统在处理器内核运行,同时添加一个全性能的桌面架构Ubuntu,在根文件系统中控制。这个桌面允许ZedBoard像个人计算机一样工作,使用USB接口的键盘和鼠标,和一个HDMI接口的显示器。 实验1:FPGA硬件平台 1,在网站:https://www.360docs.net/doc/411507897.html,/resources/fpga/xilinx/kc705/adv7511下找到 cf_adv7511_zed_edk_14_4_2013_02_05.tar.gz链接,下载得到HDL Reference Design,解压并将cf_adv7511_zed和cf_lib拷贝到目录L:\ubuntu_linux下。 2,打开cf_adv7511_zed文件下的system.xmp文件 3,在XPS下,点击Generate BitStream产生syste.bit文件,将在Zynq_Ubuntu\cf_adv7511_zed\implementation\system.bit 4,在xps下,点击左边的SDK Export Design 图标,勾选上include bitstream and BMM files,点击Export and Launch SDK按钮。选择工作区间为l:\ubuntu_linux\ f_adv7511_zed\SDK\SDK_Workspace,ok 5,在SDK下,新建一个应用工程zynq_fsbl_0 选择Zynq FSBL ,finish。将在Zynq_Ubuntu\cf_adv7511_zed\SDK\SDK_Workspace\zynq_fsbl_ 0\Debug\zynq_fsbl_0.elf 6,在zynq_ubuntu目录下新建一个文件夹bootfile,将system.bit文件和zynq_fsbl_0.elf文件都复制到bootfile文件夹下。

嵌入式操作系统启动流程

1 什么是BSP: 1. 在通电后, 初始化硬件( bootrom ) 2. 支持VxWorks和硬件驱动通信(Image的底层驱动) 3. 本质上是硬件驱动、初始化的合集; 2 研究BSP内容: 1. 系统image的生成和image的种类 2. image的download 下载过程 3. 系统的启动顺序和过程 4. 调试环境的配置及远端调试的方式和方法 5. 相应BSP设置文件的修改(网络,串口..) 6. BSP各文件的组成和作用. 7. 要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解?主要是32微处理 器(上电启动过程,download image的方式方法,读写ROM地址空间分 配,MMU寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助. 3 BSP主要文件目录的组成及主要文件的作用: 3.1 目录target/config/All: 这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件. configAll.h: 缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用 #define或#口门def方式来更改设置. bootInit.c: 在romlnit.s 后,完成Boot ROM的第二步初始化.程序从romlnit.s 中的romlnit() 跳到这个文件中的romStart().来执行必要的解压和ROM image的放置. bootConfig.c: 完成Boot ROM image的初始化和控制. usrConfig.c: VxWorks image 的初始化代码. 3.2 目录target/config/comps/src: 涉及系统核心的components, 主要由target/config/All 中usrConfig.c 中函数调用 3.3 目录target/config/bspname: 包含系统或硬件相关的BSP文件.

Zynq FSBL代码导读

FSBL代码导读 一、main函数执行之前 FSBL模板的代码是跟ISE的版本有关的,我用的是14.3,内容会比14.2版更多一点,但是基本过程是一样的。 板子上电之后,最先执行的并不是FSBL中的main函数,因为这个时候板子还没有初始化,不具备执行C语言的能力,此时只能执行汇编代码,所执行的代码是由BSP提供的。 我们打开zynq_fsbl_bsp——>ps7_cortexa9_0——>libsrc— —>standalone_v3_07_a——>src文件夹,里面有一个asm_vector.S文件,这个文件 声明了一个代码段,位于地址0处。开机之后,PS自动执行地址0处的指令,其第一句话就是一个跳转:B _boot。如下: 于是就跳转到boot.S中执行_boot标号下的代码了,_boot会对系统做初始化,当它执行完后,PS将具备执行C代码的能力,接着在_boot的代码中,再次执行了一个跳转: _start标号位于xil.crt0.S中,仍然对系统进行设置,我们看到,第一句话就是跳转到_cpu_init去执行cpu初始化。代码部分截图如下: 在_start的末尾,BSP终于完成了自己的工作,PS将跳转到main函数开始执行。如下:

二、main函数执行过程 终于系统进入了FSBL阶段。我们打开zynq_fsbl——>src文件夹,然后打开main函数: Main函数首先是一些宏定义,接下来就是执行ps7_int()函数。SDK是一个很智能的工具,图中的灰色阴影部分是SDK判断出了PEEP_CODE这个宏没有定义,所以用灰颜色提示读者这段代码不用执行。 ps7_init函数位于ps7_init.c文件中。这个C文件是由XPS根据用户的配置自动生成的。我们进入ps7_init函数看一下,这个函数很短: 根据代码,很明显可以猜到,ps7_init函数其实执行了mio,pll,clock,ddr和某些外设的初始化。 我们接着看FSBL的main函数,根据XPS自动生成的ps7_init.c执行完初始化之后,FSBL将根据启动状态寄存器判断是采用的哪种启动模式。有四种启动模式,分别是QSPI,NOR,JTAG,SD卡等模式。每种模式都有一段独立的代码,举个例子,我们看SD卡模式的执行代码:

嵌入式操作系统启动流程

1什么是BSP: 1.在通电后,初始化硬件(bootrom) 2.支持VxWorks和硬件驱动通信(Image的底层驱动) 3.本质上是硬件驱动、初始化的合集; 2研究BSP内容: 1.系统image的生成和image的种类 2.image的download下载过程 3.系统的启动顺序和过程 4.调试环境的配置及远端调试的方式和方法 5.相应BSP设置文件的修改(网络,串口..) 6.BSP各文件的组成和作用. 7.要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解.主 要是32微处理器(上电启动过程, download image的方式方法,读 写ROM,地址空间分配,MMU,寄存器,中断定义,..).参照硬件资料, 多读一些源码会有所帮助. 3BSP主要文件目录的组成及主要文件的作用: 3.1目录target/config/All: 这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.

configAll.h: 缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#undef方式来更改设置. bootInit.c: 在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压和ROM image的放置. bootConfig.c:完成Boot ROM image的初始化和控制. usrConfig.c: VxWorks image的初始化代码. 3.2目录target/config/comps/src: 涉及系统核心的components,主要由target/config/All中usrConfig.c中函数调用 3.3目录target/config/bspname: 包含系统或硬件相关的BSP文件. Makefile 一些命令行控制images的生成,参见BSP设置部分及生成下载 README BSP发布纪录,版本,总的文档 config.h 包括所有涉及CPU主板的设置及定义(includes,definations),参见BSP设置文件及生成下载 configNet.h 网络驱动的主要设置文件,主要对END驱动设置. romInit.s 汇编语言文件,是VxWorks Boot ROM和ROM based image的入口,参见系统启动部分

相关文档
最新文档