DOS的启动过程详解

DOS的启动过程详解

DOS的启动过程详解

电脑刚启动时,要先从某个磁盘上将一些系统程序读入内存后才能正常工作,我们将这个磁盘叫做启动盘。

通常,我们用A盘或C盘作为启动盘,在特殊情况下,硬盘的其它盘符和少数电脑的光盘也可以作启动盘。制作启动盘需要使用sys命令,可以参看后面的命令部分。

DOS系统启动时,要先从启动盘中读取两个系统文件IO.SYS、MSDOS.SYS,然后在启动盘的根目录下寻找并执行CONFIG.SYS、https://www.360docs.net/doc/187650659.html,、AUTOEXEC.BAT三个文件。其中IO.SYS、MSDOS.SYS和https://www.360docs.net/doc/187650659.html,这三个文件缺一不可,否则电脑将无法正常启动

CONFIG.SYS和AUTOEXEC.BAT这两个文件是用来配置系统运行环境和自动执行一些命令,它们对电脑的运行性能以及许多设备的驱动起到了至关重要的作用,我们可以根据自己的需要对它们的内容进行修改,

autoexec.bat叫做自动批处理文件,它是批处理文件的一种,因为DOS启动时会自动运行它,所以叫做自动批处理文件。你可以把自己每次启动电脑时都要运行的程序放在里面。

如果电脑在根目录下找不到这两个文件,也是可以运行的,但有许多复杂的软件和设备将无法正常工作。比如光驱、声卡以及Windows程序等。所以,初学者应注

android系统开机启动流程分析

一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本 服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到service.list中【system/core/init/init_parser.c】。 建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作 1、初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个 文件解析步骤2时执行“early-init”行动】 2、初始化设备【在/dev下创建所有设备节点,下载firmwares】 3、初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

