Linux双核SMP系统启动流程(Zynq-A…
来源:互联网 发布:防止网络诈骗 编辑:程序博客网 时间:2024/04/29 23:25
分类:
1:资料附录:
注:上述手册为本人进行zynqzc702开发板研究时使用参考手册,希望在后续研究过程中能对该手册内容进行概略描述,以便大家查找相关细节。待补充。
2:源码索引:
3:启动流程:
注:本博文以提出问题,回答问题方式进行记录本人研究双核系统的过程。希望在一步步研究及分析后,能够完整回答各个问题。以下分析基于ARMv7架构Linux代码和XILINX的ZYNQ平台。由于本博文正在更新过程中,还未完成,若对单核启动有兴趣的朋友可以查看如下资源,该资源正是本人前半部分启动需要描述的内容。
问题1-1:双核芯片上电后,是否同时启动的?
答案:双核芯片上电后,并非同时启动,启动代码运行在一个核上,而是一个核处于备用状态。
参见
图1:CPU1启动工作状态
图2:CPU1启动流程
问题1-2:根据上述参考资料,第二个核是通过CPU0进行设置并引导启动的,Linux是怎么完成这一步的呢?我们从内核入口函数开始研究启动过程。
答案:本部分从Linux系统启动部分开始分析,BOOT启动引导部分暂不做分析。
点击(此处)折叠或打开--CodeSegment1
- .arm
- __HEAD
- ENTRY(stext)
- THUMB( adr r9,BSYM(1f) ) @ Kernel is always entered in ARM.
- THUMB( bx r9 ) @ Ifthis is a Thumb-2 kernel,
- THUMB( .thumb ) @switch to Thumb now.
- THUMB(1:)
- setmode PSR_F_BIT |PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
- @ and irqsdisabled
- mrc p15, 0, r9, c0,c0 @ get processor id
- bl__lookup_processor_type @ r5=procinfo r9=cpuid
- movs r10, r5 @invalid processor (r5=0)?
- THUMB( it eq ) @force fixup-able long branch encoding
- beq __error_p @ yes,error 'p'
- #ifdefCONFIG_ARCH_XILINX
- movr0,#0x0
- ldrr1,=MACH_TYPE_XILINX
- #endif
- #ifdefCONFIG_XILINX_FIXED_DEVTREE_ADDR
- movr2,#0x1000000
- #endif
- #ifdefCONFIG_ARM_LPAE
- mrc p15, 0, r3, c0,c1, 4 @ read ID_MMFR0
- and r3, r3, #0xf @extract VMSA support
- cmp r3, #5 @long-descriptor translation table format?
- THUMB( it lo ) @force fixup-able long branch encoding
- blo __error_p @ onlyclassic page table format
- #endif
- #ifndefCONFIG_XIP_KERNEL
- adr r3,2f
- ldmia r3, {r4,r8}
- sub r4, r3, r4 @(PHYS_OFFSET - PAGE_OFFSET)
- add r8, r8, r4 @PHYS_OFFSET
- #else
- ldr r8, =PHYS_OFFSET@ always constant in this case
- #endif
- bl__vet_atags
- #ifdefCONFIG_SMP_ON_UP
- bl__fixup_smp
- #endif
- #ifdefCONFIG_ARM_PATCH_PHYS_VIRT
- bl__fixup_pv_table
- #endif
- bl__create_page_tables
- ldr r13,=__mmap_switched @ address to jump to after
- @ mmu has beenenabled
- adr lr, BSYM(1f) @return (PIC) address
- mov r8, r4 @ setTTBR1 to swapper_pg_dir
- ARM( add pc, r10,#PROCINFO_INITFUNC )
- THUMB( add r12, r10,#PROCINFO_INITFUNC )
- THUMB( mov pc, r12)
- 1: b__enable_mmu
- ENDPROC(stext)
- .ltorg
- #ifndefCONFIG_XIP_KERNEL
- 2: .long.
- .longPAGE_OFFSET
- #endif
- Linux双核SMP系统启动流程(Zynq-A…
- Linux双核SMP系统启动流程(Zynq-A…
- Linux双核SMP系统启动流程(Zynq-ARM-CortexA9)
- Xilinx zynq 7000 Linux系统启动流程
- linux系统启动流程
- linux系统启动流程
- Linux系统启动流程
- Linux 系统启动流程
- Linux系统启动流程
- Linux系统启动流程如下
- linux系统启动流程分析
- linux系统启动流程
- Linux系统启动流程
- Linux系统启动引导流程
- Linux系统启动流程
- Linux系统启动流程
- linux系统启动流程
- Linux系统启动流程
- Uboot中start.S源码的指令级的详尽…
- linux内核学习初笔记(6)uboot第…
- linux内核学习初笔记(6)uboot第…
- linux中字符串转换函数 simpl…
- linux中字符串转换函数 simpl…
- Linux双核SMP系统启动流程(Zynq-A…
- Linux双核SMP系统启动流程(Zynq-A…
- 分析uboot是如何启动内核的
- 分析uboot是如何启动内核的
- 分析uboot是如何启动内核的
- 分析uboot是如何启动内核的
- Arm linux 启动流程
- Arm linux 启动流程
- linux启动流程导读(arm为例)<一>