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

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

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

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

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

1)TEXT_OFFSET 內(nèi)核在RAM中的起始位置相對(duì)于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 ----這個(gè)就是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啟始物理地址,對(duì)應(yīng)于DDR的物理地址。需要在mach-xxxx/include/mach/memory.h文件中定義這個(gè)宏。

對(duì)于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) //物理地址和頁幀號(hào)之間

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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9322

    瀏覽量

    375541
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11473

    瀏覽量

    212986
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    硬件設(shè)計(jì)中一些術(shù)語簡(jiǎn)稱

    獲取完整文檔資料可下載附件哦?。。。∪绻麅?nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持下哦~
    發(fā)表于 06-04 15:06

    CYUSB3014采用5根地址線通信,但其中一地址線懸空,對(duì)數(shù)據(jù)通信有影響嗎?

    CYUSB3014采用5根地址線通信,但其中一地址線懸空,對(duì)數(shù)據(jù)通信有影響嗎??是否還能進(jìn)行正常的多個(gè)端點(diǎn)通信,只要跳過那個(gè)地址線對(duì)應(yīng)的socket即可?
    發(fā)表于 05-21 07:59

    Debian和Ubuntu哪個(gè)好一些

    兼容性對(duì)比Debian和Ubuntu哪個(gè)好一些,并為您揭示如何通過RAKsmart服務(wù)器釋放Linux系統(tǒng)的最大潛能。
    的頭像 發(fā)表于 05-07 10:58 ?252次閱讀

    為什么你的串口總是丟一些特殊字符?

    導(dǎo)讀在嵌入式開發(fā)和物聯(lián)網(wǎng)應(yīng)用中,Linux系統(tǒng)的串口通信至關(guān)重要。本文將簡(jiǎn)單介紹Linux下串口設(shè)備的命名規(guī)則和termios結(jié)構(gòu)體,并解析終端的三種工作模式,幫助開發(fā)者更好地掌握Linux
    的頭像 發(fā)表于 02-06 13:26 ?353次閱讀
    為什么你的串口總是丟<b class='flag-5'>一些</b>特殊字符?

    定義后面能不能加分號(hào)

    用define定義,最后需不需要加分號(hào)?
    的頭像 發(fā)表于 01-06 16:35 ?530次閱讀

    如何在Linux系統(tǒng)上設(shè)置站群服務(wù)器IP地址

    Linux系統(tǒng)上設(shè)置站群服務(wù)器的IP地址,可以通過以下步驟進(jìn)行,主機(jī)推薦小編為您整理發(fā)布如何在Linux系統(tǒng)上設(shè)置站群服務(wù)器IP地址。
    的頭像 發(fā)表于 12-11 10:05 ?448次閱讀

    這些ipv6公網(wǎng)地址查詢方法,定要知道!

    路由器管理界面查看,聯(lián)系互聯(lián)網(wǎng)服務(wù)提供商獲取信息,以及使用網(wǎng)絡(luò)診斷和掃描工具如ping、traceroute和Nmap,以下是UU云小編整理的一些常見方法: IPv6公網(wǎng)地址查詢是網(wǎng)絡(luò)管理和故障排除中的重要環(huán)節(jié)。
    的頭像 發(fā)表于 12-10 13:37 ?4191次閱讀

    一些常見的動(dòng)態(tài)電路

    無論是模電還是數(shù)電,理論知識(shí)相對(duì)來說還是比較枯燥,各種電路原理理解清楚不算容易,換種生動(dòng)形象的方式或許會(huì)增加一些趣味性,也更容易理解這些知識(shí)。下面整理了一些常見的電路,以動(dòng)態(tài)圖形的方式展示。 整流
    的頭像 發(fā)表于 11-16 09:26 ?998次閱讀
    <b class='flag-5'>一些</b>常見的動(dòng)態(tài)電路

    分享一些常見的電路

    理解模電和數(shù)電的電路原理對(duì)于初學(xué)者來說可能比較困難,但通過一些生動(dòng)的教學(xué)方法和資源,可以有效地提高學(xué)習(xí)興趣和理解能力。 下面整理了一些常見的電路,以動(dòng)態(tài)圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發(fā)表于 11-13 09:28 ?756次閱讀
    分享<b class='flag-5'>一些</b>常見的電路

    C語言中最常見的定義寫法

    如果讓你用C語言寫個(gè)定義,我相信大部分同學(xué)順手就能寫出define。
    的頭像 發(fā)表于 10-28 11:12 ?773次閱讀

    Linux應(yīng)用編程的基本概念

    Linux應(yīng)用編程涉及到在Linux環(huán)境下開發(fā)和運(yùn)行應(yīng)用程序的系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念。
    的頭像 發(fā)表于 10-24 17:19 ?595次閱讀

    SV中define定義的用法

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

    LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅(qū)動(dòng)器應(yīng)用的<b class='flag-5'>一些</b>指南和技巧

    IP地址會(huì)被黑?

    ,這些都可能是IP地址被黑后的表現(xiàn)。 ? IP地址會(huì)被黑? 那么我們的IP地址為什么會(huì)被黑呢? ①網(wǎng)絡(luò)漏洞:如果我們的操作系統(tǒng)存在安全漏洞,惡意分子就可能利用這些漏洞入侵設(shè)備,進(jìn)而控制IP地址
    的頭像 發(fā)表于 09-12 14:24 ?700次閱讀

    FPGA電路設(shè)計(jì)的一些技巧

    FPGA設(shè)計(jì)有別于DSP和ARM系統(tǒng),相比之下較為靈活和自由。主要是設(shè)計(jì)構(gòu)思好專用管腳的電路,通用I/O的連接可以自身定義。因而,F(xiàn)PGA電路設(shè)計(jì)中會(huì)有一些獨(dú)特的方法能夠參照。 FPGA管腳兼容性
    發(fā)表于 07-21 20:20

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品