嵌入式系统移植学习之Uboot启动内核命令.pdfVIP

嵌入式系统移植学习之Uboot启动内核命令.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统移植学习之Uboot启动内核命令

在线学习好工作 / 嵌入式系统移植学习之Uboot 启动内核命令 接下来我们来看一下uboot 中的核心功能,也就是说我们uboot 最终目的是干 什么的,就是启动加载内核。那么怎么加载内核,其实我们的uboot 给我们提供 的两种方案。第一种方案就是uboot 本身自带的叫做bootm 的命令。这个叫做 bootm 的命令主要目的就是为了启动,当然,等一下我们会简单说一下bootm 他启动内核稍微要在内核里做一些手脚。然后还有一个命令叫做go 命令,go 命 令顾名思义就是说把这个程序的PC 指针指到一个地方,他就能运行起来,比如 说我们之前假设有一款内核,然后把内核放到一个地方,然后我找到那个地方就 让PC 直接从内核中开始运行,相当于吧uboot 的主动权交到了内核空间,因为 把PC 已经指过去了。 那么这样是不是就可以启动内核了?这些疑问我们一起来验证一下。首先要想 启动内核还是要有一个内核的原文件。 如图,这个原文件我们在这个地方已经给大家编译好了叫“uImage”说到这,我 们先简单的提一下,因为我们会在后面单独提内核是如何编译的。内核中的名字, 一般来说,主要分这么几个一个叫做uimage 就是我们现在看到的,还有一个叫 做zimge,还可能听过image 也还可能听过bzimage。就说这些,不管是什么样 的image 最终来说就是内核给我们运行到开发板上的可执行文件。 这个文件主要的问题就是格式不一样。内部来说,大量的代码都是相同的,只 是前面有些头格式不太一致,其中在我们后面三个,zimge、image、bzimage 这 三个都可以称之为内核的最原始的数据包,而这个uimage 最特殊。是我们专门 针对uboot 在我们内核原始数据前提之下加了一个关于uboot 的头。 如何理解看下图: 如图,我们后面会看到一个具体脚本怎么去制作这些东西,但是我们现在要有 一个认识就是说image、bzimage 其实都可以认为是一块东西(如图中内部的四 边形)只是说它可能数据压缩的格式不太一致,最终反应就是内核,这些内核按 理说直接跳过去就可以执行,但是在uboot 中有一个新的用法也就是他们自己的 规范,就是说一定要再这样的数据中再加一个头(如图中的椭圆)而这个头按照 我们特殊的格式其实就是uboot 中特定的格式(椭圆中的长方形)然后组合成的 这样一个大文件(图中最大的四边形)我们就把它称之为叫uimage,所以说 uimage 是一个比较特殊的数据包,这个数据包既包含内核中真正数据包,同时 又包含跟uboot 之间衔接的一些小数据。 下面我们就来尝试一下把这个uimage 给下载下来。就下载我们的开发板上, 然后去用go 命令指过去运行看看行不行。 如图,我们先输入命令“tftp 2000080000 uImage”有些同学会说为什么不先是 8000 而是20000,这个在我们之后看内核就会知道要有一个偏移,这个偏移其主 要目的就是为了我们在内存管理中建立一定的内存单元管理的表。这个表一般来 说都会预留这样一段空间。所以这个空间我们在实际的物理内存中也应该预留出 来,这样在启动的时候才不会出现一些特殊或者奇怪的问题。然后点击回车键, 这个时候已经下载完成。 我们输入命令“go 2000080000”这个时候你就会发现,其实这个程序是死掉了, 原因就是这个go 命令只是把指针指而真正的,一旦指下去就有几 个毛病,第一个uimage 本身来说最开始并不是代码,而是uboot 中的一些数据 信息,所以它不具备可执行能力,一旦执行肯定跑飞。第二个就是我们必须要用 bootm 命令去把前面的头信息给解析出来然后再去启动,所以这是我们要注意的 go 命令天生是启动不了内核的。 原因就在于等一下我会重点给大家讲的内核启动条件,内核启动,并不是大家 所想象的直接启动的可执行的东西。并不是你直接把PC 指针一指过去它就开始 运行的,内核启动是需要一定的前提条件,要不然他要uboot 干什么。 如图,所以说这是我们需要关心的一个问题,那么下面我们再来测试一下,在 测试之前,我还要做一件事情就是我之前做实验的时候因为懒得每次都敲所以已 经把bootargs 和bootcmd 这两个命令写死了。那么下面我们输入命令“setenv bootargs”把这个环境变量删掉,然后在把它保存一下。 如图,我们就会发现其实已经没有那个选项了。然后我们在输入命令“tftp uImage”下载下来。 如图,因为刚才

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档