您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术BootLoader与内核之间参数传递 正文
BootLoader与内核之间参数传递

BootLoader与内核之间参数传递

点击数:7285 次   录入时间:03-04 11:54:21   整理:http://www.55dianzi.com   嵌入式系统-技术

    MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")

    /* Maintainer: SAN People/Atmel */

    .phys_io = AT91_BASE_SYS,

    .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,

    .boot_params = AT91_SDRAM_BASE + 0x100,

    .timer = &at91rm9200_timer,

    .map_io = dk_map_io,

    .init_IRQ = dk_init_irq,

    .init_machine = dk_board_init,

    MACHINE_END

    最后就是打开MMU,并跳转到 init/main.c[2]的start_kernel(初始化系统。在 init/main.c[2] 中,函数start_kernel()的部分代码如下:

    {

    ……

    setup_arch();

    ……

    }

    在 arch/arm/kernel/setup.c[2]中,函数setup_arch()的部分代码如下:

    {

    ……

    setup_processor();

    mdesc=setup_machine(machine_arch_type);

    ……

    parse_tags(tags);

    ……

    }

    setup_processor()函数从处理器内核描述符表中找到匹配的描述符,并初始化一些处理器变量。setup_machine()用机器编号(在解压函数decompress_kernel 中被赋值)作为参数返回机器描述符。从机器描述符中获得内核参数的物理地址,赋值给tags 变量。然后调用parse_tags()函数分析内核参数链表,把各个参数值传递给全局变量。这样内核就收到了BootLoader 传递的参数。

    5. 参数传递的验证和测试

    参数传递的结果可以通过内核启动的打印信息来验证。

    Machine: Atmel AT91RM9200-DK

    ……

    Kernel command line: console=ttyS0,115200 root=/dev/ram rw init=/linuxrc

    ……

    Memory: 64MB = 64MB total

    ……

    checking if image is initramfs...it isn''t (no cpio magIC); looks like an initrd

    Freeing initrd memory: 1024K

    ……

    RAMDISK: Compressed image found at bLOCk 0

    一个完备的BootLoader 是一个很复杂的工程,本文所介绍的只是嵌入式系统的BootLoaer 基本功能。任何一个BootLoader 都离不开这个基本功能,内核只有接收这些参数才能正确地启动,同时也为内核的移植和调试奠定了良好的基础。



上一页  [1] [2] 


本文关键字:BootLoader  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术