精华内容
下载资源
问答
  • 一篇文章看明白 Android 系统启动时都干了什么

    万次阅读 多人点赞 2018-01-26 17:32:44
    Android - 系统启动过程 计算机是如何启动的? 首先熟悉一些概念,计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等其他输入输出设备。 所有的软件(比如:操作系统)都是存放在硬盘上,程序执行...

    Android - 系统启动过程

    相关系列

    计算机是如何启动的?

    首先熟悉一些概念,计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等其他输入输出设备。 所有的软件(比如:操作系统)都是存放在硬盘上,程序执行时需要将程序从硬盘上读取到内存中然后加载到 CPU 中来运行。 当我们按下开机键时,此时内存中什么都没有,,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是 BIOS。

    • 引导阶段

    BIOS: Basic Input/Output System(基本输入输出系统),在 IBM PC 兼容系统上,是一种业界标准的固件接口(来自维基百科)。 BIOS 一般是主板芯片上的一个程序,计算机通电后,第一件事就是读取它。

    BIOS 程序首先检查计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为 POST。 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。 如果没有问题,屏幕就会显示出 CPU,内存,硬盘等信息。

    硬件自检完成后,BIOS 把控制权转交给下一阶段的启动程序。 这时 BIOS 需要知道,下一阶段的启动程序到底存放在哪一个设备当中。 也就是说 BIOS 需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。 这种排序叫做启动排序,也就是我们平时进入 BIOS 界面时能看到的 Boot Sequence。

    如果我们没有进行特殊操作的话,那么 BIOS 就会按照这个启动顺序将控制权交给下一个存储设备。 我们在使用 U 盘光盘之类的装系统时就是在这里将启动顺序改变了,将本来要移交给硬盘的控制权交给了 U 盘或者光盘。

    第一存储设备被激活后,计算机读取该设备的第一个扇区,也就是读取最前面的 512 个字节。 如果这 512 个字节的最后两个字节是 0x55 和 0xAA ,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备。

    这最前面的 512 个字节,就叫做"主引导记录"(Master boot record,缩写为 MBR)。 主引导记录 MBR 是位于磁盘最前边的一段引导代码。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的。 硬盘的主引导记录 MBR 是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区内的操作系统,并用主分区信息表来管理硬盘。

    MBR 只有512个字节,放不了太多东西。 它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。 我们找到可用的 MBR 后,计算机从 MBR 中读取前面 446 字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。

    • 加载内核阶段

    选择完操作系统后,控制权转交给操作系统,操作系统的内核首先被载入内存。

    以 Linux 系统为例,先载入 /boot 目录下面的 kernel。 内核加载成功后,第一个运行的程序是 /sbin/init。 它根据配置文件(Debian 系统是 /etc/initab )产生 init 进程。 这是 Linux 启动后的第一个进程,pid 进程编号为 1,其他进程都是它的后代。

    然后,init 线程加载系统的各个模块,比如:窗口程序和网络程序,直至执行 /bin/login 程序,跳出登录界面,等待用户输入用户名和密码。

    至此,全部启动过程完成。

    Android 手机的启动过程

    Android 系统虽然也是基于 Linux 系统的,但是由于 Android 属于嵌入式设备,并没有像 PC 那样的 BIOS 程序。 取而代之的是 Bootloader —— 系统启动加载器。 它类似于 BIOS,在系统加载前,用以初始化硬件设备,建立内存空间的映像图,为最终调用系统内核准备好环境。 在 Android 里没有硬盘,而是 ROM,它类似于硬盘存放操作系统,用户程序等。 ROM 跟硬盘一样也会划分为不同的区域,用于放置不同的程序,在 Android 中主要划分为一下几个分区:

    • /boot:存放引导程序,包括内核和内存操作程序
    • /system:相当于电脑c盘,存放Android系统及系统应用
    • /recovery:恢复分区,可以进入该分区进行系统恢复
    • /data:用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序
    • /cache:安卓系统缓存区,保存系统最常访问的数据和应用程序
    • /misc:包含一些杂项内容,如系统设置和系统功能启用禁用设置
    • /sdcard:用户自己的存储区,可以存放照片,音乐,视频等文件

    这里写图片描述

    那么 Bootloader 是如何被加载的呢?跟 PC 启动过程类似,当开机通电时首先会加载 Bootloader,Bootloader 回读取 ROM 找到操作系统并将 Linux 内核加载到 RAM 中。

    当 Linux 内核启动后会初始化各种软硬件环境,加载驱动程序,挂载根文件系统,Linux 内核加载的最后阶段会启动执行第一个用户空间进程 init 进程。

    init 进程

    这里写图片描述

    init 是 Linux 系统中用户空间的第一个进程(pid=1),Kernel 启动后会调用 /system/core/init/Init.cpp 的 main() 方法。

    • Init.main()

    首先初始化 Kernel log,创建一块共享的内存空间,加载 /default.prop 文件,解析 init.rc 文件。

    init.rc 文件

    init.rc 文件是 Android 系统的重要配置文件,位于 /system/core/rootdir/ 目录中。 主要功能是定义了系统启动时需要执行的一系列 action 及执行特定动作、设置环境变量和属性和执行特定的 service。

    init.rc 脚本文件配置了一些重要的服务,init 进程通过创建子进程启动这些服务,这里创建的 service 都属于 native 服务,运行在 Linux 空间,通过 socket 向上层提供特定的服务,并以守护进程的方式运行在后台。

    通过 init.rc 脚本系统启动了以下几个重要的服务:

    • servic_emanager:启动 binder IPC,管理所有的 Android 系统服务
    • mountd:设备安装 Daemon,负责设备安装及状态通知
    • debuggerd:启动 debug system,处理调试进程的请求
    • rild:启动 radio interface layer daemon 服务,处理电话相关的事件和请求
    • media_server:启动 AudioFlinger,MediaPlayerService 和 CameraService,负责多媒体播放相关的功能,包括音视频解码
    • surface_flinger:启动 SurfaceFlinger 负责显示输出
    • zygote:进程孵化器,启动 Android Java VMRuntime 和启动 systemserver,负责 Android 应用进程的孵化工作

    在这个阶段你可以在设备的屏幕上看到 “Android” logo 了。

    以上工作执行完,init 进程就会进入 loop 状态。

    service_manager 进程

    ServiceManager 是 Binder IPC 通信过程中的守护进程,本身也是一个 Binder 服务。ServiceManager 进程主要是启动 Binder,提供服务的查询和注册。

    具体过程详见 Binder:Android Binder 进程间通讯

    surface_flinger 进程

    SurfaceFlinger 负责图像绘制,是应用 UI 的和兴,其功能是合成所有 Surface 并渲染到显示设备。SurfaceFlinger 进程主要是启动 FrameBuffer,初始化显示系统。

    media_server 进程

    MediaServer 进程主要是启动 AudioFlinger 音频服务,CameraService 相机服务。负责处理音频解析播放,相机相关的处理。

    Zygote 进程

    fork 创建进程过程:

    Zygote 进程孵化了所有的 Android 应用进程,是 Android Framework 的基础,该进程的启动也标志着 Framework 框架初始化启动的开始。

    Zygote 服务进程的主要功能:

    • 注册底层功能的 JNI 函数到虚拟机
    • 预加载 Java 类和资源
    • fork 并启动 system_server 核心进程
    • 作为守护进程监听处理“孵化新进程”的请求

    当 Zygote 进程启动后, 便会执行到 frameworks/base/cmds/app_process/App_main.cpp 文件的 main() 方法。

    App_main.main() //设置进程名,并启动 AppRuntime。
    AndroidRuntime::start() //创建 Java 虚拟机,注册 JNI 方法,调用 ZygoteInit.main() 方法。
    ZygoteInit.main()   //为 Zygote 注册 socket,预加载类和资源,启动 system_server 进程。
    

    然后 Zygote 进程会进入 loop 状态,等待下次 fork 进程。

    system_server 进程

    system_server 进程 由 Zygote 进程 fork 而来。接下来看下 system_server 启动过程。

    //首先会调用 ZygoteInit.startSystemServer() 方法
    ZygoteInit.startSystemServer()  
    //fork 子进程 system_server,进入 system_server 进程。
    
    ZygoteInit.handleSystemServerProcess()  
    //设置当前进程名为“system_server”,创建 PathClassLoader 类加载器。
    
    RuntimeInit.zygoteInit()    
    //重定向 log 输出,通用的初始化(设置默认异常捕捉方法,时区等),初始化 Zygote -> nativeZygoteInit()。
    
    nativeZygoteInit()  
    //方法经过层层调用,会进入 app_main.cpp 中的 onZygoteInit() 方法。
    
    app_main::onZygoteInit()// 启动新 Binder 线程。
    
    applicationInit()   
    //方法经过层层调用,会抛出异常 ZygoteInit.MethodAndArgsCaller(m, argv), ZygoteInit.main() 会捕捉该异常。
    
    ZygoteInit.main()   
    //开启 DDMS 功能,preload() 加载资源,预加载 OpenGL,调用 SystemServer.main() 方法。
    
    SystemServer.main() 
    //先初始化 SystemServer 对象,再调用对象的 run() 方法。
    
    SystemServer.run()  
    //准备主线程 looper,加载 android_servers.so 库,该库包含的源码在 frameworks/base/services/ 目录下。
    

    system_server 进程启动后将初始化系统上下文(设置主题),创建系统服务管理 SystemServiceManager,然后启动各种系统服务:

    startBootstrapServices(); // 启动引导服务
    //该方法主要启动服务 ActivityManagerService,PowerManagerService,LightsService,DisplayManagerService,PackageManagerService,UserManagerService。
    //设置 ActivityManagerService,启动传感器服务。
    
    startCoreServices();      // 启动核心服务
    //该方法主要
    //启动服务 BatteryService 用于统计电池电量,需要 LightService。
    //启动服务 UsageStatsService,用于统计应用使用情况。
    //启动服务 WebViewUpdateService。
    
    startOtherServices();     // 启动其他服务
    //该方法主要启动服务 InputManagerService,WindowManagerService。
    //等待 ServiceManager,SurfaceFlinger启动完成,然后显示启动界面。
    //启动服务 StatusBarManagerService,
    //准备好 window, power, package, display 服务:
    //	- WindowManagerService.systemReady()
    //	- PowerManagerService.systemReady()
    //	- PackageManagerService.systemReady()
    //	- DisplayManagerService.systemReady()
    

    所有的服务启动完成后会注册到 ServiceManager。
    ActivityManagerService 服务启动完成后,会进入 ActivityManagerService.systemReady(),然后启动 SystemUI,WebViewFactory,Watchdog,最后启动桌面 Launcher App。

    最后会进入循环 Looper.loop()。

    ActivityManagerService 启动

    启动桌面 Launcher App 需要等待 ActivityManagerService 启动完成。我们来看下 ActivityManagerService 启动过程。

    ActivityManagerService(Context) 
    //创建名为“ActivityManager”的前台线程,并获取mHandler。
    //通过 UiThread 类,创建名为“android.ui”的线程。
    //创建前台广播和后台广播接收器。
    //创建目录 /data/system。
    //创建服务 BatteryStatsService。
    
    ActivityManagerService.start()  //启动电池统计服务,创建 LocalService,并添加到 LocalServices。
    
    ActivityManagerService.startOtherServices() -> installSystemProviders()
    //安装所有的系统 Provider。
    
    ActivityManagerService.systemReady()
    //恢复最近任务栏的 task。
    //启动 WebView,SystemUI,开启 Watchdog,启动桌面 Launcher App。
    //发送系统广播。
    

    启动桌面 Launcher App,首先会通过 Zygote 进程 fork 一个新进程作为 App 进程,然后创建 Application,创建启动 Activity,最后用户才会看到桌面。

    完整启动过程

    这里写图片描述

    参考资料

    其他系列

    Gradle 系列

    更多文章:

    这是我博客长期更新的项目,欢迎大家 Star。
    https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode

    我的公众号

    欢迎你「扫一扫」下面的二维码,关注我的公众号,可以接受最新的文章推送,有丰厚的抽奖活动和福利等着你哦!?

    如果你有什么疑问或者问题,可以 点击这里 提交 issue,也可以发邮件给我 jeanboy@foxmail.com

    同时欢迎你 Android技术进阶:386463747 来一起交流学习,群里有很多大牛和学习资料,相信一定能帮助到你!

    展开全文
  • 电脑吃灰有段时间了,事情忙完空闲下来,打开电脑貌似就升级了下系统,后面开机就会卡在开机logo那里,必须强制关机再次开机才能进入系统。每次都是这样。 尝试 想过驱动不兼容的问题,升级驱动无果。 想过卸载更新...

    问题

    电脑吃灰有段时间了,事情忙完空闲下来,打开电脑貌似就升级了下系统,后面开机就会卡在开机logo那里,必须强制关机再次开机才能进入系统。每次都是这样。

    尝试

    1. 想过驱动不兼容的问题,升级驱动无果。
    2. 想过卸载更新,通过卸载更新补丁,再次开机依旧无果。
    3. 综合网上的搜索结果可能与电脑休眠有关。部分人反应关掉电脑休眠的确没有这种情况了。不过,对这次的问题依旧没有帮助。

    解决方法

    下面介绍解决了我所遇见问题的方法:(sfc 命令和DISM命令)

    步骤:
    1、按住Win+X打开选择命令提示符(管理员),输入以下指令:
    
    		sfc /scannow
    
    2、运行以下指令:
    
    		Dism /Online /Cleanup-Image /CheckHealth
    
    		Dism /Online /Cleanup-Image /ScanHealth
    
    		Dism /Online /Cleanup-Image /RestoreHealth
    

    这里只是贴出我所遇见问题的解决方法,每个人遇到的情况可能不同,仅做参考。

    展开全文
  • win10两次开机才能启动系统

    千次阅读 2017-04-01 17:49:48
    系统配置,点击切换到“引导”选项卡,点击勾选“无GUI引导”后确定退出设置窗口。这样就可以了,重启看看还有没有两次logo 第二种尝试1、按住Win+X打开选择命令提示符(管理员),输入以下指令:sfc /scannow2、...

    第一种尝试:
    1. 用Win+R调出运行命令,输入“msconfig”后回车。

    1. 在系统配置,点击切换到“引导”选项卡,点击勾选“无GUI引导”后确定退出设置窗口。这样就可以了,重启看看还有没有两次logo

    第二种尝试

    1、按住Win+X打开选择命令提示符(管理员),输入以下指令:

    sfc /scannow

    2、运行以下指令:

    Dism /Online /Cleanup-Image /CheckHealth

    Dism /Online /Cleanup-Image /ScanHealth

    Dism /Online /Cleanup-Image /RestoreHealth

    以上两种小编都试过,反正问题解决了,至于哪种有效,小编没深究

    展开全文
  • Android系统启动流程

    万次阅读 多人点赞 2019-02-12 17:35:34
    当电源键按引导芯片代码从预定义的地方(固化在ROM)开始执行。加载引导程序BootLoader到RAM中,然后执行。 2、引导程序BootLoader: 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主.....

    在此说明,此文章只是个人的一个关于“Android系统启动流程”的一个总结,没什么源码。

    Android系统启动流程:

    1、启动电源以及系统启动:

    当电源键按下时引导芯片代码从预定义的地方(固化在ROM)开始执行。加载引导程序BootLoader到RAM中,然后执行。

    2、引导程序BootLoader:

    引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。

    3、Linux内核启动:

    当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。

    4、init进程启动:

    初始化和启动属性服务,并且启动Zygote进程。

    5、Zygote进程启动:

    创建java虚拟机并为java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。

    6、SystemServer进程启动:

    启动Binder线程池和SystemServiceManager,并且启动各种系统服务。

    7、Launcher启动:

    被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。

     

    其中前3个我们就不怎么介绍了,主要来看下后面四个过程。

    一、init进程启动、

    init进程是Android系统中用户控件的第一个进程,进程号是1。

    整个启动过程做了很多工作,不过总的来说分为以下三个部分:

    (1)创建和挂载启动所需的文件目录:

    这是init进程启动开始的第一步,其中挂载了tmpfs、devpts、proc、sysfs和selinuxfs共5种文件系统,这些都是系统运行时目录,顾名思义,只在系统运行时才会存在,系统停止时会消失。

    (2)初始化和启动属性服务

    首先在初始化属性服务之前,会调用一个signal_handler_init函数用于设置子进程信号处理,主要为了防止init进程的子进程称为僵尸进程,同时为了防止僵尸进程的出现,系统会在子进程暂停和终止的时候发出SIGCHLD信号,而signal_handler_init函数就是用来接收SIGCHLD信号的。举例:加入init子进程终止了,signal_handler_init函数最终会找到子进程并移除所以的子进程的信息,再重启子进程服务的进程脚本中待遇onrestart选项的服务。

    属性服务其实类似于windows平台上的注册表管理器,主要用来存储一些属性,比如我们通过“getprop”命令获取的那些属性内容,设备的id、序列号、厂商啊什么的。

    系统属性分为:控制属性和普通属性两种,控制属性用来执行一些命令,比如开机的动画等,比较属性名以“ctl.”开头的。普通属性比如手机厂商、型号这种就是普通属性,比如:“ro”、“persist”开头的等。

    如果权限足够的话,就可以修改属性值,本身不存在此属性的话会进行属性值的添加。

    (3)解析init.rc配置文件并启动Zygote进程

    首先init.rc文件在系统的根目录下,它是由Android初始化语言(Android Init Language)编写的脚本,主要包含5中类型语句:Action、Command、Service、Option和Import。

    init.rc里面主要是用到了Action和Service语句,其中 on 开头的比如“on init”、“on boot”就是Action语句,“service”开头的就是Service语句(大部分都是这个)。

    init进程会解析对应的init.rc文件,然后执行响应的程序。init.rc脚本中每一个执行语句会定义对应的进程名称、可执行文件路径、参数、入口函数、用户分类等等信息,init进程解析完后并启动init.rc中定义的所有进程,其中包括“Zygote”进程。

    Android8.0以后真的init.rc进行了拆分:其中Zygote进程拆分到了init.zygote32.rc(32位)、init.zygote64.rc(64位)文件中了。

    说明:此过程是在c/c++层做的。

    二、Zygote进程启动过程:

    在Android系统中,DVM和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。

    Zygote进程主要做了如下几个工作:

    (1)创建AppRuntime并调用其start方法,启动Zygote进程(此过程是在init进程结束的时候执行的)

    (2)创建java虚拟机并为java虚拟机注册JNI方法

    此步骤主要是通过JNI进行一个从native层到java层的一个过渡。

    (3)通过JNI调用ZygoteInit的main函数进入Zygote的java框架层

    (4)通过registerZygoteSocket方法创建服务器Socket

    通过registerZygoteSocket创建一个server端的socket,其中name为“zygote”,来等待ActivityManagerService请求Zygote来创建新的应用程序进程,同时进行预加载类和资源。

    (5)启动SystemServer进程

    Zygote通过fork方法创建SystemServer子进程。创建的SystemServer进程的用户id和组id为1000,进程名为:system_server,启动的类名为:com.android.server.SystemServer。

    (6)通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程

    此方法中存在一个列表fds,用了保存AMS传送过来的要创建子进程的信息,这里面启动了一个无限循环,用来等待AMS请求Zygote进程创建新的应用进程,每次AMS来连接后会存放到fds中,创建子进程成功后,将对应连接从fds列表中删除。

    三、SystemServer进程启动过程:

    SystemServer进程主要用于创建系统服务,我们熟知的AMS、WMS和PMS都是由它来创建的。

    SystemServer进程启动后主要做的工作如下:

    (1)启动Binder线程池,这样就可以与其他进程进行通信

    通过调用native层的代码nativeZygoteInit方法,来启动一个Binder线程池

    (2)创建SystemServiceManager,其用于对系统的服务进程创建、启动和生命周期管理

    启动Binder线程池后,紧接着会进入SystemServer的main方法(可以看做是SystemServer进程的入口),在main方法中,首先会创建一个消息looper,紧接着便会创建SystemServiceManager,它会对系统服务进行创建、启动和生命周期管理。

    (3)启动各种系统服务

    首先系统服务分为三种:引导服务、核心服务、其他服务。SystemServiceManager会依序将所有系统服务启动起来。对应方法为:startBootstrapServices()、startCoreServices()、startOtherServices()。

    引导服务比如:PowerManagerService、ActivityManagerServer、PackageManagerService等

    核心服务比如:BatteryService、UsagestatsService等

    其他服务比如:WindowManagerService、CameraService、AlarmManagerService等

    服务启动后会添加到mServices集合中,其中mServices是一个存储SystemService类型的ArrayList。上述所有系统服务都是SystemService的子类。Client端如果要使用某个Service,则需要查询对应的Service的相关信息,然后根据Service的额相关信息与Service所在的Server进程建立通信通路,这样Client端就可以使用Service了。

    四、Launcher启动过程:

    系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做Launcher。Lanucher在启动过程中会请求PackageManagerService返回系统中已经安装的应用程序信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上。

    通俗来讲Launcher就是Android系统的桌面,它的主要作用有:

    (1)作为Android系统的启动器,用于启动应用程序

    (2)作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。

    1、Launcher的的启动过程:

    首先SystemServer进程会在启动的过程中启动PackageManagerService,PackageManagerService启动后会将系统中的应用程序安装完成,再此前已经启动的AMS会将Launcer启动起来,启动Launcher的入口为AMS的systemReady方法,它在Systemserver的startOtherServices(启动其他服务)方法中被调用。(注:AMS是在startBootstrapServices()方法中启动的)。

    systemReady方法中最终是通过Intent进行启动的,其中action为:Intent.ACTION_MAIN、Category为Intent.CATEGORY_HOME。启动方法与普通的activity方式类似。

    2、Launcher中应用图标显示过程:

    首先加载所有应用信息是在内部创建了一个HandlerThread,然后通过handler循环调用来加载所以应用的。然后把allApps信息传递给一个AllAppsRecyclerView控件的adapter来进行展示的。

    Launcher是用工作区的形式来显示系统安装的应用程序的快捷图标的,每一个工作区都是用来描述一个抽象桌面的,它由n个屏幕组成,每个屏幕又分为n个单元格,每个单元格用来显示一个应用程序的快捷图标。

     

    借图一张说明:

    说明:文章只是做了一个总结而已,如果需要详细了解的话,可以看下如下文章:

    Android系统启动流程(一)解析init进程启动过程

    Android系统启动流程(二)解析Zygote进程启动过程

    Android系统启动流程(三)解析SyetemServer进程启动过程

    Android系统启动流程(四)Launcher启动过程与系统启动流程

     

    展开全文
  • Mac系统不能启动,Option大显神通

    千次阅读 2009-12-02 16:39:00
    系统装好后,一直使用比较正常,最近反映启动时,有问题,几个小时都启动不了,等很久,偶尔能启动一次,今天拿过来,让我看看是怎么回事.我各种方法都试了一次,也还是不行.我怀疑当前启动系统可能破坏了,如果能启动另外...
  • 切换Linux系统启动时的内核

    千次阅读 2017-12-19 23:57:59
    最近在Linux的实验,编译内核,添加系统调用什么的 编好内核之后,发现重启之后,没办法启动编好的内核…… 网上查阅了很多关于如何切换Linux的内核的问答,本以为这不是个难题,但我发现网上大部分资料都没有真正...
  • 启动系统时无法正常启动提示\windows\system32\winload.efi 解决方案 解决方法如下: 1、去bios把security boot改成disabled即可,一般DEL进bios,笔记本电脑可能需要其他快捷键,一般在开机的时候都会有提示...
  • 各位Mac忠实用户,如果你使用的是mac正版【原生】操作系统的设备:如 imac、macbook、mac mini 等。如果你是一位专业的mac驱动开发人员或者对mac驱动感兴趣的人员,当你的设备突然间 键盘、鼠标 都无法正常工作,...
  • 恢复计算机 ...如果您的系统已经创建了分区,并只想恢复C:驱动器,请在步骤5选择恢复类型 自定义恢复-仅恢复C:驱动器 ,然后屏幕操作完成恢复过程。       ( 关注微信公众 号,获取更多 内容 )
  • 今天遇到一个bug,app通过QQ接受后首次安装或者从某些市场下载首次安装后,桌面点击启动,先经过启动页,然后到达首页,接着home,接着再从桌面点击启动图标,照理正常的应该打开之前的首页,但是这是启动页又再...
  • 在程序入口界面的onCreate()方法添加如下代码即可 if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { finish(); return; }  ...
  • 开机option,进入系统选择界面: 用左右方向选择到你要设置为默认启动的盘,然后同时下ctrl+enter,即可将其设置为默认启动系统。 解决方案2: 选择mac系统进入后, 点击 系统偏好设置----->...
  • 想在 C 中 back 直接返回到 A,但是 back 返回的是 B 。怎么办? 其实很简单,只需要设置 B 的启动模式为 singleInstance,然后在 B 启动 C 之后 finish() 即可。 例如: <activity android:name=".
  • 1、启动系统,在进入系统之前连续键盘上的“Esc”,让系统进入如下画面,再“e”进行编辑。 2、系统进入如下界面后,使用键盘的上下方向选择kernel那行,然后再e进入编辑。 3、...
  • 下Power后,计算机是如何启动的?   序言:上《计算机组成原理》课时,老师问了这个问题,看似每天都接触的计算机开机,作为一个计算机学子,应当有更细致的解释,所以上网上整理了一下。   计算机启动是...
  • BIOS是一组固化在电脑主板上的程序,它保存着计算机最...不知道开机后要按哪个键,电脑都有一个快捷键进入BIOS设置,一般是Del、F1、F2等等,下面跟小编一起来了解下电脑进入BIOS快捷键是什么。 相关推荐:win8.1...
  • 制作多系统启动U盘

    万次阅读 多人点赞 2018-09-17 22:46:30
    系统启动U盘制作 制作过系统启动盘的人都知道,一个U盘只要被制作成启动盘后,里面的文件将是杂乱无章的,抛开我们的强迫症不说,主要是这有失我们的逼格,不符合我们作为“会装系统”的大佬的形象啊!于是...
  • 电脑开机需要回车才进入系统

    万次阅读 2016-04-12 09:29:02
    电脑开机要回车 电脑开机需要回车 为什么开机要回车 win7开机要回车 开机要回车 hp笔记本开机回车 开机回车 开机回车 开机蓝屏回车
  • Mac系统用习惯之后,感觉bootcamp的windows是多余的,但是把windows删了后,问题来了,删除bootcamp win10之后,alt还存在windows启动盘图标,对于强迫症表示受不了 找了很多办法都因为Macintosh HD的只读性质...
  • 今天打开虚拟机写作业的时候突然出现了这样一个界面:“电脑因出现问题而重新启动,请一下按键,或等几秒钟以继续启动。” 我突然就想起是不是昨天看到VMware提示更新我就点了的缘故,然而并不知道如何是好。最后在...
  • 通过系统方式(系统安装器)安装应用,点击“打开”按钮,进入应用主界面,home后,点击应用图标进入,应用会出现重新启动。当完全退出应用后,再通过启动图标进入应用,便不会出现重复启动问题。目前测试大部分...
  • 我的系统启动时提示找不到NTLDR文件

    万次阅读 2006-05-22 16:27:00
    问:NTLDR文件是WinXP的引导文件,当此文件丢失时启动系统会提示其缺失并要求任意重新启动,但每一次启动后都会出现提示,不能正确进入 WinXP系统。在故障恢复控制台下可以比较容易提取到该文件,因为这个文件...
  •  如果初学linux或者一些系统升级误删了系统文件,导致系统启动异常怎么办?重装系统,不用,有三种方法可以进行系统恢复。  1、用u盘启动盘恢复系统文件  制作linux u盘启动盘,制作方法不详述,可以用软碟通...
  • 首先我们来看现象:1、第一次点击图标启动应用是启动首界面A,然后进入第二个界面B;...1、启动新应用 一般情况下当我们启动一个应用后系统会新建一个Task用来存放Activity的实例,一个一个挨个放进去...
  • linux系统启动过程分析

    万次阅读 2015-11-24 00:03:47
    经过对Linux系统有了一定...这当中就包括系统启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行的异同、协议栈的架构和原理、驱动程序的机制等等。  本人在综合了现有网上大家智慧的基础
  • 第一次打开电脑提示电量低,然后就了关机,插上充电器之后就出现这种页面,而且提示修复之后就是恢复出厂?? 然后选择了退出再了关机。 过了两三分钟重新打开电脑,终于出现了登陆页面。 可能是电量低会...
  • 安卓开发中,release安装包安装后,打开app后再home,再次点击程序图标app再次重新启动的解决办法 在开发中我们一般都是直接AS上的安装(Run)按钮,直接安装到真机或模拟器上进行测试,但是当发布就要先打包...
  • 使用BOOTICE 恢复系统启动

    千次阅读 2016-09-10 18:32:18
    使用BOOTICE 恢复系统启动项我在安装deepin 系统的时候,经常遇到重启进不去系统,每次重启都会进入windows 系统,这让我感到特别头疼,试了好多次都不成功,有些情况是,成功后再次重启又回到了windows系统。...
  •  其实禁用网上邻居,可以简单的从注册表禁用,不过这样太苍白无力了,既然,就强悍点,直接从服务入手,彻底kill网上邻居服务(是篡改服务文件,而不是简单的暂停服务),神也无力回天,除非修复系统。...
  • 有两种方法:第一种是进BIOS更改启动顺序,把U盘的顺序提到第一个位置(待系统安装好后还需拔出U盘或更改硬盘为第一启动项)。 第二种是F12或Fn+F12快捷键打开启动菜单,选择本次从U盘启动(无需频繁更改或拔出U盘...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530,862
精华内容 212,344
关键字:

做系统启动时按哪个键