u-boot引导内核流程分析与移植
本专栏介绍了uboot启动内核的较详细过程,并自己写了一个引导内核的简单的BootLoader,对理解uboot如何引导内核大有帮助,并在移植u-boot-2012-04-01到JZ2440板子上时做了较详细的笔记记录,供大家参考。
陈伙子
生命应有所坚持,生存当随遇而安
展开
-
移植uboot(支持yaffs2及制作补丁)
支持yaffs2:进入include/configs smdk2444.h,加上:#define CONFIG_CMD_NAND_YAFFS/drivers/mtd/nand nand_util 修改一处逻辑错误,否则会导致只烧写一页数据:567行:把if(!rval)改为:if(rval)烧写的时候用 nand wirte.yaffs2556行:把ops原创 2018-01-16 16:01:30 · 1138 阅读 · 1 评论 -
移植uboot(易用性修改与uboot裁剪)
易用性修改与裁剪uboot:uboot启动:1、读环境变量2、判断是否有效,有效则使用,无效则使用代码中写死的默认环境变量重启uboot后,会打印:*** Warning - bad CRC, using default environment,读启动参数,格式不对,这说明没有找到环境变量,使用默认的环境变量uboot做一次分区(mtdparts_init()函数,原创 2018-01-16 15:57:52 · 1262 阅读 · 0 评论 -
移植uboot(支持DM9000)
支持DM9000:根据net下make修改配置文件/include/configs/smdk2440.h:去掉8900相关宏定义,添加:#define CONFIG_DRIVER_DM9000#define CONFIG_DM9000_BASE 0x20000000#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA原创 2018-01-16 15:48:14 · 523 阅读 · 0 评论 -
移植uboot(支持nand)
复制S3C2410_nand.c为S3C2440_nand.c,修改drivers/mtd/nand/makefile编译S3C2440_nand.c而不编译S3C2410_nand.c添加:COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.osmdk2440.h中:#define CONFIG_NAND_S3C2410#define CON原创 2018-01-16 15:34:49 · 674 阅读 · 0 评论 -
移植uboot(识别nor flash及重设栈)
识别nor flash: board.c中board_init_r()有下面代码:puts("Flash: ");...flash_size = flash_init();flash_size = flash_init();是对nor flash的识别,nand 启动的话,根本无法识别nor flash,会导致调用下面代码挂死。puts(failed);hang();原创 2018-01-16 15:08:50 · 1583 阅读 · 0 评论 -
移植uboot到JZ2440的笔记
移植的是u-boot-2012.04.01 下面基本上都是东山老师移植uboot视频的实验笔记,移植中出现的很多问题,下面可能都会有你想要的答案。虽然下面这个笔记对着实验按部就班,没有什么深度,但我觉得很有用,解决问题的过程中,不懂的地方也就懂了,实践是学习的好方法,既检验理论知识,遇到问题又促进思考,互相作用,效果很好。uboot配置、编译:两条命令搞定:1原创 2018-01-16 14:54:19 · 1706 阅读 · 0 评论 -
自己写个一简单的bootloader
步骤:1、关看门狗2、设置栈,调用C函数进行其他初始化,但从定位代码前的代码,必须保证位置无关性。3、初始化时钟4、初始化存储控制器,以使用SDRAM5、设置存储控制器后,SDRAM可用了,重新设置栈指向SDRAM最高处。6、初始化串口7、初始化nand flash8、重定位代码9、清楚bss段 //参考uboot源码 //步骤123456789都可以原创 2018-01-14 21:06:44 · 1390 阅读 · 0 评论 -
BootLoader跑飞了
我这两天写一个引导内核的bootloader,程序跑飞了,总以为自己写的代码出了问题,检查来检查去,搞了两天硬是没找到代码哪里出了毛病,后来发现链接地址不是0,这才发现问题所在。这个链接地址不是0,代码就不能随便乱写了。在pc寄存器指向复制到SDRAM的代码之前的那些代码是在steppingstore中运行的,这些代码的链接地址也不是0,则它们要求是位置无关的才行。 小结了一原创 2017-12-10 19:31:15 · 2782 阅读 · 0 评论 -
uboot命令实现
command.h中:#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name,原创 2018-01-09 23:11:38 · 890 阅读 · 0 评论 -
u-boot-1.1.6配置与编译
两条命令搞定:1、make smdk2410_config2、makemake smdk2410_config命令分析:顶层Makefile中有如下内容:(后面版本的uboot的Makefile不一定是这样的内容,如u-boot-2012.04.01,把板子的Architecture CPU Board [VEDOR] [SOC]信息全部集中在boards.cfg文件中)MKCON...原创 2018-01-09 21:09:24 · 1463 阅读 · 0 评论 -
U-boot启动内核流程的详细分析
U-Boot属于两阶段的Bootloader。第一阶段的文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,前一文件是平台相关的,后一文件是开发板相关的。Uboot第一阶段分析:1、硬件设备的初始化:将cpu的工作模式设置为管理模式,关闭WATCHDOG,设置FCLK,HCLK,PCLK的比例,关闭mmu,cache.原创 2018-01-09 22:13:04 · 1548 阅读 · 0 评论 -
位置无关码、链接地址与加载地址
从Nand Flash 启动CPU的时候,内部硬件自动将Nand Flash 开始的4KB 数据复制到4KB的内部RAM“Steppingstore”(起始地址为0)中,cpu是从pc寄存器指向的地址取指令执行的,pc指向的地址应该存放有对应的指令才能正确执行。刚开始的时候pc寄存器是指向0地址的,CPU从0地址取指令开始执行。 链接地址是我们写Makefile的...原创 2017-11-25 23:38:17 · 3013 阅读 · 0 评论