0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

树莓派裸机代码之前必做的事情

嵌入式IoT 来源:嵌入式IoT 作者:嵌入式IoT 2020-09-25 15:51 次阅读

树莓派4裸机基础教程芯片启动到代码执行

1.说明

2.树莓派的sd

3.config.txt的配置信息

4.小结

1.说明

在做嵌入式开发的时候,每个芯片都有自己的启动方式。在做底层优化的时候,往往也需要关注芯片的启动方式,涉及到启动时间,启动的稳定性问题。所以关注芯片的启动方式非常的重要。在使用电脑的时候,电脑上电后首先会执行BIOS,这个是厂家固化到ROM里面的代码,一般从电脑生产出来到电脑的寿命结束,其中的内容都是不会变的。而系统却可以经常更换,我们可以装Linux系统,也可以装windows系统。这个就是电脑的启动过程。

类比芯片的启动过程,大多数也是如此,比如我们一般描述嵌入式Linux在某些芯片的上的启动流程,首先芯片上电后会执行芯片内部rom的一段固化代码,这段代码会根据拨码开关选择从不同的存储介质中去读取一小段可以执行的代码放到sram中执行。这些存储介质可以是SPI Flash,可以是nand或者nor flash,或者sd卡等等。由于芯片的sram不可能做到非常大,所以第一阶段的代码往往会有限制,比如只允许使用4K内存等等。这段小的代码负责初始化sdram,然后跳转到sdram中去执行代码。由于sdram的成本比sram小许多,所以sdram往往非常的大,接着就是执行正常的程序了。

这些启动方式的选择,都是芯片设计者需要考虑的问题,一方面是成本另一方面是启动的效率问题。在使用芯片的时候,具体看设计者的思路即可。下面来分析一下树莓派4芯片的启动过程。

2.树莓派的sd卡

一般我们使用开发板的时候,很少会见到需要插上sd卡才能启动的,唯有树莓派有这个特殊的操作。那么树莓派的sd卡里面的文件究竟有什么作用呢?

树莓派在设计的时候,为了节省成本,没有使用掉电非易失性存储介质,也就在板子上不能找到相关的flash。这样芯片启动的程序只能放在sd卡里面了。本来U盘启动也是一种方式,但是树莓派4代之前的设计并不是很好,导致这种启动方式不可以使用。树莓派4也有一些尝试,但是目前树莓派4最主流的方式还是使用SD卡启动。

Raspberry Pi 4具有一个SPI连接的EEPROM(4MBits / 512KB)。其中包含用于启动系统的代码,并替换了先前在SD卡的启动分区中找到的bootcode.bin。请注意,如果Pi 4的SD卡的启动分区中存在bootcode.bin,则将其忽略。也就是说在树莓派4的启动方式上,更加的灵活,甚至可以直接去掉SD卡,从网络方式启动应用程序。具体可以看之前的文章

下面来分析一下从sd卡启动系统需要的必要的文件内容。在裸机实验中,一般只需要如下的文件就可以启动了。

启动过程可以描述如下:

首先芯片上电后执行first-stage bootloader,这是芯片固化在内部的代码,这个代码的功能是加载sd卡中的bootcode.bin文件。在树莓派4之前的版本都是需要这个文件的,但是在树莓派4上,由于有了SPI的EEPROM,所以SD卡中可以不用存在这个文件。并且启动了GPU。然后将bootcode.bin读取到了128K大小的二级缓存(L2 Cache)中。此时开始执行bootcode.bin代码。该功能用于初始化ram,并且把start4.elf加载到内存中,并且去读取config.txt中的配置信息,设置这些配置信息。上述已经描述了这几个文件的作用,但是经过实际测试发现,这个设备树文件bcm2711-rpi-4-b.dtb文件也是需要的,如果不存在也会影响串口的输出,也就是只会有乱码输出。所以推测start4.elf文件也会去读取设备树文件,然后设置一些基本的参数。毕竟这个文件的大小也可以说明其功能的丰富。

3.config.txt的配置信息

