我們先看一下入口地址的確定,同一文件。
SECTIONS
{
/*
* XXX: The linker does not define how output sections are
* assigned to input sections when there are multiple statements
* matching the same input section name. There is no documented
* order of matching.
*
* unwind exit sections must be discarded before the rest of the
* unwind sections get included.
*/
/DISCARD/ : {
*(.ARM.exidx.exit.text)
*(.ARM.extab.exit.text)
ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))
ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))
ARM_EXIT_DISCARD(EXIT_TEXT)
ARM_EXIT_DISCARD(EXIT_DATA)
EXIT_CALL
#ifndef CONFIG_MMU
*(.text.fixup)
*(__ex_table)
#endif
#ifndef CONFIG_SMP_ON_UP
*(.alt.smp.init)
#endif
*(.discard)
*(.discard.*)
}
. = PAGE_OFFSET + TEXT_OFFSET;
.head.text : {
_text = .;
HEAD_TEXT
}
這個(gè) SECTIONS 比較長(zhǎng),只放一部分。在這里有個(gè)比較重要的東西:
. = PAGE_OFFSET + TEXT_OFFSET;
這一句表示了 Linux 系統(tǒng)真正的啟動(dòng)地址。
PAGE_OFFSET 是 Linux 內(nèi)核空間的虛擬起始地址,定義在:
linux4.14/arch/arm64/include/asm/memory.h
注意,這里的地址都很重要,很多地方會(huì)用到。當(dāng)然,這里的地址可能會(huì)隨著 Linux 內(nèi)核版本的不同和硬件的不同,會(huì)變化。這里沒(méi)有一個(gè)具體的數(shù),因?yàn)?VA_BITS 中的數(shù)字是可選的,大家可以根據(jù)自己的平臺(tái)算一下。
TEXT_OFFSET 定義在:
linux4.14/arch/arm/Makefile 中:
這個(gè)值一般是 0x00008000 ,算出 PAGE_OFFSET 后加上這個(gè)值就是 Linux 內(nèi)核的起始地址。
修改這個(gè)偏移量就可以使Linux內(nèi)核拷貝到不同的地址,自己修改注意內(nèi)存對(duì)齊。
-
ARM
+關(guān)注
關(guān)注
134文章
9351瀏覽量
377437 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1416瀏覽量
41421 -
Linux
+關(guān)注
關(guān)注
87文章
11509瀏覽量
213748 -
地址
+關(guān)注
關(guān)注
1文章
32瀏覽量
11009
發(fā)布評(píng)論請(qǐng)先 登錄
Linux內(nèi)核自解壓過(guò)程分析

Linux內(nèi)核地址映射模型與Linux內(nèi)核高端內(nèi)存詳解

Linux的內(nèi)核教程
如何知道m(xù)ac地址 怎么查看IP地址

怎么查看物理地址

如何查看Linux中的ip地址

Linux虛擬地址空間和物理地址空間的關(guān)系

linux系統(tǒng)查看ip地址命令
linux系統(tǒng)查看物理地址
linux 查看網(wǎng)卡狀態(tài)是否開(kāi)啟
linux查看網(wǎng)卡是down還是up
linux怎么查看網(wǎng)卡的收光功率?
在Linux中查看IP地址的方法

評(píng)論