《micro2440开发》第八章:micro/mini2440上移植uboot
2012-10-11 14:21
246 查看
====================================================================================================================================
一、认识u-boot
需要强调的是:在S3C2440之类的片子在u-boot里边是没有打开mmu的、见:
u-boot-2009.03/cpu/arm920t$ gedit start.S
而在S3C6400这类比较高端的CPU里u-boot阶段已经打开mmu;
因为cache的使用依赖与mmu,为了提高执行效率、打开mmu;见:
u-boot-2009.03/cpu/arm1176$ gedit start.S
但在OS启动前不能开启MMU(因为启动kernel要bootloader跳转物理地址);因此,在类似S3C6400这种情况下、u-boot在执行跳转之前还需要先关闭MMU。见:
u-boot-2009.03/cpu/arm920t或arm1176$ gedit start.S
从以上分析可以知道:为了提高u-boot阶段代码的执行效率,在u-boot启动的第一阶段(也就是我们经常说的编译后大小为4K的全由汇编写的代码段)开启了mmu功能。
完成硬件设备初始化;在(开启MMU和cache、设置异常向量、CPU进入SVC模式、设置控制寄存器地址、关闭看门狗、屏蔽中断、设置MPLLCON,UPLLCON, CLKDIVN
)这些片段时mmu都是开启的;在(关闭MMU和cache、初始化RAM控制寄存器、复制U-Boot第二阶段代码到RAM、设置堆栈、清除BSS段、跳转到第二阶段代码入口)
这些片段时mmu已经关闭。
当从NAND FLASH启动时,可以复习如下文章:《micro2440开发》第六章:micro2440从NAND FLASH启动原理分析u-boot启动的第二阶段代码在SDRAM中执行、由C语言写的;完成开发板配置,时钟、环境变量和串口控制台的初始化、打印u-boot版本和编译时间、配置并显示可用RAM大小、NOR
FLASH和NAND FLASH的初始化等工作后进入loop循环;等待命令将kernel从flash拷贝至内存,并跳转让kernel启动。
====================================================================================================================================
1.交叉编译器版本arm-linux-gcc 4.4.3符合EABI标准的交叉编译器,http://www.arm9.net/mini2440-linux.asp
2.下载uboot-2009-03,http://download.csdn.net/download/wjg198576/1363633
====================================================================================================================================
二、uboot的顶层makefile做如下修改
1.添加如下内容
tankai2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t tankai2440 tankai s3c24x0
#注意:第二行tankai2440是开发板的型号,对应与board/tankai/tankai2440目录;
第二行tankai是开发者名字。
2.修改交叉编译器
export CROSS_COMPILE = /home/qemuformini2440/tools/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
三、添加板级支持
1.在board目录下创建作者tankai子目录,在作者tankai子目录下创建tankai2440板子目录
将board/smdk2410/所有文件拷贝至board/tankai/tankai2440/,并将smdk2410.c改为tankai2440.c;修改Makefile里边smdk2410.o为tankai2440.o。
2.在incluede/configs/目录下将smdk2410.h复制一份并改名为tankai2440.h
四、编译
make tankai2440_config
make -j4
遇到问题请看:http://yebaoshan.blog.163.com/blog/static/2042311672012273191763/
生成目录:跟目录下u-boot.bin
注意:由于过早版本的uboot没有提供对EABI交叉编译器的支持,会导致编译不过;所以,需要使用较新的uboot。
====================================================================================================================================
一、认识u-boot
需要强调的是:在S3C2440之类的片子在u-boot里边是没有打开mmu的、见:
u-boot-2009.03/cpu/arm920t$ gedit start.S
而在S3C6400这类比较高端的CPU里u-boot阶段已经打开mmu;
因为cache的使用依赖与mmu,为了提高执行效率、打开mmu;见:
u-boot-2009.03/cpu/arm1176$ gedit start.S
#ifdef CONFIG_ENABLE_MMU enable_mmu: /* enable domain access */ ldr r5, =0x0000ffff mcr p15, 0, r5, c3, c0, 0 /* load domain access register */ /* Set the TTB register */ ldr r0, _mmu_table_base ldr r1, =CONFIG_SYS_PHY_UBOOT_BASE ldr r2, =0xfff00000 bic r0, r0, r2 orr r1, r0, r1 mcr p15, 0, r1, c2, c0, 0 /* Enable the MMU */ mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #1 /* Set CR_M to enable MMU */ /* Prepare to enable the MMU */ adr r1, skip_hw_init and r1, r1, #0x3fc ldr r2, _TEXT_BASE ldr r3, =0xfff00000 and r2, r2, r3 orr r2, r2, r1 b mmu_enable .align 5 /* Run in a single cache-line */ mmu_enable: mcr p15, 0, r0, c1, c0, 0 nop nop mov pc, r2 #endif
但在OS启动前不能开启MMU(因为启动kernel要bootloader跳转物理地址);因此,在类似S3C6400这种情况下、u-boot在执行跳转之前还需要先关闭MMU。见:
u-boot-2009.03/cpu/arm920t或arm1176$ gedit start.S
#ifndef CONFIG_SKIP_LOWLEVEL_INIT cpu_init_crit: /* * flush v4 I/D caches */ mov r0, #0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ /* * disable MMU stuff and caches */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS) bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM) orr r0, r0, #0x00000002 @ set bit 2 (A) Align orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache mcr p15, 0, r0, c1, c0, 0 /* * before relocating, we have to setup RAM timing * because memory timing is board-dependend, you will * find a lowlevel_init.S in your board directory. */ mov ip, lr #if defined(CONFIG_AT91RM9200EK) #else bl lowlevel_init #endif mov lr, ip mov pc, lr #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
从以上分析可以知道:为了提高u-boot阶段代码的执行效率,在u-boot启动的第一阶段(也就是我们经常说的编译后大小为4K的全由汇编写的代码段)开启了mmu功能。
完成硬件设备初始化;在(开启MMU和cache、设置异常向量、CPU进入SVC模式、设置控制寄存器地址、关闭看门狗、屏蔽中断、设置MPLLCON,UPLLCON, CLKDIVN
)这些片段时mmu都是开启的;在(关闭MMU和cache、初始化RAM控制寄存器、复制U-Boot第二阶段代码到RAM、设置堆栈、清除BSS段、跳转到第二阶段代码入口)
这些片段时mmu已经关闭。
当从NAND FLASH启动时,可以复习如下文章:《micro2440开发》第六章:micro2440从NAND FLASH启动原理分析u-boot启动的第二阶段代码在SDRAM中执行、由C语言写的;完成开发板配置,时钟、环境变量和串口控制台的初始化、打印u-boot版本和编译时间、配置并显示可用RAM大小、NOR
FLASH和NAND FLASH的初始化等工作后进入loop循环;等待命令将kernel从flash拷贝至内存,并跳转让kernel启动。
====================================================================================================================================
1.交叉编译器版本arm-linux-gcc 4.4.3符合EABI标准的交叉编译器,http://www.arm9.net/mini2440-linux.asp
2.下载uboot-2009-03,http://download.csdn.net/download/wjg198576/1363633
====================================================================================================================================
二、uboot的顶层makefile做如下修改
1.添加如下内容
tankai2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t tankai2440 tankai s3c24x0
#注意:第二行tankai2440是开发板的型号,对应与board/tankai/tankai2440目录;
第二行tankai是开发者名字。
2.修改交叉编译器
export CROSS_COMPILE = /home/qemuformini2440/tools/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
三、添加板级支持
1.在board目录下创建作者tankai子目录,在作者tankai子目录下创建tankai2440板子目录
将board/smdk2410/所有文件拷贝至board/tankai/tankai2440/,并将smdk2410.c改为tankai2440.c;修改Makefile里边smdk2410.o为tankai2440.o。
2.在incluede/configs/目录下将smdk2410.h复制一份并改名为tankai2440.h
四、编译
make tankai2440_config
make -j4
遇到问题请看:http://yebaoshan.blog.163.com/blog/static/2042311672012273191763/
生成目录:跟目录下u-boot.bin
注意:由于过早版本的uboot没有提供对EABI交叉编译器的支持,会导致编译不过;所以,需要使用较新的uboot。
====================================================================================================================================
相关文章推荐
- uboot在mini2440上的移植
- 《micro2440开发》第九章:micro/mini2440上使用dnw烧录Nand Flash
- uboot在mini2440上的移植详细过程
- mini2440的uboot-2010.03移植 《一》
- uboot2015.01移植到mini2440
- uboot-2009.03成功移植到mini2440
- uboot移植到mini2440
- uboot移植到mini2440
- uboot-2009.03成功移植到mini2440
- uboot在mini2440上的移植
- uboot在mini2440上的移植总结
- uboot-2009.03成功移植到mini2440
- uboot-2009.03成功移植到mini2440
- uboot-2010.06移植到mini2440经验(1)准备
- uboot-2010.06移植到mini2440经验(2)配置时钟
- uboot-2010.06移植到mini2440经验(3)添加nor flash支持
- uboot-2012.04.01移植到mini2440(一)启动流程、内存分布及重定位初步分析
- uboot-2010.06移植到mini2440经验(4)添加对DM9000网卡支持
- U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行
- mini2440之U-Boot +linux+NFS文件系统移植