0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ARM Linux中一些重要的宏及地址定義

如意 ? 來源:CSDN ? 作者:CaspianSea ? 2020-06-22 17:02 ? 次閱讀

1)TEXT_OFFSET 內(nèi)核在RAM中的起始位置相對于RAM起始地址偏移。值為0x00008000

。/arch/arm/Makefile

111 textofs-y := 0x00008000

112 textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000

113 # We don‘t want the htc bootloader to corrupt kernel during resume

114 textofs-$(CONFIG_PM_H1940) := 0x00108000

115 # SA1111 DMA bug: we don’t want the kernel to live in precious DMA-able memory

116 ifeq ($(CONFIG_ARCH_SA1100),y)

117 textofs-$(CONFIG_SA1111) := 0x00208000

118 endif

212 # The byte offset of the kernel image in RAM from the start of RAM.

213 TEXT_OFFSET := $(textofs-y)

2)PAGE_OFFSE 內(nèi)核鏡像起始虛擬地址。值為0xC0000000

arch/arm/Kconfig

1165 config PAGE_OFFSET ----這個就是CONFIG_PAGE_OFFSET宏,默認(rèn)值為0xC0000000

1166 hex

1167 default 0x40000000 if VMSPLIT_1G

1168 default 0x80000000 if VMSPLIT_2G

1169 default 0xC0000000

。/arch/arm/include/asm/memory.h

34 #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET)

3)PHYS_OFFSET RAM啟始物理地址,對應(yīng)于DDR的物理地址。需要在mach-xxxx/include/mach/memory.h文件中定義這個宏。

對于2410來說值為0x30000000,RAM接在片選6上

arch/arm/mach-s3c2410/include/mach/memory.h

#define PHYS_OFFSET UL(0x30000000)

4)KERNEL_RAM_VADDR 內(nèi)核在RAM中的虛擬地址。值為0xC0008000

5)KERNEL_RAM_PADDR 內(nèi)核在RAM中的物理地址。值為0x30008000

arch/arm/kernel/head.S

29 #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET)

30 #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)

6)swapper_pg_dir 初始頁表虛擬地址,值為0xC0004000,

一般分配KERNEL_RAM_VADDR地址下16K作為頁表,因此,我們必須確保正確設(shè)置KERNEL_RAM_VADDR。

arch/arm/kernel/head.S

44 .globl swapper_pg_dir

45 .equ swapper_pg_dir, KERNEL_RAM_VADDR - 0x4000

7)VMALLOC_START 0xc4800000

8)VMALLOC_END 0xe0000000

9)MODULES_VADDR 0xbf000000

10)MODULES_END 0xc0000000

arch/arm/include/asm/memory.h

47 #ifndef CONFIG_THUMB2_KERNEL

48 #define MODULES_VADDR (PAGE_OFFSET - 16*1024*1024)

49 #else

50 /* smaller range for Thumb-2 symbols relocation (2^24)*/

51 #define MODULES_VADDR (PAGE_OFFSET - 8*1024*1024)

52 #endif

53

54 #if TASK_SIZE 》 MODULES_VADDR

55 #error Top of user space clashes with start of module space

56 #endif

57

58 /*

59 * The highmem pkmap virtual space shares the end of the module area.

60 */

61 #ifdef CONFIG_HIGHMEM

62 #define MODULES_END (PAGE_OFFSET - PMD_SIZE)

63 #else

64 #define MODULES_END (PAGE_OFFSET)

65 #endif

11)PKMAP_BASE

arch/arm/include/asm/highmem.h:

6:#define PKMAP_BASE (PAGE_OFFSET - PMD_SIZE)

12)TASK_SIZE

。/arch/arm/include/asm/memory.h

34 #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET)

35 #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))

36 #define TASK_UNMAPPED_BASE (UL(CONFIG_PAGE_OFFSET) / 3)

13)一些不同地址之間轉(zhuǎn)換的宏

。/arch/arm/include/asm/memory.h

135 /*

136 * Physical vs virtual RAM address space conversion. These are

137 * private definitions which should NOT be used outside memory.h

138 * files. Use virt_to_phys/phys_to_virt/__pa/__va instead.

139 */

140 #ifndef __virt_to_phys

141 #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET)//物理地址和虛擬地址

142 #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)//之間轉(zhuǎn)換的宏

143 #endif

144

145 /*

146 * Convert a physical address to a Page Frame Number and back

147 */

148 #define __phys_to_pfn(paddr) ((paddr) 》》 PAGE_SHIFT) //物理地址和頁幀號之間

149 #define __pfn_to_phys(pfn) ((pfn) 《《 PAGE_SHIFT) //轉(zhuǎn)換的宏

150

151 /*

152 * Convert a page to/from a physical address

153 */

154 #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page)))//頁地址和物理地址

155 #define phys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys)))//之間的轉(zhuǎn)換宏依賴于內(nèi)存模型。

201 /*

202 * Drivers should NOT use these either.

203 */

204 #define __pa(x) __virt_to_phys((unsigned long)(x))

205 #define __va(x) ((void *)__phys_to_virt((unsigned long)(x)))

206 #define pfn_to_kaddr(pfn) __va((pfn) 《《 PAGE_SHIFT)

207

208 /*

209 * Virtual 《-》 DMA view memory address translations

210 * Again, these are *only* valid on the kernel direct mapped RAM

211 * memory. Use of these is *deprecated* (and that doesn‘t mean

212 * use the __ prefixed forms instead.) See dma-mapping.h.

213 */

214 #ifndef __virt_to_bus

215 #define __virt_to_bus __virt_to_phys

216 #define __bus_to_virt __phys_to_virt

217 #define __pfn_to_bus(x) __pfn_to_phys(x)

218 #define __bus_to_pfn(x) __phys_to_pfn(x)

