随笔之GoldFish Kernel启动过程中arm汇编分析

  分析

电子版下载地址:进入我的资源就能找到

http://download.csdn.net/detail/innost/4834459

本节介绍Kernel启动。此时Piggy已经将vimlinux解压,BL将执行权限传给了Kernel

代码在arch/arm/kernel/head.S中。相关代码如下:

//将采用C/C++注释语句

/*

   .section是GNU ASM的语法。格式如下:

    .section name[,"flags"[,@type]]   其中,name是必须的,flags是可选。

    "ax"表示:a为section is allocatable,x为executable。

*/

   .section ".text.head", "ax"

 

//这个ENTRY(stext)有相当的含义。在kernel/vmlinux.ld.S中,也定义了一个ENTRY。在ld

//语法中,ENTRY是一个command,用来定义入口点。所以,这里就是kernel执行的入口点函数。

ENTRY(stext)

   /*

     MSR:是ARM汇编指令,用来将数据copy到status register寄存器中。cpsr_c表示要操作

     CPSR寄存器的Control标志。

   */

  

    msr    cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode

                        @ and irqs disabled

1.1  MSR设置I/FCPU Mode

CPSR全称是Current Process Status Register,用来表示当前CPU的状态,也可用于控制。相关控制位如图1所示:

1 CPSR控制位

由图1可知:

q  N/Z/C/V控制位用来表示负//进位/溢出,属于User Flags,即可在UserMode下操作。A

q  I/F表示InterruptFast Interrupt使能位。

q  Mode用来控制CPU当前的模式。ARM CPU一共有7种模式。

根据上面的代码,首先将禁止I/F中断,并进入Supervisor模式,也就是OS运行的模式。图2ARM CPU支持的CPU模式。

2  ARM CPU支持的运行模式

另外,MSR指令操作的格式如下:

3  MSR指令格式

其中最重要的是fields,目前支持:

q  c:设置control bit。对应位为16

q  x:设置extension bit。对应位为17

q  s:设置status bit。对应位为18

q  f:设置flags field。对应位为19

4 MSR二进制格式

直接看上面的解释,还不是很清楚,因为设置的是MSR指令本身的内容,具体对应到CPSR呢,则可通过下面的伪语句得到:

5 MSR 设置说明

从代码可知:

msr    cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE

//上面代码将设置CPSR的0到第7位,刚好是控制I/F和设置CPU模式的。

1.2  ARM CP15协处理器控制

