3.20 linux内核加载实验

    科技2025-12-18  11

    3.20 linux内核加载实验

    加载实验

    tftp 60003000 uImage tftp 60500000 xxx.dtb botm 60003000 - 60500000 uImage objcopy的时候做的一些操作使uImage与位置无关

    内核编译的几个关键地址

    arch/arm/makefile

    符号说明LOADADDRuImage指定加载地址,u-boot将uImage加载到内存RAM的地址PHYS_OFFSET RAM物理内存起始地址:0x60000000PAGE_OFFSET内核虚拟内存空间起始地址:一般为0xC0000000,3G用户空间+1G内核空间。在vexpress开发板平台为0x80000000虚拟内存与物理内存一般存在一个线性映射:VA = PA + OFFSET该值可通过Kconfig进行配置,映射到PHYS_OSSFETTEXT_OFFSET内核起始地址相对于RAM地址偏移,一般为0x8000,在物理内存和虚拟内存空间都是一样的。定义在arch/arm/MakefileTEXTADDR 内核镜像启动的虚拟地址:TEXT_ADDR=PAGE_OFFSET + TEXT_OFFSET内核编译时采用此地址作为链接地址:0x80008000ZRELADDR 内核镜像启动的物理地址,zImage启动将真正的内核代码解压到此地址,然后跳到此处执行。0x60008000__virt_to_phys(TEXTADDR) = ZRELADDRZTEXTADDRzImage运行物理地址,若LOADADDR没定义,u-boot会将uImage下载到该地址,该地址空间可以是RAM或NOR FLASH地址空间

    TEXT_OFFSET

    PHYS_OFFSET - TEXT_OFFSET 这段内存主要用来保存bootargs

    PAGE_OFFSET的配置

    make menuconfig

    mkimage工具

    工具位于u-boot源码的tools目录下,用来制作启动映像文件 mkimage –A arm -O linux –T kernel –C none –a 0x60003000 –e 0x60003000 -d zImage uImage -A:CPU类型 -O:操作系统 -T:指定image类型 -C:采用压缩方式:none、gzip、bzip2 -a:内核加载地址 -e:内核入口地址

    Processed: 0.014, SQL: 9