ARM64 Linux的启动分析
1. 找到Linux启动流程
Linux启动,会启动内核编译后的文件vmlinux
vmlinux是一个ELF文件,按照./arch/arm64/kernel/vmlinux.lds设定的规则进行链接的
./arch/arm64/kernel/vmlinux.lds 是 ./arch/arm64/kernel/vmlinux.lds.S编译之后生成的
通过readelf可以看到vmlinux的入口地址为:0xfffffe0000080000
这个地址是怎么来的,对应内核代码中的哪个代码呢?最简单的方法是反汇编
对vmlinux反汇编的命令为:objdump -dxh vmlinux > vmlinux.s
在查找地址0xfffffe0000080000:grep fffffe0000080000 vmlinux.s
可以看到linux的第一条指令为:x13, x18, #0x16,对应的符号是:.head.text efi_head _text
查看ARM64的head.S可以看到如下代码
/*
* Kernel startup entry point.
* -----------