《micro2440开发》第八章:micro/mini2440上移植uboot
来源:互联网 发布:windows phone上的ide 编辑:程序博客网 时间:2024/05/16 12:32
====================================================================================================================================
一、认识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_MMUenable_mmu:/* enable domain access */ldrr5, =0x0000ffffmcrp15, 0, r5, c3, c0, 0/* load domain access register *//* Set the TTB register */ldrr0, _mmu_table_baseldrr1, =CONFIG_SYS_PHY_UBOOT_BASEldrr2, =0xfff00000bicr0, r0, r2orrr1, r0, r1mcrp15, 0, r1, c2, c0, 0/* Enable the MMU */mrcp15, 0, r0, c1, c0, 0orrr0, r0, #1/* Set CR_M to enable MMU *//* Prepare to enable the MMU */adrr1, skip_hw_initandr1, r1, #0x3fcldrr2, _TEXT_BASEldrr3, =0xfff00000andr2, r2, r3orrr2, r2, r1bmmu_enable.align 5/* Run in a single cache-line */mmu_enable:mcrp15, 0, r0, c1, c0, 0nopnopmovpc, r2#endif
但在OS启动前不能开启MMU(因为启动kernel要bootloader跳转物理地址);因此,在类似S3C6400这种情况下、u-boot在执行跳转之前还需要先关闭MMU。见:
u-boot-2009.03/cpu/arm920t或arm1176$ gedit start.S
#ifndef CONFIG_SKIP_LOWLEVEL_INITcpu_init_crit:/* * flush v4 I/D caches */movr0, #0mcrp15, 0, r0, c7, c7, 0/* flush v3/v4 cache */mcrp15, 0, r0, c8, c7, 0/* flush v4 TLB *//* * disable MMU stuff and caches */mrcp15, 0, r0, c1, c0, 0bicr0, r0, #0x00002300@ clear bits 13, 9:8 (--V- --RS)bicr0, r0, #0x00000087@ clear bits 7, 2:0 (B--- -CAM)orrr0, r0, #0x00000002@ set bit 2 (A) Alignorrr0, r0, #0x00001000@ set bit 12 (I) I-Cachemcrp15, 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. */movip, lr#ifdefined(CONFIG_AT91RM9200EK)#elsebllowlevel_init#endifmovlr, ipmovpc, 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。
====================================================================================================================================
- 《micro2440开发》第八章:micro/mini2440上移植uboot
- 《micro2440开发》第九章:micro/mini2440上使用dnw烧录Nand Flash
- uboot在mini2440上的移植总结
- uboot在mini2440上的移植
- uboot在mini2440上的移植
- u-boot-2011.03在mini2440/micro2440上的移植(一)——准备工作
- u-boot-2011.03在mini2440/micro2440上的移植(三)——支持DM9000
- u-boot-2011.03在mini2440/micro2440上的移植(四)——支持内核启动
- u-boot-2011.03在mini2440/micro2440上的移植(五)——支持Nand Flash
- u-boot-2011.03在mini2440/micro2440上的移植(六)——支持yaffs下载
- uboot移植到mini2440
- mini2440之uboot移植
- uboot移植到mini2440
- uboot在mini2440上的移植详细过程
- mini2440开发板移植uboot后norflash环境变量保存
- 详细解析uboot移植(针对开发板mini2440)
- QT开发环境在mini2440上移植
- QT开发环境在mini2440上移植
- java数据结构基础
- 顶级、块级、内联,html元素的三大分类
- Java连接池的基本工作原理
- 进程与进程间的通信方式--面试常考题目
- MUSH重要函数
- 《micro2440开发》第八章:micro/mini2440上移植uboot
- 若爱 就如桃花般地去爱
- apache挂钩(HOOK)
- Android中的AlarmManager的使用
- lucene中Field类详解
- ubuntu分辨率设置 12.04
- 嵌入式Linux串口应用编程
- XML介绍之DTD约束语法详解四
- CMMI