Android 开机启动流程

Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写 c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况) 2. 内核kernel 1) 源码:kernel/* 2) 说明:kernel由bootloader加载 3. 文件系统及应用init 1) 源码:system/core/init/* 2) 配置文件:system/rootdir/init.rc, 3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1)源码:frameworks/base/cmds/app_main.cpp等 2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process a)建立Java Runtime,建立虚拟机 b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序 c) 启动System Server 5. 系统服务system server 1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a 2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等) 6. 桌面launcher 1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现 2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher 7. 解锁 1) 源码: frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置

详解Windows中自启动程序的藏身之处[图文]

详解Windows中自启动程序的藏身之处[图文] 导读:我们电脑上一般都会有一些自启动软件,许多计算机初级用户都只是简单的设置「开始→程序→启动」窗体,以为就能轻松解决。其实在Wndows XP/2K 中,能够自动启动程序的方法还是很多的,一些恶意软件或者流氓软件的自启动方式还非常隐蔽,想要找到并清理可不容易。 一、当前用户专有的启动档案夹 这是许多应用软件自动启动的常用位置,Windows自动启动放入该档案夹的所有建立捷径。用户启动档案夹一般在:C:\Documents and Settings\《用户名字》\「开始」窗体\程序\启动,其中「《用户名字》」是当前登入的用户账户名称。 二、对所有用户有效的启动档案夹 这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登入系统,放入该档案夹的建立捷径总是自动启动——这是它与用户专有的启动档案夹的区别所在。该档案夹一般在:C:\Documents and Settings\All Users\「开始」窗体\程序\启动。 三、Load注册键 介绍该注册键的数据不多,实际上它也能够自动启动程序。位置: HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\ CurrentVersion\Windows\load。 四、Userinit注册键 位置: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogo n\Userinit。 这里也能够使系统启动时自动启始化程序。通常该注册键下面有一个userinit.exe,这个键允许指定用逗号分隔的多个程序,例如「userinit.exe,OSA.exe」(不含引号)。 五、Explorer\Run注册键 和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explor er\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

分析Android 开机启动慢的原因

开机启动花了40多秒,正常开机只需要28秒就能开机起来。 内核的启动我没有去分析,另一个同事分析的。我主要是分析从SystemServer启来到开机动画结束显示解锁界面的这段时间,也就是开机动画的第三个动画开始到结束这段时间,这是个比较耗时阶段,一般都在17秒左右(见过牛B的手机,只需5秒)。 SystemServer分两步执行:init1和init2。init1主要是初始化native的服务,代码在sy stem_init.cpp的system_init,初始化了SurfaceFlinger和SensorService这两个native的服务。init2启动的是java的服务,比如ActivityManagerService、WindowManagerService、PackageManagerService等,在这个过程中PackageManagerService用的时间最长,因为PackageManagerService会去扫描特定目录下的jar包和apk文件。 在开机时间需要40多秒的时,从Log上可以看到,从SurfaceFlinger初始化到动画结束,要27秒左右的时间,即从SurfaceFlinger::init的LOGI("SurfaceFlinger is starting")这句Log到void SurfaceFlinger::bootFinished()的LOGI("Boot is finished (%ld ms)", long(ns 2ms(duration)) ),需要27秒左右的时间,这显然是太长了,但到底是慢在哪了呢?应该在个中间的点,二分一下,于是想到了以启动服务前后作为分隔:是服务启动慢了,还是在服务启动后的这段时间慢?以ActivityManagerService的Slog.i(TAG, "System now ready")的这句Log为分割点,对比了一下,在从SurfaceFlinger is starting到System now read y多了7秒左右的时间,这说明SystemServer在init1和init2过程中启动慢了,通过排查,发现在init1启动的时候,花了7秒多的时间,也就是system_init的LOGI("Entered system _init()")到LOGI("System server: starting Android runtime.\n")这段时间用了7秒多,而正常情况是400毫秒便可以初始化完,通过添加Log看到,在SensorService启动时,用了比较长的时间。 不断的添加Log发现,在启动SensorService时候,关闭设备文件变慢了,每次关闭一个/dev/input/下的设备文件需要100ms左右,而SensorService有60~70次的关闭文件,大概有7s左右的时间。 调用流程是: frameworks/base/cmds/system_server/library/system_init.cpp: system_init->SensorServi ce::instantiate frameworks/native/services/sensorservice/SensorService.cpp: void SensorService::onFi rstRef()->SensorDevice& dev(SensorDevice::getInstance()) hardware/libsensors/SensorDevice.cpp: SensorDevice::SensorDevice()->sensors_open hardware/libsensors/sensors.cpp: open_sensors->sensors_poll_context_t sensors_poll_context_t执行打开每个传感器设备时,遍历/dev/input/目录下的设备文件,以匹配当前需要打开的设备,遍历文件是在 hardware/libsensors/SensorBase.cpp的openInput下实现,如果打开的设备文件不是正在打开的设备文件,会执行下面语句的else部分: if (!strcmp(name, inputName)) { strcpy(input_name, filename); break;

基于MT6752的 android 系统启动流程分析报告

基于MT6752的Android系统启动流程分析报告 1、Bootloader引导 (2) 2、Linux内核启动 (23) 3、Android系统启动 (23) 报告人: 日期:2016.09.03

对于Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。但根据芯片架构和平台的不同,在启动的Bootloader阶段会有所差异。 本文以MTK的MT6752平台为例,分析一下基于该平台的Android系统启动流程。 1、Bootloader引导 1.1、Bootloader基本介绍 BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备,目的就是引导linux操作系统及Android框架(framework)。 它的主要功能包括设置处理器和内存的频率、调试信息端口、可引导的存储设备等等。在可执行环境创建好之后,接下来把software装载到内存并执行。除了装载software,一个外部工具也能和bootloader握手(handshake),可指示设备进入不同的操作模式,比如USB下载模式和META模式。就算没有外部工具的握手,通过外部任何组合或是客户自定义按键,bootloader也能够进入这些模式。 由于不同处理器芯片厂商对arm core的封装差异比较大,所以不同的arm处理器,对于上电引导都是由特定处理器芯片厂商自己开发的程序,这个上电引导程序通常比较简单,会初始化硬件,提供下载模式等,然后才会加载通常的bootloader。 下面是几个arm平台的bootloader方案: marvell(pxa935) : bootROM + OBM + BLOB informax(im9815) : bootROM + barbox + U-boot mediatek(mt6517) : bootROM + pre-loader + U-boot broadcom(bcm2157) : bootROM + boot1/boot2 + U-boot 而对MT6752平台,MTK对bootloader引导方案又进行了调整,它将bootloader分为以下两个部分: (1) 第1部分bootloader,是MTK内部(in-house)的pre-loader,这部分依赖平台。 (2) 第2部分bootloader,是LK(little kernel的缩写,作用同常见的u-boot差不多),这部分依赖操作系统,负责引导linux操作系统和Android框架。 1.2、bootloader的工作流程 1.2.1 bootloader正常的启动流程 先来看启动流程图:

启动项修复

双系统启动项修复方法 首先,在修复xp Windows7启动项之前,我有必要给大家介绍一下Windows的启动顺序,让大家更深一层了解Windows xp:mbr-->ntldr-->boot.ini--到这里就已经是启动菜单选择条了 Windows7:mbr-->bootmgr-->BCD-->到这里就是Windows7的启动菜单了 从上边我们可以看出,本来在Windows xp里边最重要的文件ntldr在Windows7里边居然用不到了。 1、如果你只有一个xp安装在c盘、由于某种原因,出现“ntldr is missing”错误,先确保你c盘ntldr文件的存在,然后随便用pe U盘启动(我从来不用光碟的),在命令行下,把Windows7的boot目录复制到c 盘先,输入: c:\boot\bootsect.exe /nt52 C: //nt52代表使用过去的NTLDR 看到successfully 即可成功修复xp启动菜单。 2、如果你只有一个Windows7安装在c盘、由于某种原因,出现启动错误,请随便用pe启动(我从来不用光碟的),把Windows7的boot目录复制到c盘,,输入: c:\boot\bootsect.exe /nt60 c: //为硬盘写入NT引导信息,/nt60代表Vista以后的bootmanager 把硬盘主引导记录定位到bootmgr,如果还是启动不了,可能就是BCD(相当于xp里的boot.ini配置文件)启动列表菜单丢失了。解决方法: ============================= path c:\windows\system32 bcdedit /store c:\boot\bcd /create {bb68514c-cff8-11dd-aca9-a775dac50ae8} /d "Microsoft Windows 7" /application osloader bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} device partition=C: //这里的C是你Windows7的安装分区 bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} path \Windows\system32\winload.exe bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} locale zh-CN bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} inherit {bootloadersettings} bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} osdevice partition=C: //这里C 是你Windows7的安装分区 bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} systemroot \Windows bcdedit /store c:\boot\bcd /set {bb68514c-cff8-11dd-aca9-a775dac50ae8} nx OptIn

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

Android开机启动流程样本

Android的开机流程 1. 系统引导bootloader 1) 源码: bootable/bootloader/* 2) 说明: 加电后, CPU将先执行bootloader程序, 此处有三种选择 a) 开机按Camera+Power启动到fastboot, 即命令或SD卡烧写模式, 不加载内核及文件系统, 此处能够进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式, 加载recovery.img, recovery.img包含内核, 基本的文件系统, 用于工程模式的烧写 c) 开机按Power, 正常启动系统, 加载boot.img, boot.img包含内核, 基本文件系统, 用于正常启动手机( 以下只分析正常启动的情况) 2. 内核kernel 1) 源码: kernel/* 2) 说明: kernel由bootloader加载 3. 文件系统及应用init 1) 源码: system/core/init/* 2) 配置文件: system/rootdir/init.rc, 3) 说明: init是一个由内核启动的用户级进程, 它按照init.rc中的设置执行: 启动服务( 这里的服务指linux底层服务, 如adbd提供adb支持, vold提供SD卡挂载等) , 执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1) 源码: frameworks/base/cmds/app_main.cpp等 2) 说明: zygote是一个在init.rc中被指定启动的服务, 该服务对应的命令是/system/bin/app_process

Android系统启动过程详解

Android系统启动过程详解 Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)

下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。

一Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 启动过程就是代码init.c中main函数执行过程:system\core\init\init. c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析 .rc文件是Android使用的初始化脚本文件(System/Core/Init/readm e.txt中有描述: four broad classes of statements which are Actions, Commands, Services, and Options.) 其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是linux 命令, 还有一些是android 添加的,如:class_start :启动服务,class_stop :关闭服务,等等。 其中Options是针对Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:\system\core\rootdir\init.rc 在解析rc脚本文件时,将相应的类型放入各自的List中: \system\core\init\Init_parser.c :init_parse_config_file( )存入到 action_queue、action_list、service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。 这其中包含了服务:adbd、servicemanager、vold、ril-daemon、deb uggerd、surfaceflinger、zygote、media…… 2 服务启动 文件解析完成之后将service放入到service_list中。 文件解析完成之后将service放入到service_list中。 \system\core\init\builtins.c

Android SystemBar启动流程分析

Android SystemBar启动流程分析 SystemBars的服务被start时,最终会调用该类的onNoService()方法。 @Override public void start() { if (DEBUG) Log.d(TAG, "start"); ServiceMonitor mServiceMonitor = new ServiceMonitor(TAG, DEBUG, mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this); mServiceMonitor.start(); // will call onNoService if no remote service is found } @Override public void onNoService() { if (DEBUG) Log.d(TAG, "onNoService"); createStatusBarFromConfig(); // fallback to using an in-process implementation } private void createStatusBarFromConfig() { … mStatusBar = (BaseStatusBar) cls.newInstance(); … mStatusBar.start(); } BaseStatusBar是一个抽象类,故调用其子类的PhoneStatusBar的start 函数。 @Override public void start() { … super.start(); … } 子类的start又调用了父类的start public void start() { … createAndAddWindows(); … }

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进程注册服务中,该服务启动时主要功能是初始化整个显

注册表的启动项详解

手工杀毒拾零——注册表中的自启动项及其详解 1、 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load 这个,load是指“值”,在注册表中,位于右边窗口的“名称”一列。一般新安装的操作系统,他的数据是空的。病毒可以把自身路径写到他的数据里,这样实现开机自启动。如下图所示: 其它的注册表中的自启动项都是如此实现开机启动了。后面的教程不再重复。 2、 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion \Run 这里"Run"是在左边窗口中找,也就是说它是个“项”。我们的输入法指示器,也就是右下角更改输入法的地方的图标,就是从这里自启动的。启动项名称为“ctfmon.exe”。注意不是ctfmon。要想找ctfmon.exe,请在注册表的窗口的右边找。 3、 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion

\RunOnce 这里"Run"是在左边窗口中找,也就是说它是个“项”。它的启动项请从右侧找。当然可能没有。 4、 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion \Policies\Explorer\Run 这里"Run"是在左边窗口中找,也就是说它是个“项”。它的启动项请从右边找,当然可能没有。这个启动项可能会被很多人包括很多杀毒辅助工具所忽略 5、 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\run 这个,run是指“值”,在注册表中,位于右边窗口的“名称”一列。默认的可能没有此run值。病毒会修改run的数据一列的数据。 6、 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\autorun 这个启动项,是随cmd程序一起启动的。也就是说,只有当打开cmd 窗口的时候,才会启动相应的项。要想找到“autorun”,请从右侧

android开机启动流程简单分析

android开机启动流程简单分析 android启动 当引导程序启动Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统同时会加载用户级别的第一个进程init(system\core\init\init.cpp)代码如下: int main(int argc, char** argv) { ..... //创建文件夹,挂载 // Get the basic filesystem setup we need put together in the initramdisk // on / and then we'll let the rc file figure out the rest. if (is_first_stage) { mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755"); mkdir("/dev/pts", 0755); mkdir("/dev/socket", 0755); mount("devpts", "/dev/pts", "devpts", 0, NULL); #define MAKE_STR(x) __STRING(x) mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC)); mount("sysfs", "/sys", "sysfs", 0, NULL); } ..... //打印日志,设置log的级别 klog_init(); klog_set_level(KLOG_NOTICE_LEVEL); ..... Parser& parser = Parser::GetInstance(); parser.AddSectionParser("service",std::make_unique()); parser.AddSectionParser("on", std::make_unique()); parser.AddSectionParser("import", std::make_unique()); // 加载init.rc配置文件 parser.ParseConfig("/init.rc"); } 加载init.rc文件,会启动一个Zygote进程,此进程是Android系统的一个母进程,用来启动Android的其他服务进程,代码: 从Android L开始,在/system/core/rootdir 目录中有4 个zygote 相关的启动脚本如下图:

讲解win7启动过程

:BIOS→MBR→Bootmgr→BCD→Winl oad.exe→内核加载 1.开机后,BIOS进行开机自检(POST),然后选择从硬盘进行启动,加载硬 盘的MBR并把控制权交给MBR(MBR是硬盘的第一个扇区,它不在任何一个分区内); 2.MBR会搜索64B大小的分区表,找到4个主分区(可能没有4个)的活动分 区并确认其他主分区都不是活动的,然后加载活动分区的第一个扇区 (Bootmgr)到内存; 3.Bootmgr寻找并读取BCD,如果有多个启动选项,会将这些启动选项反映 在屏幕上,由用户选择从哪个启动项启动。 4.选择从Windows7启动后,会加载C:\windows\system32\winload.exe, 并开始内核的加载过程,内核加载过程比较长,比较复杂,这里就不一一讲了。 在这个过程中,bootmgr和BCD存放在Windows7的保留分区里,而从Winload.exe开始,就开始进入到C盘执行内核的加载过程了。 ?MBR(Master Boot Record),中文意为主引导记录。 注意事项 硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。 他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取 ?BCD=Boot Configuration Data (启动设置数据) ,BCD是操作系统中的启动设置数据, 在有vista或windows7的多重操作系统中,系统通bootmgr程序导入BCD 文件完成启动菜单的引导。 可用bcdedit.exe程序来编辑BCD文件,来调整开机默认操作系统和等待时间。 先让我们看一下windows7的启动过程的常识: 电脑加电后,首先是启动BIOS程序,BIOS自检完毕后,找到硬

Android ninja 编译启动过程分析

Android ninja编译启动过程分析 ---make是如何转换到到ninja编译的 1.首先你的得对make的工作机制有个大概的了解: 运行的命令在要编译的目录下运行make,或者make target_name a.分析处理保存阶段(没有实际编译动作):它首先对当前目录下的Makefile文件的做一次扫描,语法分析,还有处理,主要是变量的保存,目标依赖列表生成,目标下的action列表的生成,然后记住 b.然后按记住的目标执行action列表动作(有实际编译动作). 编译启动的入口方式还是运行make: 2开始make-jxxx方式进入.....(xxx是本机cpu的数量) make开始做进行第一次扫描.... 目前USE_NINJA还是没有定义,估计以后很久很久才能启用的了! BUILDING_WITH_NINJA开始也是没定义的 看make扫描入口文件: Makefile: include build/core/main.mk 在build/core/main.mk: 在ninia之前都有include help.mk和config.mk 97include$(BUILD_SYSTEM)/help.mk 98 99#Set up various standard variables based on configuration 100#and host information. 101include$(BUILD_SYSTEM)/config.mk 说明make help//显示make帮助make config//当前显示配置 103relaunch_with_ninja:= 104ifneq($(USE_NINJA),false) 105ifndef BUILDING_WITH_NINJA<==第二次扫描不会到这里了 106relaunch_with_ninja:=true 107endif 108endif 116ifeq($(relaunch_with_ninja),true)<===第一次扫描入这里了 117#Mark this is a ninja build. 118$(shell mkdir-p$(OUT_DIR)&&touch$(OUT_DIR)/ninja_build) 119include build/core/ninja.mk//---进入ninja.mk 第一次扫描到此为止就结束掉了,因为在当前ifeq else endif后面没有代码了 120else#///!relaunch_with_ninja<===第二次扫描入这里了

android开机过程

一、Android开机启动流程简介 1、OS-level: 由bootloader载入linux kernel后kernel开始初始化, 并载入built-in 的驱动程序。Kernel完成开机后,载入init process,切换至user-space。 Init进程是第一个在user-space启动的进程。 2、Android-level: 由init process读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server等。 由 init process 根据硬件类型读取init.xxx.rc。由init.xxx.rc加载init.xxx.sh。 由 init.xxx.sh 加载特定的硬件驱动。如hi_tuner.ko、hi_demux.ko等。 3、Zygote-Mode: Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。 随后,使用者将看到一个桌面环境(Home Screen)。桌面环境由一个名为[Launcher]的应用程序负责提供。 本文档重点研究Android-level中的启动流程。 启动流程如下图所示:

二、init process流程分析 init进程简介 init进程是第一个在user-space启动的进程。由内核启动参数[init]传递给内核,如果该项没有设置,内核会按 /etc/init,/bin/init,/sbin/init,/bin/sh的顺序进行尝试,如果都有的都没找到,内核会抛出 kernel panic:的错误。

微软Windows 7开机启动项学习

Windows中有自带的启动文件夹,它是最常见的启动项目,但很多人却很少注意仔细检查它。如果把程序装入到这个文件夹中,系统启动就会自动地加载相应程序,而且因为它是暴露在外的,所以非常容易被外在的因素更改。 一、具体的位置是“开始”菜单中的“启动”选项 在硬盘上的位置是:C:/Documents andSettings/Administrator/“开始”菜单程序启动; 在注册表中的位置是: HKEY_Current_USER/Software/Microsoft/Windows/CurrentVersion/Run 二、Msconfig Msconfig是Windows系统中的“系统配置实用程序”,它管的方面可够宽,包括:system.ini、win.ini、启动项目等。同样,里面也是自启动程序非常喜欢呆的地方! 1.System.ini 首先,在“运行”对话框中输入“msconfig”启动系统配置实用程序(下同),找到system.ini标签,里面的“shell=……” 就可以用来加载特殊的程序。如果你的shell=后面不是默认的explorer.exe,或者说后面还有一个程序的名字,那你可要小心了,请仔细检查相应的程序是否安全! 2.Win.ini 如果我们想加载一个程序:hack.exe,那么可以在win。ini中用下面的语句来实现: [windows] load=hack.exe run=hacke.exe 3.“启动”项目 系统配置实用程序中的启动标签和我们上面讲的“启动”文件夹并不是同一个东西,在系统配置实用程序中的这个启动项目,是Windows系统启动项目的集合地。几乎所有的启动项目都能在这里找到——当然,经过特殊编程处理的程序可以通过另外的方法不在这里显示。 打开“启动”标签,“启动项目”中罗列的是开机启动程序的名称,“命令”下是具体的程序附加命令,最后的“位置”就是该程序在注册表中的相应位置。你可以对可疑的程序进行详细的路径、命令检查,一旦发现错误,就可以用下方的“禁用”来禁止该程序开机时候的加载。 一般来讲,除系统基于硬件部分和内核部分的系统软件的启动项目外,其他的启动项目都是可以适当更改的,包括:杀毒程序、特定防火墙程序、播放软件、内存管理软件等。也就是说,启动项目中包含了所有我们可见程序的列表,你完全可以通过它来管理你的启动程序。 三、注册表中相应的启动加载项目

相关文档
最新文档