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命令只是把指针指到20008000,而真正的,一旦指下去就有几个毛病,第一个uimage本身来说最开始并不是代码,而是uboot中的一些数据信息,所以它不具备可执行能力,一旦执行肯定跑飞。第二个就是我们必须要用bootm命令去把前面的头信息给解析出来然后再去启动,所以这是我们要注意的go命令天生是启动不了内核的。

原因就在于等一下我会重点给大家讲的内核启动条件,内核启动,并不是大家所想象的直接启动的可执行的东西。并不是你直接把PC指针一指过去它就开始运行的,内核启动是需要一定的前提条件,要不然他要uboot干什么。

如图,所以说这是我们需要关心的一个问题,那么下面我们再来测试一下,在测试之前,我还要做一件事情就是我之前做实验的时候因为懒得每次都敲所以已经把bootargs和bootcmd这两个命令写死了。那么下面我们输入命令“setenv bootargs”把这个环境变量删掉,然后在把它保存一下。

如图,我们就会发现其实已经没有那个选项了。然后我们在输入命令“tftp 20008000 uImage”下载下来。

如图,因为刚才说了go命令不行那么我们输入命令“bootm 20008000”然后点击回车键,我们会发现这个时候有一个新的问题,出来的代码变得很奇怪,如果以后你用代码去调然后你会发现还是在uboot中,内核还没有真正起来。

所以总的来说,bootm和go命令只是启动内核的一个条件而已,也就是说它只能把PC指过去让他开始运行,真正想启动内核我们还需要一个非常重要的条件就是刚才我们删掉的环境变量叫bootargs,也就是说内核启动条件中有一个非常重要的环境叫bootargs,这个环境变量来充当了uboot跟内核数据衔接的一个过程,怎么理解这句话呢?让我们来思考一下。

我们可以这样想uboot是一个人内核也是一个人,这样的话uboot最终要启动内核的时候要告诉内核应该以什么样的方式启动,我们这个开发板中我们什么是输出,这样我们才能把相应的一些内核的启动或者环境交给内核去处理。

所以说我们现在看不到任何打印信息的主要原因就是uboot并没有告诉内核你该如何去工作。

因为之前uboot会有这样一些信息,我们需要把这些信息通过bootargs这样环境变量的参数告知给内核,这样内核就可以根据这个参数知道它要做些什么事情了。


原文链接:http://www.maiziedu.com/wiki/embed/core/


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容