219 #endif

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9006

    瀏覽量

    366029
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208461
收藏 人收藏

    評論

    相關(guān)推薦

    SV中define定義的用法

    SV中使用預(yù)處理指令`define來定義,可以用來創(chuàng)建文本替換。根據(jù)場景不同,`define主要用來定義常量、簡化復(fù)雜的表達(dá)式或代碼段以及提高代碼的可移植性。其基本語法為:
    的頭像 發(fā)表于 10-21 14:22 ?45次閱讀

    一些有關(guān)通信電路的資料?

    有關(guān)嵌入式之間DSP、ARM、FPGA三者之間和這三款芯片和外部電路之間通信的一些資料,比如說芯片之間的并行通信和芯片和外部電路之間的串行通信,MODBUS、DP、CAN等,一些一些
    發(fā)表于 03-03 18:53

    嵌入式Linux C語言編程程序調(diào)試與定義

    Linux使用gcc編譯程序的時候,對于調(diào)試的語句還具有一些特殊的語法。gcc編譯的過程中,會生成一些,可以使用這些分別打印當(dāng)前源文件
    發(fā)表于 03-01 11:41 ?765次閱讀

    Linux系統(tǒng)中一些重要的配置文件介紹

    系統(tǒng)文件,用于配置主機(jī)名與 IP 地址的映射關(guān)系。當(dāng)系統(tǒng)需要解析主機(jī)名時,會首先查找 /etc/hosts 文件,如果在該文件中找到了相應(yīng)的映射關(guān)系,則直接使用對應(yīng)的 IP 地址進(jìn)行通信,而不需要進(jìn)行 DNS 查詢。
    的頭像 發(fā)表于 02-19 17:39 ?2938次閱讀

    M453VG6AE如何在ROM中存儲一些定義的數(shù)據(jù)?

    芯片: M453VG6AE 我想芯片內(nèi)部的ROM中存儲一些定義的數(shù)據(jù),該怎么做? 必須要考慮個問題:如何選址才能防止與APROM,LDROM,配置區(qū)地址突沖?
    發(fā)表于 01-17 06:03

    免費學(xué)習(xí)鴻蒙(HarmonyOS)開發(fā),一些地址分享

    課|應(yīng)用開發(fā)視頻教程學(xué)習(xí)|HarmonyOS應(yīng)用開發(fā)官網(wǎng) 官網(wǎng)是一些比較基礎(chǔ)性的東西,學(xué)起來可能沒那么好理解。下面再推薦個B站博主:HarmonyOS天天分享;里面有鴻蒙4.0的基礎(chǔ)到高階的學(xué)習(xí)講解
    發(fā)表于 01-12 20:48

    define定義

    define定義 以#號開頭的都是編譯預(yù)處理指令,它們不是C語言的成分,但是C程序離不開它們,#define用來定義,程序在預(yù)處理階
    的頭像 發(fā)表于 11-24 15:35 ?711次閱讀

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?631次閱讀
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline

    linux查看物理接口的命令

    Linux操作系統(tǒng)提供了多種命令和工具來查看物理接口。在這篇文章中,我們將詳細(xì)介紹一些最常用和常見的命令,以及它們的用法和輸出。 ifconfig命令 ifconfig命令是個最常用的命令,用于
    的頭像 發(fā)表于 11-16 16:48 ?1038次閱讀

    linux系統(tǒng)查看物理地址

    Linux系統(tǒng)中,訪問和查看物理地址個非常重要的任務(wù),因為它提供了對硬件設(shè)備的直接訪問。本文將詳細(xì)介紹如何在Linux系統(tǒng)中查看物理
    的頭像 發(fā)表于 11-16 16:47 ?3085次閱讀

    列舉一些嵌入式Linux應(yīng)用開發(fā)里經(jīng)常使用的技巧和套路

    本篇文章,我們基于ELF 1S這款開發(fā)板,來列舉一些嵌入式Linux應(yīng)用開發(fā)里面,經(jīng)常使用到的開發(fā)技巧和套路。
    的頭像 發(fā)表于 11-14 10:44 ?422次閱讀
    列舉<b class='flag-5'>一些</b>嵌入式<b class='flag-5'>Linux</b>應(yīng)用開發(fā)里經(jīng)常使用的技巧和套路

    一些最佳的Linux終端提示和技巧

    通用性和輕量級:大多數(shù)Linux服務(wù)器不配備圖形用戶界面(GUI)。相反,您可以通過終端與它們交互。好消息是,無論您使用哪個發(fā)行版,您都可以使用相同的命令。
    發(fā)表于 11-13 14:51 ?690次閱讀
    <b class='flag-5'>一些</b>最佳的<b class='flag-5'>Linux</b>終端提示和技巧

    詳細(xì)聊聊container_of這個定義

    大家周末好,我是bug菌~ 今天主要是跟大家詳細(xì)聊聊container_of這個定義,非常經(jīng)典的,只是直沒有抽時間細(xì)細(xì)品味,今天就跟大家
    的頭像 發(fā)表于 11-13 09:45 ?615次閱讀

    STM32F10x中一些專業(yè)術(shù)語解釋

    STM32F10x中一些專業(yè)術(shù)語解釋
    的頭像 發(fā)表于 11-01 16:59 ?475次閱讀

    針對RF PCBA設(shè)計的一些建議

    射頻(RF)PCBA設(shè)計涉及系列復(fù)雜的考慮因素,包括天線設(shè)計、濾波器設(shè)計以及傳輸線(RF Trace)的優(yōu)化。這些因素對于無線通信和射頻應(yīng)用的性能至關(guān)重要。以下是針對RF PCBA設(shè)計的一些建議。
    的頭像 發(fā)表于 10-30 10:19 ?412次閱讀