arm linux中一些重要的宏及地…
来源:互联网 发布:防止网络诈骗 编辑:程序博客网 时间:2024/04/29 19:44
转载自http://biancheng.dnbcw.info/linux/352414.html。在此基础上,做一些修改。
1)TEXT_OFFSET 内核在RAM中的起始位置相对于RAM起始地址偏移。值为0x00008000
2)PAGE_OFFSE 内核镜像起始虚拟地址。值为0xC0000000
- ./arch/arm/Makefile
- 111
textofs-y := 0x00008000 - 112 textofs-$(CONFIG_ARCH_CLPS711X)
:= 0x00028000 - 113 # We don't want thehtc bootloader
to corruptkernel during resume - 114 textofs-$(CONFIG_PM_H1940)
:= 0x00108000 - 115 # SA1111 DMA bug:
wedon't want thekernel to live in preciousDMA-ablememory - 116 ifeq
($(CONFIG_ARCH_SA1100),y) - 117 textofs-$(CONFIG_SA1111)
:= 0x00208000 - 118 endif
- 212 # The byte offset of the kernelimage
in RAMfrom the start of RAM. - 213
TEXT_OFFSET := $(textofs-y)
2)PAGE_OFFSE
- arch/arm/Kconfig
- 1165
configPAGE_OFFSET ----这个就是CONFIG_PAGE_OFFSET宏,默认值为0xC0000000 - 1166
hex - 1167 default 0x40000000
if VMSPLIT_1G - 1168 default 0x80000000
if VMSPLIT_2G - 1169 default0xC0000000
- ./arch/arm/include/asm/memory.h
- 34 #definePAGE_OFFSET UL(CONFIG_PAGE_OFFSET)
3)PHYS_OFFSET
对于2410来说值为0x30000000,RAM接在片选6上
arch/arm/mach-s3c2410/include/mach/memory.h
#definePHYS_OFFSET UL(0x30000000)
arch/arm/mach-s3c2410/include/mach/memory.h
#definePHYS_OFFSET
4)KERNEL_RAM_VADDR
5)KERNEL_RAM_PADDR
arch/arm/kernel/head.S
6)swapper_pg_dir
一般分配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_START0xc4800000
8)VMALLOC_END 0xe0000000
9)MODULES_VADDR0xbf000000
10)MODULES_END 0xc0000000
arch/arm/kernel/head.S
7)VMALLOC_START0xc4800000
8)VMALLOC_END
9)MODULES_VADDR0xbf000000
10)MODULES_END
arch/arm/include/asm/memory.h
-
47#ifndef CONFIG_THUMB2_KERNEL
48 #define MODULES_VADDR (PAGE_OFFSET - 16*1024*1024)
49 #else
50
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 ofmodule space
56 #endif
57
58
61 #ifdef CONFIG_HIGHMEM
62 #defineMODULES_END (PAGE_OFFSET - PMD_SIZE) 63#else
64 #defineMODULES_END (PAGE_OFFSET) 65#endif
11)PKMAP_BASE
6:#definePKMAP_BASE (PAGE_OFFSET - PMD_SIZE)
12)TASK_SIZE
./arch/arm/include/asm/memory.h
34 #definePAGE_OFFSET UL(CONFIG_PAGE_OFFSET)
35 #defineTASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))
36 #defineTASK_UNMAPPED_BASE (UL(CONFIG_PAGE_OFFSET) / 3)
./arch/arm/include/asm/memory.h
13)一些不同地址之间转换的宏
./arch/arm/include/asm/memory.h
135
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
148 #define__phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) //物理地址和页帧号之间
149 #define__pfn_to_phys(pfn) ((pfn) <<PAGE_SHIFT) //转换的宏
150
151
154 #definepage_to_phys(page) (__pfn_to_phys(page_to_pfn(page)))//页地址和物理地址
155 #definephys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys)))//之间的转换宏依赖于内存模型。
201
204 #define__pa(x) __virt_to_phys((unsigned long)(x))
205 #define__va(x) ((void *)__phys_to_virt((unsigned long)(x)))
206 #definepfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
207
208
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
135
140 #ifndef __virt_to_phys
141 #define__virt_to_phys(x)
142 #define__phys_to_virt(x)
143 #endif
144
145
148 #define__phys_to_pfn(paddr)
149 #define__pfn_to_phys(pfn)
150
151
154 #definepage_to_phys(page)
155 #definephys_to_page(phys)
201
204 #define__pa(x)
205 #define__va(x)
206 #definepfn_to_kaddr(pfn)
207
208
214 #ifndef __virt_to_bus
215 #define __virt_to_bus
216 #define __bus_to_virt
217 #define __pfn_to_bus(x) __pfn_to_phys(x)
218 #define __bus_to_pfn(x) __phys_to_pfn(x)
219 #endif
0 0
- arm linux中一些重要的宏及地…
- arm linux中一些重要的宏及地…
- arm linux中一些重要的宏及地址定义
- arm linux中一些重要的宏及地址定义
- arm linux中一些重要的宏及地址定义
- arm linux中一些重要的宏及地址定义
- arm linux中一些重要的宏及地址定义
- ARM (三) arm中C/C++及汇编语言的…
- Linux的发展及一些重要协议
- ARM Linux 3.x的设备树…
- ARM Linux 3.x的设备树…
- Linux下的目录及一些重要命令
- Linux中重要目录及重要命令
- ARM Linux (S3C6410架构…
- ARM Linux (S3C6410架构…
- ARM Linux (S3C6410架构…
- ARM Linux (S3C6410架构…
- armlinux中一些重要的宏-如unlikely、container_of及地址定义
- Arm linux 启动流程
- Arm linux 启动流程
- linux启动流程导读(arm为例)<一>
- linux启动流程导读(arm为例)<一>
- arm linux中一些重要的宏及地…
- arm linux中一些重要的宏及地…
- arm-linux启动过程(1)
- arm-linux启动过程(1)
- arm-linux启动过程(2)
- arm-linux启动过程(2)
- Arm linux启动分析(1)
- Arm linux启动分析(1)
- Arm linux启动分析(2)
- Arm linux启动分析(2)