设置好CPU模式后,下面的工作就是获取CPU的信息。在ARM中,协处理(coprocessor15中用于管理CPU信息和MMU相关的工作。CP15也是ARM中最重要的处理器,以后会经常碰到。

先看下面这条语句:

    mrc    p15, 0, r9, c0, c0        @ get processor id

MRCARM指令,用来从协处理对应的寄存器读取信息到CPU的寄存器,对应写协处理寄存器的指令是MCR。二者的语法格式(注意,是操作CP15的时候)如图6所示:

6  MRC操作CP15的格式说明

q  Rd:本指令用得是R9,也就是协处理的信息会保存到R9中。

q  CRnMRC中协处理器的主要寄存器。此处用得是C0。标准写法是C0C1一直到C15

q  CRm:附属信息。如果没有附属信息,则使用C0

q  opcode2,类似附属信息。根据CRn来决定是否需要。如果不指定,则使用0

CP15有很重要的作用,可通过操作CP15的寄存器来控制它。如图7所示:

7  CP15各个寄存器的作用

先来看此处操作的C0寄存器。

opcode2在指令中默认是0,所以将取出Main ID register的信息。

得到的结果将怎么使用呢?来看下一句指令:

bl    __lookup_processor_type        @ r5=procinfo r9=cpuid

BLARM中的跳转指令,相当于调用函数吧。__lookup_processor_type用来得到CPU信息。注意,这个函数调用的参数是R9R9的值是从CP15 C0寄存器读取出来的,而是是Main ID。下面看看此函数如何处理R9

1.3  __lookup_procesoor_type分析

该函数在head-Common.S中定义。下面逐行分析它,这里会碰到几个重要的指令及其用法。

__lookup_processor_type:

    //adr是一条伪指令,其作用是将3f标签的地址赋给R3。这个伪指令其实是可拆分成多条指令

   //由于后面的3f是相对当前PC位置而言,所以R3实际上存储的是3f的物理地址。

    adr    r3, 3f//f是forward之意。标志3在此代码之后声明

    /*

   ldm是load multiple register的意思,它的作用是将[r3]对应的内存内容存储到r5,r6,

    r7寄存器中。DA是Decrease After的意思。ARM汇编在这里有4种模式,DA,IA,DB,IB等

    此处的ldmda,将把3F所在的内容依序传递给R7,R6,R5。每传递一次,R3递减4个字节。

    */

    ldmda    r3, {r5 - r7}

上面语句执行完后:

q  R5=__proc_info_begin,这个值是虚地址。

q  R6=__proc_info_end

q  R7=.

以上几个值都是虚地址。__proc_info_begin/endld在链接时候指定的信息。

8  arc/arm/kernel/vmlinx.lds.S文件

从中可以看出,__proc_info_begin/end包含了代码中定义在.proc.info.init段的内容。如图9所示。

9  proc-V7.s定义的proc.info.init的内容

为什么是proc -v7.S文件呢,因为goldfish编译的就是这个文件。从图9可以看出,其实也就是定义了一个数据结构罢了。

接着来看代码

    //r3指向3f的物理地址,r7指向虚拟地址,而现在只能访问物理地址,所以需要找到一个offset

    sub    r3, r3, r7        @ get offset between virt&phys

    add    r5, r5, r3        @ convert virt addresses to

    add    r6, r6, r3        @ physical address space

经过上面的换算,r5,r6现在都指向__proc_info_begin/end的物理地址了。

    //ldmia将[r5]的内存信息存储到r3,r4中,每完成一次传输,r5自动加4.

1:  ldmia  r5, {r3, r4}        @ value, mask

    //下面将测试R9和mask之后的值是否是我们想要的r3的值。根据图9。应该是0x000f0000。

   //在Main ID register中,这表明[16-19]位是都是1.

    and    r4, r4, r9        @ mask wanted bits

    teq    r3, r4

    beq    2f   //如果是我们想要的数据,则跳转到2f

    //否则跳过一个PROC_INFO_SIZE,继续找,一般只有一个PROC_INFO结构体。

    add    r5, r5, #PROC_INFO_SZ    @ sizeof(proc_info_list)

    cmp    r5, r6

    blo    1b

   //如果没找到,则设置R5寄存器为0

    mov    r5, #0            @ unknown processor

2:  mov    pc, lr   //从函数返回

ENDPROC(__lookup_processor_type)

 

/*

 * 提供一个C接口的lookup_process_type函数

 */

ENTRY(lookup_processor_type)

    stmfd    sp!, {r4 - r7, r9, lr}

    mov    r9, r0

    bl    __lookup_processor_type

    mov    r0, r5

    ldmfd    sp!, {r4 - r7, r9, pc}

ENDPROC(lookup_processor_type)

 

    .long    __proc_info_begin

    .long    __proc_info_end

3:    .long    .

    .long    __arch_info_begin

    .long    __arch_info_end

lookup_process_type其实比较简单,这里就不再多说。但图9的内容以后还要回过头来继续介绍。那里将初始化CPU MMU相关的内容。

    //如果r5为空,则表示CPU信息获取是否,调用__error_p,退出整个启动

    movs    r10, r5                @ invalid processor (r5=0)?

    beq    __error_p            @ yes, error 'p'

 

否则,将调用__lookup_machine_type获取机器信息。

1.4  __lookup_machine_type分析

该函数也是在head-comm.S中定义的。

__lookup_machine_type:

    adr    r3, 3b  //b是backward的意思。标志3在此代码之前声明。

    //r4,r5,r6分别指向 label 3,__arch_info_begin和__arch_info_end

    ldmia    r3, {r4, r5, r6} 

    sub    r3, r3, r4

    add    r5, r5, r3

    add    r6, r6, r3

   //以上将得到__arch_info_begin/end的物理地址

 

1:  ldr    r3, [r5, #MACHINFO_TYPE]

    //比较r1和MACHINFO_TYPE是不是一致。注意,r1的值是BL传递给它的

    teq    r3, r1                @ matches loader number?

    beq    2f                @ found

    add    r5, r5, #SIZEOF_MACHINE_DESC    @ next machine_desc

    cmp    r5, r6

    blo    1b

    mov    r5, #0                @ unknown machine

2:  mov    pc, lr

ENDPROC(__lookup_machine_type)

这里涉及到另一个关键数据结构,也就是定义在.arch.info.init段中的。如图10所示:

10  .arch.info.init

从图10可知,这个段其实对应了一个数据结构,即machine_desc.在我们的goldfish平台中,它是这么定义的:

[arch/arm/mach-goldfish/board-goldfish.c]

//还需要加上:

   nr = MACH_TYPE_GOLDFISH

   name = "Goldfish"

MACHINE_START(GOLDFISH, "Goldfish")

    .phys_io    = IO_START,

    .io_pg_offst    = ((IO_BASE) >> 18) & 0xfffc,

    .boot_params    = 0x00000100,

    .map_io        = goldfish_map_io,

    .init_irq    = goldfish_init_irq,

    .init_machine    = goldfish_init,

    .timer        = &goldfish_timer,

MACHINE_END

完整的machine_desc定义如图11所示:

11 machine_desc定义

Goldfish中,nr1441。详情可参考arch/arm/tools/machine-types.h

另外,在BootLoader调用kernel之前,传递参数情况如图12所示:

12  arch/arm/boot/head.S调用kernel前传递参数

从图12可知:

q  r1保存的是machine nr

这部分代码属于BootLoader,相当复杂。以后再细说。

假设__lookup_machine_type一切正常

    bl    __lookup_machine_type        @ r5=machinfo

    movs    r8, r5                @ invalid machine (r5=0)?

    beq    __error_a            @ yes, error 'a'

1.5  __vet_atags分析

接下来的任务就是Kernel校验BL传递的启动参数了。这部分内容和BootLoader有较大关系。

    bl    __vet_atags

此处的核心概念就是ATAG_CORE/END之类的,由BootLoaderKernel传递参数,主要是tag结构体

arch/arm/include/asm/setup.h中。BL传递的是struct tag的链表,该链表以ATAG_CORE开头,以ATAG_NONE结尾。

#define ATAG_CORE    0x54410001

#define ATAG_NONE    0x00000000

struct tag_header {

    __u32 size;

    __u32 tag;

};

struct tag {

  struct tag_header hdr;  //首先是一个头,根据头部的tag来判断下面的union是哪个

  union {

    struct tag_core        core;

    struct tag_mem32    mem;

    struct tag_videotext    videotext;

    struct tag_ramdisk    ramdisk;

    struct tag_initrd    initrd;

    struct tag_serialnr    serialnr;

    struct tag_revision    revision;

    struct tag_videolfb    videolfb;

    struct tag_cmdline    cmdline;

    struct tag_acorn    acorn;

    struct tag_memclk    memclk;

  } u;

};

你可以根据上面的信息自行分析__vet_atags函数。

1.6  __create_page_tables分析

下面的任务就是调用__create_page_tables创建page table

    bl    __create_page_tables  //调用__create_page_tables函数

此函数就在head.S中定义,代码如下:

__create_page_tables:

    /*

       pgtbl是head.S中定义的一个宏,见下面的分析

    */

     pgtbl    r4

pgtbl定义了一个宏,相关代码如下:

//TEXT_OFFSET是kernel镜像在内存中的偏移量。一般定义为0X8000,即32KB处

//PHYS_OFFSET:是内核镜像在内存中的起始物理地址。上面二者之和就是内核镜像在机器上的

//物理地址。Goldfish平台中,PHYS_OFFSET为0。

//PAGE_OFFSET是Kernel镜像在虚拟内存的起始地址,一般是3G处

#define KERNEL_RAM_VADDR    (PAGE_OFFSET + TEXT_OFFSET)

#define KERNEL_RAM_PADDR    (PHYS_OFFSET + TEXT_OFFSET)

.macro    pgtbl, rd //此宏调用完毕后,r4的值就是0x4000,即16KB

    ldr    \rd, =(KERNEL_RAM_PADDR - 0x4000)

    .endm

接着看代码。

    mov    r0, r4

    mov    r3, #0

    add    r6, r0, #0x4000

    //STR将寄存器的值往内存中传送。r3为0,故内存的值被设置为0.每调用一次str,r0递增4

    //r0是base address,其值可自动增减。由arm address mode格式控制

1:  str    r3, [r0], #4

    str    r3, [r0], #4

    str    r3, [r0], #4

    str    r3, [r0], #4

    teq    r0, r6

    bne    1b //此循环调用完毕后,0x4000-0x8000的内存都被设置为0。此时r0=32KB

 

    //r10存储的是图9中proc_info的第三个long,也就是mmuflas,用于设置MMU参数

    ldr    r7, [r10, #PROCINFO_MM_MMUFLAGS] @ mm_mmuflags

1.6.1  ARM MMU设置介绍

虽然上面最后一条语句是一个简单的ldr,但背后的内容却相当丰富,不把它搞清楚,后面的内容将解释不清。来看proc-V7mm_mmuflags对应的值是什么

.long   PMD_TYPE_SECT | \   // #define PMD_TYPE_SECT (2 << 0)

        PMD_SECT_BUFFERABLE | \ //#define PMD_SECT_BUFFERABLE (1 << 2)

        PMD_SECT_CACHEABLE | \//#define PMD_SECT_CACHEABLE (1 << 3)

        PMD_SECT_AP_WRITE | \//#define PMD_SECT_AP_WRITE (1 << 10)

        PMD_SECT_AP_READ //#define PMD_SECT_AP_READ (1 << 11)

上面代码中把对应PMD_SECT_XXX的值显示出来,可知它无非是定义了一个32位的常量,某些位置的值为1,某些位置的值为0。为什么要怎么做呢?先来看ARM MMU所支持的虚实地址转换机制。

13  ARM MMU虚实地址转换

由图13可知:

q  虚地址VA[20-31]位和CP15 CR2[14-31]位共同构成First Level地址。

q  First Level地址将得到一个First Level Descripter,也就是图13中标明memory access的内容。

q  FLD中不同字段表明其内容是段寻址还是页寻址。主要是根据前2位来判断。如果前2位是0b10则是段寻址。

结合图13和前面的代码:

q  PMD_TYPE_SECT = 2<<0,刚好就是0b10

q  C|B控制CachableBuffable的,对应为[2,3]

q  AP对应为Access Point,对应为[10,11]位。

另外,DomainARM CPU的一个重要概念,主要和权限有关。以后碰到再说。

至此,当ldr r7 xx执行完后,r7的值包含了section base address对应的[0-12]位的值。而section base address本身却还没有赋值。

接下来的代码就是为了构造一个FLD的值。根据图13section base address应该是[20-31]

   //r6的值为当前PC值右移20位

    mov    r6, pc, lsr #20

    orr    r3, r7, r6, lsl #20        @ flags + kernel base

    //此时,r3的值就是一个基于段寻址的FLD。把它存起来。位置是r4+r6<<2

    str    r3, [r4, r6, lsl #2]      

现在r6存储的是段寻址的基地址,需要把这个值存储到对应表的位置,由于在表中,每一项是4个字节,所以这里需要乘以4,也就是lsl #2

稍微解释下这里左移4的原因:

1 r4存储的是表的起始地址

2 r6存储的是offset

3 r3存储的是往r4[offset]的值

4 由于1个offset实际上是4个字节,所以真实存储的位置就是r4[4*offset] = r3

1.6.2  设置页表

当理解上面代码后,下面就是把kernel虚拟地址的位置存储到r4表中了

继续看代码

   //立即数的计算比较难理解,网上也没有相关说法。不过,只要知道下面这段代码就是存储kernel

  //虚拟地址到对应页表位置即可

   add    r0, r4,  #(KERNEL_START & 0xff000000) >> 18

   str    r3, [r0, #(KERNEL_START & 0x00f00000) >> 18]!

    ldr    r6, =(KERNEL_END - 1)

    add    r0, r0, #4  //r0 = ro+4

    add    r6, r4, r6, lsr #18 //r6=r4+r6>>18

1:    cmp    r0, r6

    add    r3, r3, #1 << 20 //r3 += 1<<20,每次递增1M

    //ls是condition code,表示小于等于,即只要r0<=r6,strls就会执行

    strls    r3, [r0], #4

    bls    1b

 

   //map物理地址前1M到对应位置

   add    r0, r4, #PAGE_OFFSET >> 18

    orr    r6, r7, #(PHYS_OFFSET & 0xff000000)

    .if    (PHYS_OFFSET & 0x00f00000)

    orr    r6, r6, #(PHYS_OFFSET & 0x00f00000)

    .endif

    str    r6, [r0]

 

    mov    pc, lr

ENDPROC(__create_page_tables)

    .ltorg

1.6.3 总结

建议大家仔细体会create_page_tables这段内容。虽然以后不太可能会使用它们,但把这段代码搞清楚还是一个比较有意思的过程。

1.7  剩余工作

回到head.S,最后还剩下几句代码:

//将__switch_data的位置存储到r13

 ldr r13, __switch_data 

 //获取__enable_mmu标签的地址,并保存到lr中

 adr lr, __enable_mmu 

 //r10存储的是__v7_proc_info的地址,#PROCINFO_INITFUNC是一个偏移量

 //执行完下条语句后,pc指向__v7_proc_info的b __v7_setup,故下面这条语句就是

 //执行__v7_setup函数

 add pc, r10, #PROCINFO_INITFUNC

ENDPROC(stext)

1.7.1  __switch_data说明

__switch_data标签如下,主要存储了一些数据。

[head-common.S]

 .type __switch_data, %object

__switch_data:

 .long __mmap_switched

 .long __data_loc   @ r4

 .long _data    @ r5

 .long __bss_start   @ r6

 .long _end    @ r7

 .long processor_id   @ r4

 .long __machine_arch_type  @ r5

 .long __atags_pointer   @ r6

 .long cr_alignment   @ r7

 .long init_thread_union + THREAD_START_SP @ sp

以后再讨论具体作用。

1.7.2  __v7_setup

先来看

add pc, r10, #PROCINFO_INITFUNC

实际上就是执行__v7_setup函数。代码在mm/proc-v7.S中。

adr r12, __v7_setup_stack  @ the local stack

 stmia r12, {r0-r5, r7, r9, r11, lr}

 bl v7_flush_dcache_all

 ldmia r12, {r0-r5, r7, r9, r11, lr}

 mov r10, #0

dsb

#ifdef CONFIG_MMU  //goldfish定义了这个配置项

 mcr p15, 0, r10, c8, c7, 0  @ invalidate I + D TLBs

 mcr p15, 0, r10, c2, c0, 2  @ TTB control register

 orr r4, r4, #TTB_FLAGS

 mcr p15, 0, r4, c2, c0, 1  @ load TTB1

 mov r10, #0x1f   @ domains 0, 1 = manager

 mcr p15, 0, r10, c3, c0, 0  @ load domain access register

#endif

 ldr r5, =0xff0aa1a8

 ldr r6, =0x40e040e0

 mcr p15, 0, r5, c10, c2, 0  @ write PRRR

 mcr p15, 0, r6, c10, c2, 1  @ write NMRR

 adr r5, v7_crval

 ldmia r5, {r5, r6}

    mrc p15, 0, r0, c1, c0, 0  @ read control register

 bic r0, r0, r5   @ clear bits them

 orr r0, r0, r6   @ set them

//最后一句,将lr赋值给pc。执行完后,将跳到__enable_mmu函数。

 mov pc, lr    @ return to head.S:__ret

ENDPROC(__v7_setup)

上面代码大多是执行ARM v7 CPUMMU相关设置的,而其中的汇编语句到比较简单。这也是ARM MMU设置的核心内容。下面我们将结合ARM CPU Rerference简单介绍下这些设置的内容。

请务必从ARM官方网页上下载下面两个文档:

q  DDI0344D_cortex_a8_r2p1_trm.pdf:介绍CORTEX A8相关内容

q  DDI0406B_arm_architecture_reference_manual_errata_markup_10_0:最新的ARM架构参考手册

1.     如何看懂MMU设置并掌握理论知识

以下面这个设置为例:

mcr p15, 0, r10, c8, c7, 0

打开参考文档DDI0344D_cortex_a8_r2p1_trm.pdf的第112页。从这一页开始,C15协处理器的各个寄存器的配置都有详细的说明。如图14所示

14 C8寄存器的设置

上图中,左边空白区域对应的是C8。可知,c8,c7,0的组合对应的是Invalidate unified TLB unlocked entries.详细说明在page3-99

如果在此文档中碰到有不理解的内容,就需要参考DDI0406B_arm_architecture_reference_manual_errata_markup_10_0。该文档会介绍一些理论知识。

篇幅原因,我就不在这里啰嗦。已经告诉大家如何钓鱼了,请大家自己尝试!

1.7.3  __enable_mmu介绍

__v7_setup最后已经的mov pc, lr将使得CPU跳转到__enable_mmu处,其代码如下所示:

__enable_mmu:

#ifdef CONFIG_ALIGNMENT_TRAP

 orr r0, r0, #CR_A

#else

 bic r0, r0, #CR_A

#endif

#ifdef CONFIG_CPU_DCACHE_DISABLE

 bic r0, r0, #CR_C

#endif

#ifdef CONFIG_CPU_BPREDICT_DISABLE

 bic r0, r0, #CR_Z

#endif

#ifdef CONFIG_CPU_ICACHE_DISABLE

 bic r0, r0, #CR_I

#endif

//设置domain的权限,请参考前面的书籍了解DOMAIN在ARM MMU中的意义

mov r5, #(domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \

        domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \

        domain_val(DOMAIN_TABLE, DOMAIN_MANAGER) | \

        domain_val(DOMAIN_IO, DOMAIN_CLIENT))

//请参考前面的方法,了解下面这两条语句的实际作用

 mcr p15, 0, r5, c3, c0, 0  @ load domain access register

 mcr p15, 0, r4, c2, c0, 0  @ load page table pointer

 b __turn_mmu_on //跳转到__turn_mmu_on

ENDPROC(__enable_mmu)

简单看看__turn_mmu_on

__turn_mmu_on:

 mov r0, r0 //类似nop的空指令,浪费一点CPU时间,怕引起race condition发生

//c1,c0这两个控制MMU的设置

 mcr p15, 0, r0, c1, c0, 0  @ write control reg

 mrc p15, 0, r3, c0, c0, 0  @ read id reg

 mov r3, r3

 mov r3, r3

//此时,MMU就正式启动了

 mov pc, r13 //r13指向__switch_data

ENDPROC(__turn_mmu_on)

MMU启动后,我们也无需管什么物理地址还是虚拟地址,直接去看对应地址的代码即可。如果您非对这个转换过程很感兴趣,建议您把那两个参考书好好瞅瞅。

1.7.4  __mmaped_switched介绍

__switch_data第一个定义的就是__mmaped_switchedPC将执行这里的指令:

__mmap_switched:

 adr r3, __switch_data + 4

 

 ldmia r3!, {r4, r5, r6, r7}

 cmp r4, r5    @ Copy data segment if needed

1: cmpne r5, r6

 ldrne fp, [r4], #4

 strne fp, [r5], #4

 bne 1b

 

 mov fp, #0    @ Clear BSS (and zero fp)

1: cmp r6, r7

 strcc fp, [r6],#4

 bcc 1b

 

 ldmia r3, {r4, r5, r6, r7, sp}

 str r9, [r4]   @ Save processor ID

 str r1, [r5]   @ Save machine type

 str r2, [r6]   @ Save atags pointer

 bic r4, r0, #CR_A   @ Clear 'A' bit

 stmia r7, {r0, r4}   @ Save control register values

//上面我就懒得废话了,下面这句代码相信各位都很了解。执行start_kernel函数。

 b start_kernel

ENDPROC(__mmap_switched)

 

二总结

我觉得需要说明下为什么写这篇文章:

早在20107月的时候,我就看了那本鼎鼎大名的《ARM体系结构与编程》,这应该是第一本系统介绍ARM体系结构和编程的书。但是没看懂,全是枯燥的ARM CPU设置,纯教科书。

最近因为工作的原因,想把ARM这块重新捡起来,想起2年的痛苦,觉得应该换个思路。ARM也好,汇编也好,我们应该关注它的目的,而不是具体它是怎么实现的。即了解What to do比了解How to do更重要(仅我个人目的而言,前者重要。不过在某些追求细节的时候,后者重要。需要你自己去判断)。根据这个思路,我选择以Linux Kernel启动为分析对象,大致研究流程如下:

q  先花几天时间了解下ARM汇编的大概语句。

q  直接上代码分析。不过你得对Kernel启动的流程稍有了解。还好我在《深入理解AndroidI》写完后,花了点时间把这块整理了下。请参考http://blog.csdn.net/innost/article/details/6693731

q  碰到不懂的汇编语句,就查参考手册。这些还只是针对一些没有背景知识的语句。

q  当碰到类似CP15操作的语句时,其背后往往包含了较多的CPU相关的知识,这时候就需要查阅前面提到的两本参考书籍,去真真正正了解ARM CPU运行的相关原理。

大概经过2周先痛苦挣扎,到后面豁然开朗的过程,后续的研究就非常非常流畅了。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. day43_JavaScript(ECMAScript:客户端脚本语言的标准)

    JavaScript简介概念: 一门客户端脚本语言,他是运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎。脚本语言:不需要编译,直接就可以被浏览器解析执行了。功能:可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户…...

    2024/4/21 11:33:46
  2. 使用js格式化json

    var jsonStr;// json字符串// 格式化json字符串 var jsonFormat = formatJson(jsonStr);// 工具方法 var formatJson = function(json, options) {var reg = null,formatted = ,pad = 0,PADDING = ; // one can also use \t or a different number of spaces// optional se…...

    2024/4/21 11:33:46
  3. 计算机语言种类

    今天来总结一下语言的种类,语言的种类从不同的角度会有不同的划分,比如机器语言、汇编语言、高级语言、低级语言(机器语言及汇编语言)、编译语言、解释型语言、脚本语言、动态语言、静态语言、函数式语言(比如F#及Scala)、命令式语言、面向对象语言(比如C++及JAVA)、过程式语…...

    2024/4/21 11:33:45
  4. 50条超级变态的网名

    0.专家鉴定八级变态(有学问,性质和程度都坦白出来了,还是专家鉴定!) 1.牛拦织女 (拦路??劫色??) 2.赛跑 (资源紧张啊!) 3.盘古开苞 (遥远的梦想,我也想) 4.女娲补锅 (原来女娲也喜欢湘剧啊) 5.罗密欧煮你爷 (快打110,叫你爷快跑啊) 6.梁山伯揍英台 (家庭暴力的典型案例) 7.…...

    2024/4/21 11:33:43
  5. Android Goldfish详解之二

    一.Android版本与Linux内核的关系二.下载源码分为2大部分 1.Android源码; 2.Android内核(Android Linux Kernel); 三.如何下载Android内核 git clone git://android.git.kernel.org/kernel/common.git 四.如何查看Android内核的版本(代码级查看) 在内核代码目录: 运行…...

    2024/4/20 17:02:37
  6. js 格式化金额

    jsp页面要对金额数字进行格式化显示具体的需求如下: 12345格式化为12,345.00 12345.6格式化为12,345.60 12345.67格式化为 12,345.67 只留两位小数。 方法:function fmoney(s, n) { n = n > 0 && n <= 20 ? n : 2; s = parseFloat((s + ""…...

    2024/4/20 17:02:35
  7. 免费的计算机编程类中文书籍大汇总

    免费的编程中文书籍索引免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版github 上的一个流行的编程书籍索引 中文版 感谢 @siberiawolf 使用 Bootstrap 开发了网…...

    2024/4/20 17:02:34
  8. fish_redux之component基础使用

    组件构成-component #####Demo地址 ######看下他们之间的关系######他们的构成关系可以划分为一下几个部分state->connector->component page->dependencies->IdentifierKey->connector+component view->widget(viewService.buildComponent(IdentifierKey)) …...

    2024/4/20 17:02:33
  9. javascript格式化输出的实现(MuJS)

    MuJS是一款支持嵌入式开发的轻量级javascript解释器。 javascript主要是针对web开发的脚本语言,所以主要借助浏览器来调试;但mujs针对的是嵌入式开发,调试时的交互主要靠输入输出终端,javascript本身是不支持的,所以需要调用c语言的打印函数来实现。下面给出两个例子,一…...

    2024/4/20 17:02:33
  10. 诱导年轻人自杀的蓝鲸死亡游戏创始人Philip Budeikin认罪伏法

    国际新闻:据英国《每日邮报》5月10日报道,21岁的俄罗斯人,蓝鲸死亡游戏创始人Philip Budeikin被指控至少煽动16名女生参加他的蓝鲸自杀社交媒体热潮,他告诉调查员,她们都“很高兴去死”,警方担心这股热潮正在进入英国。游戏受害者Angelina Davydova,12岁,在2015年圣诞节…...

    2024/4/20 17:02:33
  11. Big Fish推出付费订阅游戏服务,苹果火线叫停

    在数天前,来自西雅图的游戏开发商Big Fish成为了第一家在iTunes上推出付费订阅游戏服务的游戏公司。该公司与苹果曾达成一项协议,根据协议,BigFish将向其用户提供付费订阅游戏,月订阅费为6.99美元。Big Fish同时也推出了免费订阅服务,玩家可通过收看广告获得每小时30分钟的…...

    2024/4/20 17:02:31
  12. 元编程实现优雅的懒加载

    如果你想直接看用getter拦截器实现资源懒加载的EcmaScript代码,不想听我讲一大堆理论的话,可直接从第4个大标题读起。专业名词广义化计算机行业发展了这么多年,出现过无数的专业名词,有的古老名词过时了并被人们淡忘,但有的古老名词不仅没过时,还从本身的狭义概念上升到广…...

    2024/4/20 17:02:29
  13. 一名游戏制作人的设计感悟

    【GA游戏策划新手营】 酝酿了很久,终于决定提起笔来写一点这几年来自己对游戏的一些感悟心得,策划这玩意跟做营销是一样,对不同人群做不同的营销策略,做到最后其实都是殊途同归。要学会跳出游戏本身站在人性需求的高度去看整个设计,这是每个策划的最终追求和设计水平高低的…...

    2024/4/21 11:33:44
  14. Fried Fish

    原题链接 Fried Fish大意: 一个平底锅煎饼(鱼),有 N 条鱼和,一个锅煎 K 个鱼,求最少时间。思路: 鱼分为两面,面数除以 K 即可。 注意特判。#include <bits/stdc++.h> using namespace std; typedef long long ll; #define mem(s,t) memset(s,t,sizeof(s)) #de…...

    2024/4/20 16:35:05
  15. 计算机语言-古今多少事,都付笑谈中

    滚滚长江东逝水, 浪花淘尽英雄。 是非成败转头空, 青山依旧在, 几度夕阳红。 白发渔樵江渚上, 惯看秋月春风。 一壶浊酒喜相逢, 古今多少事, 都付笑谈中。 当我们回味历史,总会有点儿发现吧。看看计算机语言的历史,也许你会明白,为什么我学的计算机语言是C++,…...

    2024/4/21 11:33:41
  16. 8个女大学生为赚带工费 走私游戏碟被海关截获

    8个女大学生为赚带工费 走私游戏碟被海关截获2016年04月20日 07:08来源:深圳特区报 用微信扫描二维码分享至好友和朋友圈 2人参与 1评论 . 原标题:8个女大学生为赚带工费 走私游戏碟被海关截获深圳特区报讯(记者 吴德群 通讯员 袁娉婷) 风华正茂的女大学生,本应在校园里认…...

    2024/4/21 11:33:39
  17. 老农的计算机笔记(三)软件篇

    计算机软件 自从冯-诺依曼为现代计算机制定了基本的体系结构——将可执行指令和数据一起放到存储器中,由计算机自动执行,计算机就有了软件。 我们可以把软件理解为像厨师的菜谱一样的东西,计算机按照这个单子去做一件件事。它决定了计算机能做什么和怎样去做。因此,软件是计…...

    2024/4/21 11:33:39
  18. 编译android goldfish内核(x86_64)

    Android linux内核 Android并没有使用标准的Linux内核,而是做了很多的修改。AOSP网站提供了适应各种芯片或设备的linux内核源码的仓,只有少部分google设备支持的内核源码可以通过repo构建,其他的需要做一些编译配置。 手动编译内核 这里选择emulator模拟器跑Android内核,所以…...

    2024/4/21 11:33:37
  19. 美女找茬外挂程序

    为什么突然想写个外挂呢,而且是美女找茬的。这个嘛,没办法,女朋友喜欢玩美女找茬。而且每次都得最后一名,令我看就伤心,故下定决心要写个美女找茬的外挂玩玩。以下是我对程序的大致构想,各位大牛看了多提意见,以及我的办法是否可行,不可行的话能否提供好的办法,小弟在…...

    2024/4/21 11:33:36
  20. 计算机类学习总结

    一、目录语言无关类操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 其它 语言相关类Android APP AWK C/C++ C# Clojure CSS/HTML Dart Elixir Erlang Fo…...

    2024/4/21 11:33:36

最新文章

  1. 深入理解Java消息中间件-组件-绑定

    引言&#xff1a; 在消息队列的使用过程中&#xff0c;消息的绑定是实现消息路由和分发的重要环节。通过消息的绑定&#xff0c;可以将消息从交换器路由到队列中&#xff0c;实现消息的可靠传递和处理。本文将介绍消息的绑定的实现原理以及其背后的原理。 一、实现原理 消息的…...

    2024/4/28 2:39:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. AI小程序的创业方向:深度思考与逻辑引领

    随着人工智能技术的快速发展&#xff0c;AI小程序逐渐成为创业的新热点。在这个充满机遇与挑战的时代&#xff0c;我们有必要深入探讨AI小程序的创业方向&#xff0c;以把握未来的发展趋势。 一、目标市场定位 首先&#xff0c;我们要明确目标市场。针对不同的用户需求&#x…...

    2024/4/27 11:03:33
  4. windows更新驱动导致Linux虚拟机网卡找不到

    windows更新驱动导致Linux虚拟机网卡找不到 1、现象2、解决过程3、参考 1、现象 原先虚拟机配置了静态IP&#xff0c;更新windows驱动后xshell连接不上这台虚拟机&#xff08;其他几台也是&#xff09;。 2、解决过程 service network restart出现一下报错&#xff1a; Rest…...

    2024/4/25 19:19:14
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57