uboot启动内核是什么,认识 uboot 和 内核 之间不可不说的关系

⭐发布日期:2024年10月03日 | 来源:徐小妙儿

⭐作者:陈贺欣 责任编辑:Admin

⭐阅读量:941 评论:5人

【新澳历史开奖最新结果】

【澳门金牛版正版资料大全免费】

【2024年新奥开什么今晚】 【管家婆最准一码一肖】 【管家婆一码中一肖】 【管家婆一码一肖100中奖】 【2023澳门资料大全正版资料】 【2023今晚澳门开特马.】 【三肖必中特三肖三码官方下载】 【今天澳门一肖一码】
【2021一码一肖100准确】 【2023澳门今晚开什么】 【澳门今晚必中一肖一码2023开】 【管家婆八肖版资料大全】 【澳门三肖三码期期准精选牛】 【精准一肖100%准确精准的含义】 【2023澳门六开彩资料免费大全】 【2023澳门彩免费资料大全】

uboot启动内核是什么, uboot之间不可不说的关系

uboot镜像 uboot.binLinux镜像 zImage

嵌入式设备中的分区表是自己定义的uboot和内核中的分区表应一致

内核运行前必须加载 ddr中指定的地址处

uboot需要提供内核必要的参数

内核启动的方式

uboot启动内核有两种方式,一种是等待倒计时结束后直接启动内核,一种是 uboot命令行中使 boot命令启动内核

其代码分别如下

parse_string_outer的作用是解 boot参数并执行

/*------------------倒计----------------------*/

s = getenv ("bootcmd");

if (bootdelay >= 0 && s && !abortboot (bootdelay)) {

...

parse_string_outer(s, FLAG_PARSE_SEMICOLON |

FLAG_EXIT_FROM_LOOP);

...

}

/*------------------命令----------------------*/

int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

...

if (parse_string_outer (getenv ("bootcmd"),

FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)

rcode = 1;

...

}

U_BOOT_CMD(

boot, 1, 1, do_bootd,

"boot - boot default, i.e., run bootcmd\n",

NULL

);

/*-----------------相关宏定----------------------*/

#ifdef CONFIG_BOOTARGS

"bootargs=" CONFIG_BOOTARGS "{新闻内容}"

#endif

#ifdef CONFIG_BOOTCOMMAND

"bootcmd=" CONFIG_BOOTCOMMAND "{新闻内容}"

#endif

#define CONFIG_BOOTARGS "console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3"

#define CONFIG_BOOTCOMMAND "movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000"

加载内核DDR

uboot启动内核的步骤

·内核镜像从启动介质中加载DDR

·DDR中启动内核镜像

本文使用的开发 x210将镜像存放 SD卡中,要加载 ddr中需要使用 movi指令

movi提供了 iNand/SD卡的操作movi read用来读 iNand/SD卡中的内容DDRmovi write用来DDR中的内容写入 iNand/SD卡中

上面的代码 bootcmd中的命令就是用来加 kernel rootfs ddr

除了 SD卡加载,还可以通 tftp nfs等网络下载方式加载镜像

movi read kernel 30008000可以知道,内核加载到 0x30008000的位置

内核的镜像生成

Linux直接编译得 elf文件, vmlinux vmlinuz。这种文件会比较大,为了烧录方便,会使 objcopy工具制作成镜像文件, Image(78M精简成7.5M)

早期使用的软盘比较小Image对与软盘来说还是太大了,放不下Linux Image做进一步的压缩,并在压缩文件前端附加了一部分解压缩代码,形 zImage

uboot可以使 mkimage工具, zImage前面加64字节uImage的头信息,形 uImage

加载启动内核

内核的加载启动是通 do_bootm完成的

前面介绍过,镜像文件分为两个部分,头部以及真正的内核

do_bootm会先对镜像进行头部信息的校验,然后再进行内核的启动

头部信息的结构体如下

typedef struct image_header {

uint32_t ih_magic; /* Image Header Magic Number */

uint32_t ih_hcrc; /* Image Header CRC Checksum */

uint32_t ih_time; /* Image Creation Timestamp */

uint32_t ih_size; /* Image Data Size */

uint32_t ih_load; /* Data Load Address */

uint32_t ih_ep; /* Entry Point Address */

uint32_t ih_dcrc; /* Image Data CRC Checksum */

uint8_t ih_os; /* Operating System */

uint8_t ih_arch; /* CPU architecture */

uint8_t ih_type; /* Image Type */

uint8_t ih_comp; /* Compression Type */

uint8_t ih_name[IH_NMLEN]; /* Image Name */

} image_header_t;

do_bootm中就是通 ih_os判断镜像的类型,然后使用相应的方法启动内核

这里的镜像 Linux镜像,所以使用的 do_bootm_linux do_bootm_linux的参数大部分是通 do_bootm传递的

