在AT91SAM9260中引导Linux内核

时间:2013-11-23 11:16:47

标签: linux-kernel arm boot

我尝试了解ARM内核的构建和启动过程。我从www.kernel.org上获取了vanila linux,并在运行AT91SAM9260配置后构建它。 在我们编译内核的消息中显示:

==========================================

LD vmlinux

SORTEX vmlinux

SYSMAP System.map

OBJCOPY arch / arm / boot / Image

内核:arch / arm / boot / Image已准备就绪

GZIP arch / arm / boot / compressed / piggy.gzip

AS arch / arm / boot / compressed / piggy.gzip.o

LD arch / arm / boot / compressed / vmlinux

OBJCOPY arch / arm / boot / zImage

内核:arch / arm / boot / zImage准备就绪

UIMAGE arch / arm / boot / uImage

图片名称:Linux-3.9.1 +

创建时间:2013年11月23日星期六18:15:58

图像类型:ARM Linux内核映像(未压缩)

数据大小:1635544字节= 1597.21 kB = 1.56 MB

加载地址:20008000

切入点:20008000

图像拱/ arm / boot / uImage已准备好

==========================================

我的问题是:

  1. 图片类型未压缩,这意味着我们不会将vmlinux压缩为zImage?

  2. 加载地址:20008000:这是在arch / arm / boot / Makefile中定义的解压缩图像的地址= ZRELADDR? 这个地址也是../arm/kernel/head.o的地址? 看来我们不使用地址KERNEL_PHYS,这种方法是常见的方式还是只适用于AT91SAM系列?

  3. 基本上,我们构建和启动的过程是:

  4. 一个。构建内核步骤:vmlinux - > uImage(跳过创建zImage)。

    湾内核启动步骤:DataFlash / NAND --load - > uImage(@ 0x22200000)--- decompress - >未压缩的图像(@ 0x20008000)。

    在这种情况下,虽然在构建消息中我看到zImage已创建,但在启动过程中没有zImage。我错了?

    4。我在/arch/arm/kernel/vmlinux.lds中找到的地址0xC0008000怎么样: 。 = 0xC0000000 + 0x00008000; 我们用它吗?我把这个地址与ZRELADDR混淆了。

    问候。

1 个答案:

答案 0 :(得分:2)

  1. uImage文件很可能是使用zImage构建的。它表示未压缩,因为uImage本身没有被压缩。

  2. 引导加载程序可以使用加载地址来存储Linux内核引导早期阶段所需的数据(例如引导加载程序中定义的命令行)。

  3. 你对启动过程是正确的。但是当使用zImage时,解压缩由内核而不是引导加载程序完成。请参阅decompress_kernel()

  4. 地址0xc0008000是虚拟地址。它映射到物理地址0x20008000。只有在Linux设置内存转换(MMU)后才能使用虚拟地址。