U-Boot在S3C2410上的移植
时间:09-17
来源:互联网
点击:
在本系统中,传递参数时分别调用了以下tag:
setup_start_tag(bd); //标记列表开始
setup_memory_tags(bd); //设置内存的起始位置和大小
setup_commandline_tag(bd, commandline); /*Linux内核在启动时可以命令行参数的形式来接收信息,利用这一点可以向内核提供那些内核不能检测的硬件参数信息,或者重载(override)内核检测到的信息,这里char *commandline "initrd=0x30800000,0x440000 root="/dev/ram" init="/linuxrc" console="ttyS0"";*/
setup_ramdisk_tag(bd); //表示内核解压后ramdisk的大小
setup_initrd_tag(bd, initrd_start, initrd_end); //设置ramdisk的大小和物理起始地址
setup_end_tag(bd); //标记列表结束
其中bd_t *bd = gd->bd是指向bd_t 结构体的指针,在该结构体中存放了关于开发板配置的基本信息。标记列表应该放在内核解压和initrd的bootp程序都不会覆盖的内存区域,同时又不能和异常处理的入口地址相冲突。建议放在RAM起始的16K大小处,在本系统中即为0x30000100处。
U-Boot调用 Linux 内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到 MEM_START+0x8000地址处。在跳转时,要满足下列条件:
a) CPU寄存器的设置:R0=0;R1=机器类型 ID,本系统的机器类型ID=193。R2=启动参数标记列表在RAM中的起始基地址;
b) CPU模式:必须禁止中断(IRQs和FIQs);CPU必须工作在SVC模式;
c) Cache和MMU的设置:MMU 必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭。
系统采用下列代码来进入内核函数:
theKernel = (void (*)(int, int))ntohl(hdr->ih_ep);
theKernel(0, bd->bi_arch_number);其中,hdr是image_header_t类型的结构体,hdr->ih_ep指向内核的第一条指令地址,即Linux操作系统下的/kernel/arch/arm/boot/compressed/head.S汇编程序。theKernel()函数调用应该不会返回,如果该调用返回,则说明出错。
结语
本文总结介绍了U-Boot在S3C2410上的移植,移植完成后,U-Boot能够稳定地运行在开发板上,为后续的软件开发打下较好的基础.
setup_start_tag(bd); //标记列表开始
setup_memory_tags(bd); //设置内存的起始位置和大小
setup_commandline_tag(bd, commandline); /*Linux内核在启动时可以命令行参数的形式来接收信息,利用这一点可以向内核提供那些内核不能检测的硬件参数信息,或者重载(override)内核检测到的信息,这里char *commandline "initrd=0x30800000,0x440000 root="/dev/ram" init="/linuxrc" console="ttyS0"";*/
setup_ramdisk_tag(bd); //表示内核解压后ramdisk的大小
setup_initrd_tag(bd, initrd_start, initrd_end); //设置ramdisk的大小和物理起始地址
setup_end_tag(bd); //标记列表结束
其中bd_t *bd = gd->bd是指向bd_t 结构体的指针,在该结构体中存放了关于开发板配置的基本信息。标记列表应该放在内核解压和initrd的bootp程序都不会覆盖的内存区域,同时又不能和异常处理的入口地址相冲突。建议放在RAM起始的16K大小处,在本系统中即为0x30000100处。
U-Boot调用 Linux 内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到 MEM_START+0x8000地址处。在跳转时,要满足下列条件:
a) CPU寄存器的设置:R0=0;R1=机器类型 ID,本系统的机器类型ID=193。R2=启动参数标记列表在RAM中的起始基地址;
b) CPU模式:必须禁止中断(IRQs和FIQs);CPU必须工作在SVC模式;
c) Cache和MMU的设置:MMU 必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭。
系统采用下列代码来进入内核函数:
theKernel = (void (*)(int, int))ntohl(hdr->ih_ep);
theKernel(0, bd->bi_arch_number);其中,hdr是image_header_t类型的结构体,hdr->ih_ep指向内核的第一条指令地址,即Linux操作系统下的/kernel/arch/arm/boot/compressed/head.S汇编程序。theKernel()函数调用应该不会返回,如果该调用返回,则说明出错。
结语
本文总结介绍了U-Boot在S3C2410上的移植,移植完成后,U-Boot能够稳定地运行在开发板上,为后续的软件开发打下较好的基础.
嵌入式 S3C2410 ARM Linux VxWorks 看门狗 相关文章:
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 嵌入式线控驾驶系统开发过程中设计和测试考虑(02-02)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)