启动的参bootm 30008000,告 uboot 30008000这个地址去找镜像文件

内核启动

镜像的程序入口叫 entrypoint do_bootm_linux中使 ep保存,镜像的程序入口在头信息 ih_ep中,可以通过读取头信息得到

ep后,通theKernel = (void (*)(int, int, uint))ep; ep格式化后传递 theKernel,这 theKernel函数就指向了内存中加载OS镜像的真正入口地址

前面也提到了,每个开发板 uboot中都有唯一的机器码,这个编码用来验证开发板 uboot是否匹配,这个机器码还会传到内核中再次验证。这个机器码获取的第一顺序备选是环境变machid,第二顺序备选gd->bd->bi_arch_num(x210_sd.h #define MACH_TYPE 2456)

接下来就是传参的过程。先看 Linux Documentation/arm/Booting CPU寄存器设置的描述

- CPU register settings

r0 = 0,

r1 = machine type number discovered in (3) above.

r2 = physical address of tagged list in system RAM, or

physical address of device tree block (dtb) in system RAM

通过读 r0 r1 r2这三个寄存器的值来设 CPUr0固定0r1为前面提到的机器码r2为存放启动参 tag结构体的首地址

所以 do_bootm_linuxtheKernel (0, machid, bd->bi_boot_params);完成传参的过程

传参是通 struct tag这个结构体完成的,获取参数就是获取一个 tag的过程。这 tag也有着规定的格式do_bootm_linux中通 setup_start_tag setup_end_tag函数设 tag的开始和结束,这个函数的作用就是设置当 tag的类型 ATAG_CORE ATAG_NONE,用 tag起始终止位置的判别

需要注意的是,传参是一个很重要的过程,内核启动不成功与传参错误有很大关系

uboot4步骤总结

第一步:将内核搬移DDR

第二步:校验内核格式CRC

第三步:准备传参

第四步:跳转执行内核

【2024澳门天天开好彩大全免费】 【新澳天天开奖资料大全最新】
【2024年天天开好彩资料】 【新澳天天开奖资料大全最新54期】
【2024澳门天天开好彩大全53期】 【澳门天天开彩期期精准】
【2024全年资料免费大全】 【新澳天天开奖资料大全】
【澳门内部最精准免费资料】 【2024澳门天天开好彩大全】
【2024年新奥门天天开彩免费资料】 【新澳2024今晚开奖资料】 【2024新澳免费资料】
上一条新闻 下一条新闻

推荐文章

发表评论

范爱洁

3秒前:5M)早期使用的软盘比较小,Image对与软盘来说还是太大了,放不下。

IP:22.93.3.*

塞皮德·莫阿菲

8秒前:}/*------------------命令行----------------------*/int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){ .

IP:42.10.9.*

孙嘉厉

6秒前:= 0) rcode = 1; .

IP:62.44.2.*

徐小妙儿APP介绍

APP图标

管家婆一码一肖资料APP名:徐小妙儿

版本:V4.25.350

更新时间:2024-10-02 22:13

一码一肖100准这是一个功能强大的2024管家婆开奖结果APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:.

新澳彩开奖结果查询APP介绍

APP图标

2023澳门今晚中必一肖一中特APP名:徐小妙儿

版本:V7.35.123

更新时间:2024-10-02 16:21

