You can see from the 6410 Data Manual that the memory start address should be 0x50000000, while the Linux kernel loaded by U-boot is loaded to 0xC0008000 during the use of the real6410 Development Board, I guess (I have not read the code to verify the speculation) this is because the Linux Startup kernel address is 0xC0008000, and U-boot also maps the memory to keep consistent with Linux, easy to use. Next, let's take the kernel 2.6.28 as an example to see the origin of this memory address in Linux. First, check the startup code arch/arm/kernel/head. S 29 # define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) // defines the virtual memory first address 30 # define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET) // define the source code of the actual physical memory address PAGE_OFFSET arch/arm/include/asm/memory. c 27 # ifdef CONFIG_MMU 28 29/* 30 * PAGE_OFFSET-the virtual address of the start of the kernel image 31 * TASK_SIZE-the maximum size of a user space task. 32 * TASK_UNMAPPED_BASE-th E lower boundary of the mmap VM area 33 */34 # define PAGE_OFFSET UL (CONFIG_PAGE_OFFSET) Code include/linux/autoconf. h # define CONFIG_PAGE_OFFSET 0xc0000000 PHYS_OFFSET code arch/arm/mach-s3c6400/include/mach/memory. h // memory settings related to the 6400 platform # define PHYS_OFFSET UL (0x50000000) TEXT_OFFSET is defined in arch/arm/Makefile. This value is the actual offset of the kernel location, for more information about this value, see arch/arm/kernel/head. s. 38/* 39 * swapper_pg_dir is the virtual address of the initial page table. 40 * We place the page tables 16 K below KERNEL_RAM_ADDR. therefore, we must 41 * make sure that KERNEL_RAM_ADDR is correctly set. currently, we recommend CT 42 * the least significant 16 bits to be 0x8000, but we cocould probably 43 * relax this restriction to KERNEL_RAM_ADDR> = PAGE_OFFSET + 0x4000. 44 */That is, the slave address KERNEL_RAM_VADDR At least 0x4000 is used to store the kernel page table, and the Space Value for storing the kernel page table is recommended to be 0x8000.