helloLinux 发表于 2019-9-7 18:22:57

RK3288内核运行的第一个文件是哪个

通过查看顶层的Makefile和arch/arm/Makefile中的文件,
在arch/arm/Makefile文件中有如下语句:
head-y                := arch/arm/kernel/head$(MMUEXT).o
MMUEXT为空,因为RK3288有MMU,所以:
head-y                := arch/arm/kernel/head.o

通过分析顶层Makefile文件,kernel启动后,第一个运行的文件应该是arch/arm/kernel/head.S吧?
但是看博客上有篇文章说kernel运行的第一个文件为arch/arm/boot/compressed/head.S
博客网址如下:
https://blog.csdn.net/lp542718520/article/details/38705975

请问,内核运行的第一个文件是arch/arm/boot/compressed/head.S这个么?

主要是我查看kernel的编译日志里,也确实是编译了arch/arm/boot/compressed/head.S这个文件,
而且也有arch/arm/boot/compressed/vmlinux.lds这个链接脚本文件。

LDS   arch/arm/boot/compressed/vmlinux.lds
AS       arch/arm/boot/compressed/head.o

在顶层Makefile文件中明明清楚的包含的是
arch/arm/kernel/head.S文件,arch/arm/kernel/vmlinux.lds文件

内核编译日志中包含如下2条语句了。
AS      arch/arm/kernel/head.o
LDS    arch/arm/kernel/vmlinux.lds

请问下arch/arm/boot/compressed/head.S是内核运行的第1个文件么?

请知道帮我解答下,万分感谢。

penguin 发表于 2019-9-9 10:09:32

楼主再认真看看那位博主的博客,写的挺详细了。

第一部分:汇编部分

Linux启动之linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析

这段代码是linux boot后执行的第一个程序,完成的主要工作是``解压内核``,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步

第二部分:汇编部分
Linux启动之linux-rk3288-tchip/kernel/arch/arm/kernel/head.S

整个代码流程如下:

当解压缩部分的head.S执行完后,就开始执行kernel/目录下``真正的linux内核代码``。在内核连接文件/kernel/vmlinux/lds里定义了这部分开始所处的段空间为.text.head,也即内核代码段的头

helloLinux 发表于 2019-10-30 14:22:44

penguin 发表于 2019-9-9 10:09
楼主再认真看看那位博主的博客,写的挺详细了。

第一部分:汇编部分


知道了,谢谢。
页: [1]
查看完整版本: RK3288内核运行的第一个文件是哪个