新奥六开彩资料2024这是一个功能强大的4949澳门精准免费大全APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:这个机器码获取的第一顺序备选是环境变量machid,第二顺序备选是gd->bd->bi_arch_num(x210_sd.

新澳门彩历史开奖记录走势图APP介绍

APP图标

2023正版资料全年免费公开三APP名:徐小妙儿

版本:V5.65.862

更新时间:2024-10-02 19:23

新澳2024年精准资料这是一个功能强大的2023澳门今晚开奖结果是什么APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:r2 = physical address of tagged list in system RAM, or physical address of device tree block (dtb) in system RAM通过读取 r0 r1 r2这三个寄存器的值来设置 CPU,r0固定为0,r1为前面提到的机器码,r2为存放启动参数 tag结构体的首地址所以在 do_bootm_linux通过theKernel (0, machid, bd->bi_boot_params);完成传参的过程传参是通过 struct tag这个结构体完成的,获取参数就是获取一个个 tag的过程。

管家婆一肖一码100%准确APP介绍

APP图标

2O24新澳彩料免费资料APP名:徐小妙儿

版本:V1.52.758

更新时间:2024-10-02 24:19

2023一码一肖100%准确这是一个功能强大的管家婆最准一肖一码APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:, run bootcmd\n", NULL);/*-----------------相关宏定义----------------------*/#ifdef CONFIG_BOOTARGS "bootargs=" CONFIG_BOOTARGS "Linux对 Image做进一步的压缩,并在压缩文件前端附加了一部分解压缩代码,形成 zImageuboot可以使用 mkimage工具,在 zImage前面加上64字节的uImage的头信息,形成 uImage加载启动内核内核的加载启动是通过 do_bootm完成的前面介绍过,镜像文件分为两个部分,头部以及真正的内核所以 do_bootm会先对镜像进行头部信息的校验,然后再进行内核的启动头部信息的结构体如下typedef struct image_header { uint32_t ih_magic; /* Image Header Magic Number */ uint32_t ih_hcrc; /* Image Header CRC Checksum */ uint32_t ih_time; /* Image Creation Timestamp */ uint32_t ih_size; /* Image Data Size */ uint32_t ih_load; /* Data Load Address */ uint32_t ih_ep; /* Entry Point Address */ uint32_t ih_dcrc; /* Image Data CRC Checksum */ uint8_t ih_os; /* Operating System */ uint8_t ih_arch; /* CPU architecture */ uint8_t ih_type; /* Image Type */ uint8_t ih_comp; /* Compression Type */ uint8_t ih_name[IH_NMLEN]; /* Image Name */} image_header_t;在 do_bootm中就是通过 ih_os判断镜像的类型,然后使用相应的方法启动内核这里的镜像是 Linux镜像,所以使用的是 do_bootm_linux, do_bootm_linux的参数大部分是通过 do_bootm传递的启动的参数bootm 30008000,告诉 uboot去 30008000这个地址去找镜像文件内核启动镜像的程序入口叫做 entrypoint,在 do_bootm_linux中使用 ep保存,镜像的程序入口在头信息的 ih_ep中,可以通过读取头信息得到得到 ep后,通过theKernel = (void (*)(int, int, uint))ep;将 ep格式化后传递给 theKernel,这样 theKernel函数就指向了内存中加载的OS镜像的真正入口地址前面也提到了,每个开发板在 uboot中都有唯一的机器码,这个编码用来验证开发板与 uboot是否匹配,这个机器码还会传到内核中再次验证。"#endif#ifdef CONFIG_BOOTCOMMAND "bootcmd=" CONFIG_BOOTCOMMAND "abortboot (bootdelay)) { ."#endif#define CONFIG_BOOTARGS "console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3"#define CONFIG_BOOTCOMMAND "movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000"加载内核到DDR中uboot启动内核的步骤·内核镜像从启动介质中加载到DDR中·去DDR中启动内核镜像本文使用的开发板 x210将镜像存放在 SD卡中,要加载到 ddr中需要使用到 movi指令movi提供了对 iNand/SD卡的操作,movi read用来读取 iNand/SD卡中的内容到DDR中;movi write用来将DDR中的内容写入到 iNand/SD卡中上面的代码中 bootcmd中的命令就是用来加载 kernel rootfs到 ddr除了从 SD卡加载,还可以通过 tftp nfs等网络下载方式加载镜像通过movi read kernel 30008000可以知道,内核加载到了 0x30008000的位置内核的镜像生成Linux直接编译得到 elf文件,叫 vmlinux或 vmlinuz。

澳门今晚一肖码10O准管家娶APP介绍

APP图标

管家婆精准一肖一码100%APP名:徐小妙儿

版本:V7.51.363

更新时间:2024-10-02 13:13

2024新澳门天天开好彩大全这是一个功能强大的新澳历史开奖最新结果查询今天APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:.

2023澳门今晚开特马开APP介绍

APP图标

新澳澳门免费资料网址是什么APP名:徐小妙儿

版本:V8.57.675

更新时间:2024-10-02 21:20

2023新澳门天天开好彩这是一个功能强大的2023澳门今晚开奖直播APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:bin,Linux镜像为 zImage嵌入式设备中的分区表是自己定义的,uboot和内核中的分区表应一致内核运行前必须加载到 ddr中指定的地址处uboot需要提供内核必要的参数内核启动的方式uboot启动内核有两种方式,一种是等待倒计时结束后直接启动内核,一种是在 uboot命令行中使用 boot命令启动内核其代码分别如下其中 parse_string_outer的作用是解析 boot参数并执行/*------------------倒计时----------------------*/s = getenv ("bootcmd");if (bootdelay >= 0 && s && !

新澳门2023历史开奖记录查询表APP介绍

APP图标

2023澳门最快开奖结果是什么APP名:徐小妙儿

版本:V7.16.675

更新时间:2024-10-02 15:17

2004新澳精准资料免费提供这是一个功能强大的2023澳门彩免费资料查询APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:parse_string_outer(s, FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP); .

新澳门开奖结果2023开奖记录查询APP介绍

APP图标

2024香港正版挂牌APP名:徐小妙儿

版本:V8.50.456

更新时间:2024-10-02 18:21

四肖八码期期准资料免费这是一个功能强大的澳门六开彩资料查询最新APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:.