3.5.1.142. KERNEL_END

#define KERNEL_END __end

KERNEL_END 指向内核镜像结束虚拟地址

3.5.1.143. KERNEL_START

#ifdef CONFIG_XIP_KERNEL
#define KERNEL_START        _sdata
#else
#define KERNEL_START        _stext
#endif

KERNEL_START 代表内核镜像的起始虚拟地址

3.5.1.144. kmap_init

static void __init kmap_init(void)
{
#ifdef CONFIG_HIGHMEM
    pkmap_page_table = early_pte_alloc(pmd_off_k(PKMAP_BASE), PKMAP_BASE, _PAGE_KERNEL_TABLE);
#endif
    early_pte_alloc(pmd_off_k(FIXADDR_START), FIXADDR_START, _PAGE_KERNEL_TABLE);
}

kmap_init 用于建立PMD对应的PTE页表

3.5.1.145. kuser_init

static void __init kuser_init(void *vectors)
{
    extern char __kuser_helper_start[], __kuser_helper_end[];
    int kuser_sz = __kuser_helper_end  - __kuser_helper_start;

    memcpy(vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz);

    if(tls_emu || has_tls_reg)
        memcpy(vectors + 0xfe0, vectors + 0xfe8, 4);
}

kuser_init 用于将__kuser_helper_start到__kuser_helper_end之间的内容拷贝到异常向量表的指定位置