0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

如意 来源:CSDN 作者:CaspianSea 2020-06-22 17:02 次阅读

1)TEXT_OFFSET 内核在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 内核镜像起始虚拟地址。值为0xC0000000

arch/arm/Kconfig

1165 config PAGE_OFFSET ----这个就是CONFIG_PAGE_OFFSET宏,默认值为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启始物理地址,对应于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 内核在RAM中的虚拟地址。值为0xC0008000

5)KERNEL_RAM_PADDR 内核在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作为页表,因此,我们必须确保正确设置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)一些不同地址之间转换的宏

。/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)//之间转换的宏

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) //转换的宏

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)))//之间的转换宏依赖于内存模型。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9091

    浏览量

    367440
  • Linux
    +关注

    关注

    87

    文章

    11298

    浏览量

    209391
收藏 人收藏

    评论

    相关推荐

    如何在Linux系统上设置站群服务器IP地址

    Linux系统上设置站群服务器的IP地址,可以通过以下步骤进行,主机推荐小编为您整理发布如何在Linux系统上设置站群服务器IP地址
    的头像 发表于 12-11 10:05 159次阅读

    这些ipv6公网地址查询方法,定要知道!

    路由器管理界面查看,联系互联网服务提供商获取信息,以及使用网络诊断和扫描工具如ping、traceroute和Nmap,以下是UU云小编整理的一些常见方法: IPv6公网地址查询是网络管理和故障排除中的重要环节。
    的头像 发表于 12-10 13:37 440次阅读

    分享一些常见的电路

    理解模电和数电的电路原理对于初学者来说可能比较困难,但通过一些生动的教学方法和资源,可以有效地提高学习兴趣和理解能力。 下面整理了一些常见的电路,以动态图形的方式展示。 整流电路 单相桥式整流
    的头像 发表于 11-13 09:28 288次阅读
    分享<b class='flag-5'>一些</b>常见的电路

    C语言中最常见的定义写法

    如果让你用C语言写个定义,我相信大部分同学顺手就能写出define。
    的头像 发表于 10-28 11:12 265次阅读

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的系列概念。以下是一些涵盖Linux应用编程的基本概念。
    的头像 发表于 10-24 17:19 225次阅读

    SV中define定义的用法

    SV中使用预处理指令`define来定义可以用来创建文本替换。根据场景不同,`define主要用来定义常量、简化复杂的表达式或代码段以及提高代码的可移植性。其基本语法为:
    的头像 发表于 10-21 14:22 564次阅读

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    Linux 6.8版本– Arm、RISC-V和MIPS体系结构的显著变化

    Linus Torvalds刚刚在Linux内核邮件列表上宣布了Linux 6.8的发布: 因此,本次发布的提交数量下降的时间比我倾向于的要长一些,但其中很多似乎是关于各种自检更新(尤其是网络),而
    的头像 发表于 03-13 15:58 4350次阅读
    <b class='flag-5'>Linux</b> 6.8版本– <b class='flag-5'>Arm</b>、RISC-V和MIPS体系结构的显著变化

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些
    发表于 03-03 18:53

    嵌入式Linux C语言编程程序调试与定义

    Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些,可以使用这些分别打印当前源文件
    发表于 03-01 11:41 1003次阅读

    Linux系统中一些重要的配置文件介绍

    系统文件,用于配置主机名与 IP 地址的映射关系。当系统需要解析主机名时,会首先查找 /etc/hosts 文件,如果在该文件中找到了相应的映射关系,则直接使用对应的 IP 地址进行通信,而不需要进行 DNS 查询。
    的头像 发表于 02-19 17:39 3683次阅读

    arm开发板如何安装linux系统

    安装Linux系统到ARM开发板是个复杂的过程,涉及到多个步骤和不同的工具。下面是个详实且细致的教程,包含了从准备工作到最终启动Linux
    的头像 发表于 01-24 14:19 3495次阅读

    M453VG6AE如何在ROM中存储一些定义的数据?

    芯片: M453VG6AE 我想芯片内部的ROM中存储一些定义的数据,该怎么做? 必须要考虑个问题:如何选址才能防止与APROM,LDROM,配置区地址突冲?
    发表于 01-17 06:03

    Linux内核中信号详解

    5.18.18的定义 4.2.4 ARM/linux5.18.18的定义 4.2.5 RISC-V/linux6.7 4.1 信号描述符和信
    的头像 发表于 01-13 09:40 1374次阅读
    <b class='flag-5'>Linux</b>内核中信号详解

    免费学习鸿蒙(HarmonyOS)开发,一些地址分享

    课|应用开发视频教程学习|HarmonyOS应用开发官网 官网是一些比较基础性的东西,学起来可能没那么好理解。下面再推荐个B站博主:HarmonyOS天天分享;里面有鸿蒙4.0的基础到高阶的学习讲解
    发表于 01-12 20:48