欢迎回到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
1、首先从http://qt.nokia.com/downloads 下载“Qt SDK for Linux”,包括了QT4.6和QT Creator1.3。 Download Qt SDK for Linux/X11 32-bit** (353 MB)
2、修改文件qt-sdk-linux-x86-opensource-2009.05.bin的属性,让其可执行:
chmod u+x qt-sdk-linux-x86-opensource-2009.05.bin
3、双击qt-sdk-linux- ......