首页 > 其他 > 详细

riscv - boot - loader

时间:2021-09-06 07:52:13      阅读:12      评论:0      收藏:0      [点我收藏+]

https://mp.weixin.qq.com/s/piTE9z9belhxIAkrfzwBzA

 

?简单介绍linux kernel arch/riscv/boot/loader.S相关的内容。

技术分享图片

 

1. loader.S

 

linux kernel arch/riscv/boot/loader.S中的代码供bootloader如uboot等调用。在loader.S中,linux kernel的代码被作为数据使用:

技术分享图片

可以看到,这里直接把编译生成的linux kernel代码,亦即arch/riscv/boot/Image作为binary数据,放在_start的位置。

 

这是一种比较直接的做法,没有对Image文件做处理。在arm/x86中,Image会被压缩,然后再与被bootloader调用的启动程序链接到一起,在启动时会执行解压缩动作。

 

2. loader.lds.S

 

loader.lds.S是loader.S的链接脚本:

技术分享图片

其中:

a. arch为riscv:

b. 入口点(entry)是_start,这是指在loader.S中定义的_start;

c. 链接的起始地址是KERNEL_LINK_ADDR;

d. .payload段就是loader.S中包含进来的Image的内容;

 

3. Makefile

 

在arch/riscv/boot/Makefile中,定义了生成loader/loader.bin的规则:

技术分享图片

生成loader.bin的命令如下:

技术分享图片

 

使用objdump命令反汇编loader:

技术分享图片

得到的内容如下:

技术分享图片

这就是arch/rsicv/kernel/head.S中的内容,也就是Image中的内容。

 

从中也可以看出KERNEL_LINK_ADDR的值为0x80000_0000,这也符合其定义:

技术分享图片

 

PAGE_OFFSET的定义如下:

技术分享图片

 

如果使用命令make ARCH=riscv CROSS_COMPILE=riscv64-unknown-elf- V=1进行编译:

技术分享图片

可以看到-DCONFIG_PAGE_OFFSET=0x80000000的选项。

 

https://mp.weixin.qq.com/s/piTE9z9belhxIAkrfzwBzA 

 

riscv - boot - loader

原文:https://www.cnblogs.com/wjcdx/p/15226486.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!