offst 的作用及使用方法(3)

47行中我们可以看到:bl  __create_page_tables  就进入到了create_page_tables函数中去了,这个函数在上面的79行,将151行开始的代码拿出来单独分析:
#ifdef CONFIG_DEBUG_LL
 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
 /*
  * Map in IO space for serial debugging.
  * This allows debug messages to be output
  * via a serial console before paging_init.
  */
 ldr r3, [r8, #MACHINFO_PGOFFIO]
 add r0, r4, r3
 rsb r3, r3, #0x4000   @ PTRS_PER_PGD*sizeof(long)
 cmp r3, #0x0800   @ limit to 512MB
 movhi r3, #0x0800
 add r6, r0, r3
 ldr r3, [r8, #MACHINFO_PHYSIO]
 orr r3, r3, r7
1: str r3, [r0], #4   //这个循环把 phys_io 填充到 io_pg_offst 对应的 MMU 表项中
 add r3, r3, #1 << 20
 teq r0, r6
 bne 1b
#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS)
 /*
  * If we're using the NetWinder or CATS, we also need to map
  * in the 16550-type serial port for the debug messages
  */
 add r0, r4, #0xff000000 >> 18
 orr r3, r7, #0x7c000000
 str r3, [r0]
#endif
#ifdef CONFIG_ARCH_RPC
 /*
  * Map in screen at 0x02000000 & SCREEN2_BASE
  * Similar reasons here - for debug.  This is
  * only for Acorn RiscPC architectures.
  */
 add r0, r4, #0x02000000 >> 18
 orr r3, r7, #0x02000000
 str r3, [r0]
 add r0, r4, #0xd8000000 >> 18
 str r3, [r0]
#endif
#endif

上面蓝色加粗部分的代码是在哪里定义的呢?它是在arch\arm\kernel\asm-offsets.c定义的,请看下面加粗的代码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzjfs.html