前面说到,start4.elf会读取config.txt中的配置信息,然后去设置相关的配置。先看看最简单的裸机代码启动里设置了哪些配置:

enable_uart=1 arm_64bit=0 core_freq=250 kernel=kernel7.img kernel_address=0x8000

首先enable_uart=1表示使用的是miniUART,树莓派4中,UART控制器有两种,PL011或者mini UART。

Name Type
UART0 PL011
UART1 mini UART
UART2 PL011
UART3 PL011
UART4 PL011
UART5 PL011

这里设置使能UART1作为输出信息,接着需要设置arm的频率core_freq=250。因为串口控制器是需要频率进行使能的。

arm_64bit=0告诉arm要启动的程序是32位的,由于树莓派4上的芯片是cortex-a72,是aarch64架构的,但是也支持向下兼容的32位指令。所以需要告知当前的裸机程序是32位指令集架构。

kernel=kernel7.img表示从start4.elf执行的程序是哪一个,另外kernel_address=0x8000表示需要执行的内存地址。这个地址就是裸机程序在链接时的入口地址。

4.小结

本文主要描述了一个树莓派裸机代码之前所做的事情,这些启动流程是非常值得思考的,每一个步骤都有其设定的含义。剩下的config.txt文件中的配置其实还是有很多可以尝试的,比如修改启动地址,或者去使能某些外设等等。由于目前研究的是最简单的裸机代码,所以这些配置会在以后更高级的功能中慢慢说到。比如比较重要的安全可信技术,也需要修改配置文件。前期理解芯片的启动过程有助于对后面编写裸机代码的分析。

- END -

原文标题:树莓派4裸机基础教程:芯片启动到代码执行

文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    446

    文章

    47746

    浏览量

    409041
  • 树莓派
    +关注

    关注

    113

    文章

    1637

    浏览量

    104715

原文标题:树莓派4裸机基础教程:芯片启动到代码执行

文章出处:【微信号:Embeded_IoT,微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【爱芯 Pro 开发板试用体验】CPU性能测试,与树莓4B对比

    A72本身能效比要比A55高,爱芯Pro的单核性能比树莓4B弱。因此,在需要单核性能的场景下,树莓4B更有优势。 六、参考链接 Cor
    发表于 01-01 16:36

    树莓都有哪些功能,是用什么编程的?

    怎么学习树莓树莓和传统单片机的区别是哪些,如果有了树莓该学哪些知识
    发表于 11-09 07:51

    树莓和单片机怎么通信?

    树莓和单片机怎么通信求大神解答?
    发表于 11-08 07:13

    树莓烧录后死机怎么办?

    树莓烧录后死机怎么办
    发表于 10-24 08:06

    树莓如何调整SD卡的分区大小?

    树莓如何调整SD卡的分区大小
    发表于 10-24 06:23

    如何用树莓学习Linux内核源码?

    怎么用树莓学习Linux内核源码?​
    发表于 10-20 07:09

    树莓Python编程指南分享

    树莓python编程指南
    发表于 10-07 08:43

    如何为你的树莓准备一张SD卡

    树莓教程与应用
    发表于 10-07 08:18

    树莓传感器教程

    树莓传感器教程
    发表于 10-07 07:13

    树莓的15个应用

    树莓15个应用
    发表于 10-07 06:42

    树莓3树莓4原理图分享

    提供了树莓3、树莓3B、树莓4版本的原理图
    发表于 09-27 07:58

    树莓全新可更换镜头相机配件官方指南

    树莓相机!树莓推出1230万像素可更换镜头相机配件,配备索尼IMX477传感器,可兼容C和CS卡口镜头,售价50美元!
    发表于 09-26 06:11

    较全的树莓入门资料

    比较全的树莓入门介绍
    发表于 09-25 07:41

    有移植树莓派到飞腾的教程吗

    公司基于树莓开发板的产品 希望移植到飞腾派上,请大佬指导
    发表于 08-28 10:24

    树莓的故障分析检测

    各位大神,我的树莓B4,经常读不出卡数据,卡换个新的,故障依旧。请指点树莓的故障检查与维修。
    发表于 04-27 11:30