![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
U-Boot与内核
陈伙子
生命应有所坚持,生存当随遇而安
展开
-
BootLoader跑飞了
我这两天写一个引导内核的bootloader,程序跑飞了,总以为自己写的代码出了问题,检查来检查去,搞了两天硬是没找到代码哪里出了毛病,后来发现链接地址不是0,这才发现问题所在。这个链接地址不是0,代码就不能随便乱写了。在pc寄存器指向复制到SDRAM的代码之前的那些代码是在steppingstore中运行的,这些代码的链接地址也不是0,则它们要求是位置无关的才行。 小结了一原创 2017-12-10 19:31:15 · 2779 阅读 · 0 评论 -
自己写个一简单的bootloader
步骤:1、关看门狗2、设置栈,调用C函数进行其他初始化,但从定位代码前的代码,必须保证位置无关性。3、初始化时钟4、初始化存储控制器,以使用SDRAM5、设置存储控制器后,SDRAM可用了,重新设置栈指向SDRAM最高处。6、初始化串口7、初始化nand flash8、重定位代码9、清楚bss段 //参考uboot源码 //步骤123456789都可以原创 2018-01-14 21:06:44 · 1387 阅读 · 0 评论 -
移植linux-3.4.2内核到JZ2440
移植之前,首先了解一下相关的一些理论知识。 linux内核Makefile文件分类: 1、顶层Makefile:他是所有Makefile文件的核心,从总体上控制着内核的编译、连接。 2、.config文件: 配置文件,它在配置内核时生成。所有Makefile文件(包括顶层目录及各级子目录)都是根据.config来决定使用那些文件。 3、arch/$(ARCH)/Makef...原创 2018-03-27 10:21:02 · 1056 阅读 · 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 · 888 阅读 · 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 · 1546 阅读 · 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 · 1455 阅读 · 0 评论 -
移植uboot(易用性修改与uboot裁剪)
易用性修改与裁剪uboot:uboot启动:1、读环境变量2、判断是否有效,有效则使用,无效则使用代码中写死的默认环境变量重启uboot后,会打印:*** Warning - bad CRC, using default environment,读启动参数,格式不对,这说明没有找到环境变量,使用默认的环境变量uboot做一次分区(mtdparts_init()函数,原创 2018-01-16 15:57:52 · 1259 阅读 · 0 评论 -
移植uboot到JZ2440的笔记
移植的是u-boot-2012.04.01 下面基本上都是东山老师移植uboot视频的实验笔记,移植中出现的很多问题,下面可能都会有你想要的答案。虽然下面这个笔记对着实验按部就班,没有什么深度,但我觉得很有用,解决问题的过程中,不懂的地方也就懂了,实践是学习的好方法,既检验理论知识,遇到问题又促进思考,互相作用,效果很好。uboot配置、编译:两条命令搞定:1原创 2018-01-16 14:54:19 · 1705 阅读 · 0 评论 -
移植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 · 1136 阅读 · 1 评论 -
移植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 · 521 阅读 · 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 · 669 阅读 · 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 · 1576 阅读 · 0 评论 -
BusyBox制作根文件系统
文件系统的特点: Linux系统将磁盘、flash等存储设备划分为若干个分区,在不同的分区存放不同类别的文件,与Windows的C盘类似,Linux一样要在一个分区上存放系统启动所必须的文件,比如内核映像文件(在嵌入式系统中,内核一般单独存放在一个分区中)、内核启动后运行的第一个程序(init)、给应用户提供操作界面的shell程序、应用程序所依赖的库等。这些必须的、基本的文件合称为根文件系...原创 2018-03-27 22:56:19 · 6284 阅读 · 0 评论