中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球

本篇的要点是解说设备和驱动的发动流程,设备和驱动的流程是整个内核发动的中心,也是作业中最常面临的问题。出于知识点的体系性考虑,在进入主题之前咱们先看下整个 Linux 在 ARM 中的发动流程怎样。

Uboo中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球t 的发动流程

ARM Linux 的发动流程大致为:Uboot →安全证券 Kernel → Root filesystem。Uboo巴旦木和杏仁的差异t 在上电的时分就拿到 CP大叔U 的控制权,完结了硬件的初始化。具体是怎样完结的呢?一同来看一下,CPU 的内部集成了小容量的 Sram,而 PC 指针一上电就指向 Sram 的开端地址 0x00000000,所以一上电 Uboot 代码就得到了运转。

Uboot 拿到 CPU 使用权就开端做初始化作业,比方封闭看门狗、设置 CPU 运转形式、设置仓库、初始化内存、网卡、nand flash 等,最终把 Linux 内核加载到内存中。

  • 初始化 RAM

因为内核要在 RAM 中运转,所以在调用内核之前有必要初始化和设置 RAM,为调用内核做好预备。

  • 初始化串口

内核在发动进程中能够将信息经过串中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球口输出,这样就能够清楚的知道内核发动信息。尽管串口不是 Uboot 有必要要完结的作业,可是经过串口能够便利调试 Uboot 和内核的各种信中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球息。

  • 检测处理器类型

Uboot 在调用内核前需求检测体系的处理器类型,并将其保存在某个变量中提供应内核,内核在发动进程中会依据该处理器的类型调用相应的初始化程序。

  • 设置内核发动参数

内核在发动进程中会依据该发动参数进行相应的初始化作业。

  • 调用内核镜像

值得注意的是存储 Uboot 的存储器不同,Uboot 的苏幕遮履行进程也并不相同,一般来讲 Flash 分为 nor Flash 和 nand Flash 两种:nor Flash 支撑芯片内履行(XIP,eXecute In Place),这样代码能够在 Flash 上直接履行而不用复制到 RAM 中去履行。

可是 nand F中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球lash 并不包包支撑 XIP,所以要想履行 nand Flash 上的代码,有必要先将其复制到 RAM 中去,然后跳到 RAM 中去履行。假如内核存放在 nor 九息Flash 中,那么可直接跳转到内核中去履行。但一般因为在 nor Flash 中履行代码会有种种约束,而且速度也远不及 RAM 快,所以一般的嵌入式体系都是将内核复制到 RAM 中,然后跳转到 RAM 中去履行。不管哪种状况,在跳到内核履行之前product CPU 的寄存器有必要满意以下条件:r0 = 0,r1 = 处理器类型,r2 = 符号列表在 RAM 中的地址。

Linux 内核的发动流程(设备和驱动的加载)

关于 Uboot 的踩踩踩发动本课程不做具体介绍,因为本课程神乐的主要内容是内核。在叙述内核发动之前让咱们先了解下内金刚狼2核的组成结构:

其间,

(1)vmlinusx 是 ELF 格局的 Object 文件,这种文件仅仅各个源代码经过stone衔接今后得到的文件,并不能在 ARM 渠道上运转。

(2)经过 objcopy 这个东西转化今后,得到了二进制格局文件 Image,Image 文件比较于 vmlinusx 文件,除了格局不同以外,还被去除了许多注释和调试的信息。

(3)Image 文件经过紧缩今后得到了 piggy.gz,这个文件仅仅是 Image 的紧缩版,并无其他不同。

(4钟嘉欣)接着编译生成别的几个模块文件 misc.o、big_endian.o、head.o、head-xscale.o,这几个文件组成一个叫 Bootstrap Loader 的组件,又名引导程序,编译生成 piggy.o 文件。

(5)最终 piggy.o 文件和 Bootstrap Loader 组成一个 Bootable Kernel Image 文件(可发动文件)。

经过上面的剖析不难知道 piggy.o 便是内核镜像,而剩余的几个文件就组成了引导程序。知道了内核的组成结构,Uboot 便是依照内核的组成结构一层一层剥开然后引导内核的:

能够说 start_kernel()&n独身公主相亲记演员表bsp;之前中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球的一切作业都是为了将环境预备好,满意 start_kernel() 的要求,然后由 start_kernel() 团结便是力量;开端进行内核的加载:

关于 start_kernl() 函数的内容太多,能够经过赤色回调函数看出,start_kernel() 函数根本排列组合公式是在回调许多对应的注册函数。为了本系列课程的结构性这儿就不打开一切知识点解说,本篇内容接着前一篇设备树的内容要点解说下设备和驱动的匹配进程。

还记得上一篇讲到的设备树三大效果吗?

  • 渠道标识;

  • 运转时装备;

  • 设备信息调集。

接下来咱们就看看内核在发动的时分是怎样寻觅设备,驱动又怎样和设备绑定的。中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球

首要在渠道目录下能够看到有许多渠道描绘的文件,如图:

有那么多的渠道,咱们究竟要履行哪个渠道是首要要考虑的工作。这也是设备中国结图片,南瓜饼的做法-188bet官网_188宝金博官网_金博宝188滚球三大功用的第一个坐而论道功用——渠道标识。

  • 设备树里有对设备根节点的 Compatible 描绘,渠道文件里有对 __initconst 的描绘,假如两个字段共同则找到了对应的板级文件,这样就通金毓婷过设备树把要用的设备渠道与其他渠道差异开来了,如图:

找到渠道后就能够依据回调函数的指针调用该渠道的注册函数。这儿以飞思卡尔 imx.6dl 渠道为例,回调的时分会调用 imx6q_init_machine() 函数,如下:

这儿弥补一个知识点,仔细的读者或许发现了在 Compatible 字段里用逗号分隔了两个字符串。板级匹配的时分用的是哪个字符串,别的一个字符串又是做什么用?首要后边的字段 "fsl,imx6dl" 是笼统共用渠道描绘符,前面的字段 "fsl,急性肠胃炎吃什么药imx6dl-sabresd" 是通用渠道下的具体渠道描绘符,能够理解为母板和子板的差异。在具体的子板文件中咱们能够经过前面的字段进行设备信息的获取,如图:

  • 接着是运转时装备,让内核在发动的时分依据参数设置进行不同的处理。有经历的读者清楚在 Uboot 里也有对 Bootargs 的装备,这儿为什么多此一举呢吴昊俣,是为了在 Uboot 中更灵敏的对内核发动进行装备。

  • 最终的效果便是设备信息调集,这是设备和驱动匹配的中心,也是作业中面临最多的状况。出于这一效果的内容是作业中常常遇到的要点也是难点,咱们专门用一篇内容来具体解说各级设备是怎样打开的,而且手把手教你怎样定制一套自己的开发板全新事例。

悄悄一扫  欢迎重视~


转载原创文章请注明,转载自188bet官网_188宝金博官网_金博宝188滚球,原文地址:http://www.brmjha.com/articles/1008.html

上一篇:韩寒电影,adobe-188bet官网_188宝金博官网_金博宝188滚球

下一篇:紫藤家园,春色满园-188bet官网_188宝金博官网_金博宝188滚球