代码实现一个基本的bootloader

什么是bootloader?百度一下一大堆,它就是给处理器优化出一个合适的环境,然后再把引线指向内核,剩下的事就交给内核,不会再有它什么事(这里的bootloader不是uboot)。那么就有人问了:如果它在执行中想有些参数之类的东西想传递给内核该怎么办呢?这不是太荒唐了吗?那当然不会这么简单了。

硬件初始化的工作大家应该能猜到一二,1、肯定是时钟呀,但在这之前需要先关掉看门狗,2、当然是内存了(就是RAM),然后就到内核了(简单吧),但这之前如果我们的bootloader过大的话,也需要把它重定位到RAM中去。这中间有一个小技巧:就是如果你想加快bootloader的运行速度可以开启ICACHE来加快进程。然后进入main函数执行跳转工作。

在这个过程中我们bootloader会在内存中开辟一段空间把一些参数以内核能够认识的方式添加到ram段,这样每当内核需要bootloader的参数的时候她就会取这段内存以特定的方式解析数据,然后bootloader对内核就能够间接传参了。至于地址的重定位以及内核是如何跳转,这些我在代码中有比较详细的注释。代码中的一些数据是从前人的uboot中copy过来,至于寄存器的操作要针对不同的处理器另当别论了。这篇bootloader仅仅是uboot的入门,完整的uboot比这要复杂多了。

代码的参考地址:http://www.oschina.net/code/snippet_2241389_52110

时间: 2024-11-07 21:50:09

代码实现一个基本的bootloader的相关文章

通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统

[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力,如何通过 300 行代码打造一个比特币开采系统. 时下,对于大部分 IT 玩家来说, Docker 和 Mesos 都是熟悉和陌生的:熟悉在于这两个词无疑已成为大家讨论的焦点,而陌生在于这两个技术并未在生产环境得到广泛使用,因此很多人仍然不知道它们究竟有什么优势,或者能干什么.近日, John W

一行JS代码屏蔽一个网站的访问

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

代码添加一个按钮及监听方法

有时候无法从控件中拖拽一个按钮到storyboard,必须用编写代码方式添加按钮: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 //计算出展示表情区域的宽和 展示区距顶部的高度+10个偏移量 6 //添加按钮 9 //创建button 10 addBtn = [[UIButton alloc

Unity3D除了在编辑器里,怎么用代码给一个Texture类型的变量赋值

resource.load上来一张贴图就行. ? 1 2 3 4 5 6 7 8 9 using UnityEngine; using System.Collections; public class example : MonoBehaviour {     void Start() {         GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);         go.renderer.material.mai

分享如何在github上为代码创建一个链接

从自学前端到现在差不多一个月了,在此期间,一直有一种困惑,如何将自己电脑中编写的代码生成一个链接,以便可以发布呢?今天有幸被高人指点一二,现将其分享. 第一步,网上注册一个github账号 第二步,新建一个repository 注意:这里选择public,而不是private 点击create repository 第三步,选择一个主题,点击settings 第四步,添加自己的代码 建立一个新的文件,比如 保存 删掉index.md 第五步,复制链接 https://941117pml.gith

不到100行代码实现一个推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不

不到100行代码实现一个简单的推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不

40多行python代码开发一个区块链。

40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为区块链目前还是不成熟的解决方案,但它无疑是计算机发展史上的一个奇迹.但是,到底区块链是什么呢? 区块链 区块链是一个公开的数字账本,它按时间顺序记录比特币或其他加密货币发生的交易. 更一般的讲,区块链是一个公共数据库,新的数据将存储在一个被称为"块"的容器中,然后块会被添加到一个不可篡改的

从零开始学C语言,200行代码完成一个打字母游戏!

很多刚开始学习编程的同学都希望自己可以去开发一些游戏,当学习了c语言的时候却发现总是用c语言去解决一些数学问题,今天我就分享给大家一个我学习c语言时候学到的一些好玩的东西,希望可以帮助大家保持对编程的兴趣. 创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:快乐学习