ARM Linux Boot Sequence
The following traces the Linux boot sequence for ARM-based systems in the 2.6.18 kernel. It looks at just the earliest stages of the boot process, until the generic non-processor-specific start_kernel function is called. The line numbers of each statement are in parenthese at the end of the line; the kernel source itself can be conveniently browsed on the Linux Cross-Reference website.
zImage decompression
-
arch/arm/boot/compressed/head.S: start (108)
- First code executed, jumped to by the bootloader, at label "start" (108)
- save contents of registers r1 and r2 in r7 and r8 to save off architecture ID and atags pointer passed in by bootloader (118)
-
execute arch-specific code(inserted at 146)
- arch/arm/boot/compressed/head-xscale.S or other arch-specific code file
- added to build in arch/arm/boot/compressed/Makefile
- linked into head.S by linker section declaration: .section “start”
- flush cache, turn off cache and MMU
-
load registers with stored parameters (152)
- sp = stack pointer for decompression code (152)
- r4 = zreladdr = kernel entry point physical address
- check if running at link address, and fix up global offset table if not (196)
- zero decompression bss (205)
-
call cache_on to turn on cache (218)
- defined at arch/arm/boot/compressed/head.S (320)
-
call call_cache_fn to turn on cache as appropriate for processor variant
- defined at arch/arm/boot/compressed/head.S (505)
- walk through proc_types list (530) until find corresponding processor
-
call cache-on function in list item corresponding to processor (511)
-
for ARMv5tej core, cache_on function is __armv4_mmu_cache_on (417)
- call setup_mmu to set up initial page tables since MMU must be on for cache to be on (419)
- turn on cache and MMU (426)
- check to make sure won't overwrite image during decompression; assume not for this trace (232)
- call decompress_kernel to decompress kernel to RAM (277)
-
branch to call_kernel (278)
- call cache_clean_flush to flush cache contents to RAM (484)
- call cache_off to turn cache off as expected by kernel initialization routines (485)
-
jump to start of kernel in RAM (489)
-
jump to address in r4 = zreladdr from previous load
- zreladdr = ZRELADDR = zreladdr-y
- zreladdr-y specified in arch/arm/mach-vx115/Makefile.boot
ARM-specific kernel code
-
arch/arm/kernel/head.S: stext (72)
-
call __lookup_processor_type (76)
- defined in arch/arm/kernel/head-common.S (146)
-
search list of supported processor types __proc_info_begin (176)
- kernel may be built to support more than one processor type
-
list of proc_info_list structs
- defined in arch/arm/mm/proc-arm926.S (467) and other corresponding proc-*.S files
- linked into list by section declaration: .section ".proc.info.init"
- return pointer to proc_info_list struct corresponding to processor if found, or loop in error if not
-
call __lookup_machine_type (79)
- defined in arch/arm/kernel/head-common.S (194)
-
search list of supported machines (boards)
- kernel may be built to support more than one board
-
list of machine_desc structs
- machine_desc struct for boards defined in board-specific file vx115_vep.c
- linked into list by section declaration that's part of MACHINE_DESC macro
- return pointer to machine_desc struct corresponding to machine (board)
- call __create_page_tables to set up initial MMU tables (82)
-
set lr to __enable_mmu, r13 to address of __switch_data (91, 93)
- lr and r13 used for jumps after the following calls
- __switch_data defined in arch/arm/kernel/head-common.S (15)
-
call the __cpu_flush function pointer in the previously returned proc_info_list struct (94)
- offset is #PROCINFO_INITFUNC into struct
-
this function is __arm926_setup for the ARM 926EJ-S, defined in arch/arm/mm/proc-arm926.S (392)
- initialize caches, writebuffer
- jump to lr, previously set to address of __enable_mmu
-
__enable_mmu (147)
- set page table pointer (TTB) in MMU hardware so it knows where to start page-table walks (167)
- enable MMU so running with virtual addresses (185)
-
jump to r13, previously set to address of __switch_data, whose first field is address of __mmap_switched
- __switch_data defined in arch/arm/kernel/head-common.S (15)
-
arch/arm/kernel/head-common.S: __mmap_switched (35)
- copy data segment to RAM (39)
- zero BSS (45)
- branch to start_kernel (55)
Processor-independent kernel code
- init/main.c: start_kernel (456)
分享到:
相关推荐
BRCM_21553_TBird5x_BootSequence-AE.pdf
x86 Initial Boot Sequence Advanced Operating Systems and Virtualization。 一个关于linux 的启动过程的PPT,很详细,值得一读。
How to improving Android Bootup Time. Android boot sequence. Measuring bootup time. Problem areas. Ideas for improvements.
booting sequence in linux, in terms of memory management
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...
Sequence to Sequence Learning with Neural Networksv论文PDF版
机器学习之sequence to sequence learning。(Sequence Generation-----Hung-yi Lee 李宏毅.ppt)
SequenceDiagram-3.0.5.zip
Edward Grefenstette - Beyond Sequence to Sequence with Augmented RNNs
A method for assembly sequence planning is proposed in this paper. First, two methods for assembly sequence planning are compared, which are indirect method and direct method. Then, the limits of the ...
基于循环神经网络和注意力机制的Sequence-to-Sequence模型神经网络方法在信息抽取和自动摘要生成方面发挥了重要作用。然而,该方法不能充分利用文本的语言特征信息,且生成结果中存在未登录词问题,从而影响文本摘要...
在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用
sequence-to-sequence-learning-with-neural-networks.
Sequence Diagrams of UML
memory networks, are extremely appealing for sequence-tosequence learning tasks. Despite their great success, they typically suffer from a fundamental shortcoming: they are prone to generate ...
oracle中sequence介绍及应用
sequence-diagram-js 所需jar包,其中sequence-diagram-js支持自定义颜色
sequence.txt