Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322150
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-18 15:21
文章分类

全部博文(85)

文章存档

2017年(1)

2016年(19)

2015年(55)

2014年(10)

我的朋友

分类: 嵌入式

2015-07-04 23:43:01

<span style="font-family:courier new,courier;">在Bootloader将 Linux 内核映像拷贝到 RAM 以后,可以通过下例代码启动 Linux 内核:&nbsp; </span><br /> <span style="font-family:courier new,courier;">call_linux(0, machine_type, kernel_params_base)。<br /> </span><br /> <span style="font-family:courier new,courier;">其中,machine_tpye 是Bootloader检测出来的处理器类型ID, kernel_params_base 是启动参数在 RAM 的地址。通过这种方式将 Linux 启动需要的参数从 bootloader传递到内核。 </span><br /> <span style="font-family:courier new,courier;"><br /> theKernel (0, machid, bd-&gt;bi_boot_params);&nbsp; </span><br /> machid<br /> Uboot中在board/embedclub/Smdk2440.c 设置了bi_arch_number<br /> #if defined(CONFIG_S3C2410)<br /> &nbsp;&nbsp; &nbsp;/* arch number of SMDK2410-Board */<br /> &nbsp;&nbsp; &nbsp;gd-&gt;bd-&gt;bi_arch_number = MACH_TYPE_SMDK2410;//193<br /> #endif<br /> <br /> #if defined(CONFIG_S3C2440)<br /> /* arch number of S3C2440-Board */<br /> &nbsp;&nbsp; &nbsp;gd-&gt;bd-&gt;bi_arch_number = MACH_TYPE_SMDK2440A;//1999<br /> &nbsp;&nbsp; &nbsp;//gd-&gt;bd-&gt;bi_arch_number = 782;<br /> #endif<br /> <br /> 在内核启动初期内核引导阶段时有检测内核是否支持该单板,类型是否匹配,即当前内核中的machid和boot传入的ID是否匹配。<br /> __lookup_machine_type<br /> 匹配方法如何?

不同的machine_desc结构用于不同的开发板,U-BOOT调用内核时,会在r1寄存器中给出开发板的标记(机器类型ID);对于S3C2410、S3C2440开发板,U-Boot传入的机器类型ID为MACH_TYPE_SMDK2410、MACH_TYPE_S3C2440,它们对应的machine_desc结构分别在内核中 arch/arm/mach-s3c2410/mach-smdk2410.c

arch/arm/mach-s3c2440/mach-smdk2440.c中定义


MACHINE_START(S3C2440, "SMDK2440")
    /* Maintainer: Ben Dooks <ben@fluff.org> */
    .phys_io    = S3C2410_PA_UART,
    .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
    .boot_params    = S3C2410_SDRAM_PA + 0x100,

    .init_irq    = s3c24xx_init_irq,
    .map_io        = smdk2440_map_io,
    .init_machine    = smdk2440_machine_init,
    .timer        = &s3c24xx_timer,
MACHINE_END

#define MACHINE_START(_type,_name)            \
static const struct machine_desc __mach_desc_##_type    \
 __used                            \
 __attribute__((__section__(".arch.info.init"))) = {    \
    .nr        = MACH_TYPE_##_type,        \
    .name        = _name,

#define MACHINE_END                \
};

可见.nr=MACH_TYPE_S3C2440,可是这个是一个宏怎么没见定义呢?
阅读(1203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~