易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核及ARM的内存管理

欢迎回到Kernel中……
继续说__vet_atags函数,这个函数仍旧定义在arch\arm\kernel\head-common.s文件中:
/* Determine validity of the r2 atags pointer.  The heuristic requires
 * that the pointer be aligned, in the first 16k of physical RAM and
 * that the ATAG_CORE marker is first and present.  Future revisions
 * of this function may be more lenient with the physical address and
 * may also be able to move the ATAGS block if necessary.
 *
 * r8  = machinfo
 *
 * Returns:
 *  r2 either valid atags pointer, or zero
 *  r5, r6 corrupted
 */
__vet_atags:
tst r2, #0x3 @ aligned?
bne 1f
ldr r5, [r2, #0] @ is first tag ATAG_CORE?
subs r5, r5, #ATAG_CORE_SIZE
bne 1f
ldr r5, [r2, #4]
ldr r6, =ATAG_CORE
cmp r5, r6
bne 1f
mov pc, lr @ atag pointer is ok
1: mov r2, #0
mov pc, lr
ENDPROC(__vet_atags)
由TI的芯片手册知,OMAP3430的SDRAM地址空间自0x80000000起,计1GB空间。函数开始的注释明确要求ATAG表需要在RAM物理地址前16KB,即0x80000000-0x80004000范围内,r2的0x80000100满足此要求。简单的判断了一下ATAG表的起始地址是否对齐,是否以ATAG_CORE作为开头标志,该函数返回。
__create_page_tables函数,这是要分析的重点函数,该函数就在arch\arm\kernel\head.s文件末尾。
先来看一个宏定义:
.macro pgtbl, rd
ldr \rd, =(KERNEL_RAM_PADDR - 0x4000)
.endm
KERNEL_RAM_PADDR的定义为:
#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
PHYS_OFFSET在文件arch\arm\plat-omap\include\mach\memory.h中(怎么找到这里的,其实是arch\arm\kernel\head.s中包含了arch\arm\include\asm\memory.h中又包含了arch\arm\plat-omap\include\mach\memory.h的缘故……)定义为0x80000000,而TEXT_OFFSET则需要在Makefile中寻找到答案。arch\arm\Makefile中定义
……
textofs-y := 0x00008000
……
TEXT_OFFSET := $(textofs-y)
可见,TEXT_OFFSET的值为0x00008000,再回到宏pgtbl,可计算出KERNEL_RAM_PADDR的值为0x80000000+0x00008000=0x80008000最后赋给寄存器值为0x80008000-0x4000=0x


相关文档:

Linux 引导过程内幕

引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的
PowerPC® 机器,很多流程都惊人地相似。本文将探索 Linux
的引导过程,从最初的引导到启动第一个用户空间应用程序。在本文介绍的过程中,您将学习到各种与引导有关的主题,例如引导加载程序、内核解压、初始
RA ......

linux下各种格式的压缩包的压缩、解压方法


.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz � ......

sed 命令完全解析 之linux高级命令

sed 编辑指令的格式如下 :
sed option [address1[,address2]]function[argument] ***.c
位址参数 address1/2 为行数或匹配字串 , 表示所执行编辑的行 ;
函数参 数 function[argument] 为 sed 的内定函数 , 表示执行的编辑动作。
 
匹配字串:(reguler expression 字串)
& : 代表其前 pattern 字串
例:s ......

linux 2.6源代码情景分析笔记之系统启动1

最开始时,ram芯片中包含的是随机数据。当开始启动时,cpu的一个引脚上会产生一个reset逻辑值。此后处理器的一些寄存器设置成固定的数值,并执行在物理地址0xfffffff0处找到的代码。硬件把这个地址映射到某个只读、持久的存储芯片中,该芯片通常称为rom(read-only memory只读内存)。rom所存放的程序集在80x86体系中通常叫做 ......

linux 2.6源代码情景分析笔记之进程2


能被独立调度的每个执行上下文都必须拥有自己的进程描述符。进程和进程描述符之间有严格的对应关系,使用32位进程描述符地址标识,进程描述符指针指向这些地址,内核对进程的大部分引用是通过进程描述符指针进行的。
可以使用pid(进程标识符)来标记进程,存放在字段pid中,PID被顺序编号,新创建的进程PID通常是前一个 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号