Linux源码学习三、vmlinux.lds.S、MRC/MCR协处理器寄存器指令和head.S文件分析

本文详细分析了Linux内核中arch/arm/kernel/vmlinux.lds.S文件,包括PROC_INFO的定义、__proc_info_begin和__proc_info_end的使用,以及协处理器寄存器MRC/MCR指令的解释。同时,讨论了vmlinux.lds.S如何影响程序信息在内存中的布局。
摘要由CSDN通过智能技术生成

①vmlinux.lds.S文件在目录arch/arm/kernel/vmlinux.lds.S下

分析VMLINUX_SYMBOL(__proc_info_begin) = .;  


vmlinux.lds.S文件的内容为:

#include <asm-generic/vmlinux.lds.h>
#include <asm/thread_info.h>
#include <asm/memory.h>
#include <asm/page.h>

分别表示include文件夹里的<>目录下的内容。

#define PROC_INFO                            \
VMLINUX_SYMBOL(__proc_info_begin) = .;                \
*(.proc.info.init)                        \
VMLINUX_SYMBOL(__proc_info_end) = .;  

\表示连接符,一个句子太长分开连接的意思,相当于:

相当于PROC_INFO代表后面一长串,包含后面的分号。

VMLINUX_SYMBOL(__proc_info_begin) = .;    

因为vmlinux.lds.S文件引入:#include <asm-generic/vmlinux.lds.h>,在目录include/asm-generic/vmlinux.lds.h头文件中有部分内容为:

#ifndef SYMBOL_PREFIX
#define VMLINUX_SYMBOL(sym) sym
#else
#define PASTE2(x,y) x##y
#define PASTE(x,y) PASTE2(x,y)
#define VMLINUX_SYMBOL(sym) PASTE(SYMBOL_PREFIX, sym)
#endif

表示:如果没有定义SYMBOL_PREFIX#define VMLINUX_SYMBOL(sym) sym

           如果定义了SYMBOL_PREFIX#define PASTE2(x,y) x##y   #define PASTE(x,y) PASTE2(x,y)

           即PASTE(x,y) PASTE2(x,y)都是等于x##yx##y表示xy

           所以如果定义了SYMBOL_PREFIXPASTE(SYMBOL_PREFIX, sym)就是 SYMBOL_PREFIXsym

 

VMLINUX_SYMBOL(__proc_info_begin)   要么是__proc_info_begin,要么是SYMBOL_PREFIX__proc_info_begin
"."特殊符号点,代表定位计数器,表示目前的位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值