Bootloader
Linux学习之路
这个作者很懒,什么都没留下…
展开
-
自己写 bootloader
想想 uboot 的代码量,我们说自己写一个 bootloader 是不是口出狂言了?然而并没有,bootloader 的唯一目的只有一个,那便是启动内核。内核就是一大段可执行程序,我们只要跳转到它的入口地址去执行不就OK? 所以,写一个简单的 bootloader 并不困难。 现在来思考一下,目的是启动内核,那么内核在哪里?刚上电的时候,内核肯定是位于 nandflash 里的,我们得原创 2016-07-27 15:55:22 · 11331 阅读 · 2 评论 -
移植u-boot2012.04.1 -》2440 (三)nandflash 识别
board_init_r 函数中,两个重要的过程就是 norflash 的识别和 nandflash 的识别,norflash 的识别过程以及如何移植前边已经分析过,本文首先会分析 smdk2410 nandflash 的识别过程,根据 2410 与 2440 之间的差别,进行移植。 在分析之前,先来回顾一下 nandflash 的操作。一、nandflash 操作 1、发命令原创 2016-09-16 17:39:13 · 1827 阅读 · 0 评论 -
移植u-boot2012.04.1 -》2440 (五)支持 nand nor 两种启动方式(完结)
前边4篇文章,成功将 u-boot2012 移植到了 2440 开发板上,但是它仅仅支持 norflash 启动并不够完善,下面我们设法让它支持两种启动方式。 首先,我们得先分析一下目前的启动流程: 链接地址为 0 第一阶段:start.S中的汇编部分,包括时钟、sdram 等初始化 第二阶段:board_init_f 先是调用了大量C函数进行串口什么的初始原创 2016-09-17 13:51:45 · 1499 阅读 · 1 评论 -
移植u-boot2012.04.1 -》2440 (四)DM9000移植,环境变量设置
本文主要在前三篇文章的基础上继续移植网卡,设置环境变量。原创 2016-09-16 17:39:47 · 1157 阅读 · 0 评论 -
移植u-boot2012.04.1 -》2440 (二)norflash 识别
在上一篇文章中,我们实现了新建单板,时钟 sdram 等一系列初始化工作,串口已经能正确输出打印信息,但是有错误信息,下面来解决norflash 的识别问题原创 2016-09-16 17:38:55 · 1294 阅读 · 0 评论 -
移植u-boot2012.04.1 -》2440 (一)新建单板,第一阶段修改
2440 平台在移植时,均参考 SMDK2410 ,以它作为母版进行修改,所以,我们需要对 SMDK2410 在 u-boot 中的代码非常熟悉,才能做到移植起来得心应手,没有别的好办法,移植之前先进行分析,或者边移植边分析。u-boot2012相对于 u-boot1.1.6 有了哪些变化,对于 u-boot2012 的大框架,我们也是需要提前分析和了解的。移植之前的分析工作,请参考我之前的博客:http://blog.csdn.net/lizuobin2/article/details/52089474原创 2016-09-16 17:38:29 · 1424 阅读 · 0 评论 -
u-boot-2012.04.1 第一阶段分析 内存划分 代码重定位
今天学习了一下 u-boot-2012.04.01 的第一阶段,发现与 u-boot1.1.6 的差异还是很大的,尤其是在代码重定位方面。在 u-boot1.1.6 中链接地址为 0x33f80000 ,重定位时,uboot也被拷贝到这个固定的地址。然而,u-boot-2012 的链接地址为 0 ,在重定位时,uboot 在 sdram 中的地址也不是固定的,这样就带来了一个问题 uboot 中使原创 2016-08-01 22:24:39 · 1877 阅读 · 0 评论 -
回味经典——uboot1.1.6 之 第二阶段 第三阶段
第一阶段:http://blog.csdn.net/lizuobin2/article/details/52054293 上篇文章说到,再清 BSS 段之后,CPU 跳转到 sdram 里的 start_armboot() 函数,本文,分析 uboot 流程的第二阶段。 start_armboot函数在lib_arm/board.c中定义,是U-Boot第二阶段代码的入原创 2016-07-29 14:10:12 · 3033 阅读 · 0 评论 -
回味经典——uboot1.1.6 之 第一阶段
最近打算移植一个比较新的 uboot 到开发板,回想起来上一次移植 uboot1.1.6 已经差不多是一年前了,手头保留了一些当时移植分析时的笔记,但是没有归纳梳理,在移植新版 uboot 之前,再来回味一下经典。本文重点在于分析 uboot 启动流程以及 uboot 自身的细节,比如栈空间的划分、如何设置 tag 、如何添加一个自定义命令等。但是不涉及基本的硬件驱动的分析,比如内存初始化、时钟初原创 2016-07-28 20:52:54 · 4440 阅读 · 4 评论 -
位置无关码、位置有关码、链接地址、加载地址
在移植 uboot 时,接触到一个概念叫做 位置无关码,那么与它对应的就是位置有关码。提到这两个概念就还得提一提链接地址、加载地址。 链接地址,链接脚本里指定的,理论上程序运行时所处的地址。在编译时,编译器会根据链接地址来翻译位置有关码。 加载地址,程序运行时,实际所处的地址。 位置无关码,位置有关码,是相对于一条指令的正常目的来说的。比如 ldr r0 ,=标号,它原创 2016-07-27 23:48:45 · 7412 阅读 · 3 评论 -
制作uboot
mkimage工具位于 Uboot tools目录下 mkimage是在制作镜像文件时候, 在原来的image文件前增加一个0x40字节长度的头,增加的头结构描述如下/* * Legacy format image header, * all data in network byte order (aka natural aka bigendian). */typed转载 2016-07-27 16:36:46 · 1406 阅读 · 0 评论 -
uboot dnw 源码分析
dnw 是 bootloader 中一个比较实用的工具,使用 usb 线就可以下载文件到指定的内存,那么它是如何实现的呢?其实原理并不复杂,以2440为例,它有三个USB口,其中两个是 usb host ,另一个为usb slave相当于一个普通的USB设备,因此主机可以像操作U盘一样来给我们的设备发送文件。 USB 通过D-,D+ 信号的状态判断设备的插入,如下图所示,D+ 接上拉电阻为全速原创 2016-12-03 22:09:16 · 2671 阅读 · 3 评论