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

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

    关注

    462

    文章

    53559

    浏览量

    459322
  • 树莓派
    +关注

    关注

    122

    文章

    2069

    浏览量

    109755

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    零成本钢铁侠手套!树莓+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-16 16:16 893次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b><b class='flag-5'>派</b>+OpenCV 秒变手势遥控器!

    如何使用树莓与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-14 17:45 980次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>与OpenCV实现面部和运动追踪的云台系统?

    树莓屏幕怎么选?

    树莓很多人都用过,但用屏幕的倒不是很多。不少都是直接远程操作,或者直接接身边的显示设备了。但我觉得给开发板配一个屏幕还是很能提升使用体验的。这次我就介绍一下树莓的屏幕怎么选择。
    的头像 发表于 08-08 14:59 1078次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>屏幕怎么选?

    树莓操作系统:版本、特性及设置完整指南!

    树莓操作系统是什么?树莓操作系统是由树莓基金会专为树莓
    的头像 发表于 07-28 18:26 843次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>操作系统:版本、特性及设置完整指南!

    树莓5上开启YOLO姿态估计识别之旅!

    AIHat+上|如何编写自定义Python代码YOLO姿态估计在树莓AIHat+上|编写自定义Python代码今天是第二部分:树莓
    的头像 发表于 07-18 15:31 1996次阅读
    在<b class='flag-5'>树莓</b><b class='flag-5'>派</b>5上开启YOLO姿态估计识别之旅!

    树莓5上使用YOLO进行物体和动物识别-入门指南

    AIHat+上|如何编写自定义Python代码YOLO姿态估计在树莓AIHat+上|编写自定义Python代码今天是第一部分:在树莓
    的头像 发表于 07-17 17:16 1573次阅读
    在<b class='flag-5'>树莓</b><b class='flag-5'>派</b>5上使用YOLO进行物体和动物识别-入门指南

    树莓6 传闻:发布日期与规格!

    每当我想再为我的收藏增添一款树莓时,总会在是立即购买还是等待硬件更强大的下一代之间犹豫不决。但新树莓型号的发布往往容易被错过,尤其是在你的信息流被病毒式传播的猫咪视频占据时。因此,
    的头像 发表于 07-11 16:21 1371次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>6 传闻:发布日期与规格!

    树莓小技巧:无需键盘或显示器,如何通过WiFi设置树莓

    树莓是一款小巧便携的USB供电计算机,可以隐藏起来用于小型项目,如网络服务器或家庭自动化。通常,设置树莓需要键盘和显示器来编辑和查看树莓
    的头像 发表于 06-26 15:41 1054次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>小技巧:无需键盘或显示器,如何通过WiFi设置<b class='flag-5'>树莓</b><b class='flag-5'>派</b>?

    搭载代码树莓进入国际空间站!

    前言通过欧洲宇航挑战赛(EuropeanAstroPiChallenge),年轻人通过在国际空间站(ISS)上的树莓(RaspberryPi)计算机上运行代码的独特体验,参与计算编
    的头像 发表于 06-19 17:11 866次阅读
    搭载<b class='flag-5'>代码</b>的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>进入国际空间站!

    树莓分类器:用树莓识别不同型号的树莓

    在本教程系列的第一部分中,您将学习如何使用树莓AI摄像头来检测不同的树莓型号。本系列由DavidPlowman创建,他是树莓
    的头像 发表于 06-13 16:39 1001次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>分类器:用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>识别不同型号的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>!

    树莓“揪出”家里的耗电怪兽!

    在本应用中,我们将使用树莓设置一个CE电流监测器,并通过网页界面显示电路的电流读数。本项目使用的组件硬件组件树莓2ModelBx112通道20安培电流监测控制器x1项目背景介绍在本
    的头像 发表于 06-04 15:33 1148次阅读
    用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>“揪出”家里的耗电怪兽!

    树莓“吉尼斯世界记录”:将树莓的性能发挥到极致的项目!

    树莓是一款功能强大、体积小巧且高度可定制的设备,多年来,我们见证了它被应用于众多领域。无论是将其装入3D打印的经典游戏机外壳,还是简单地将它隐藏起来作为家庭文件服务器,我们都报道过在社区里用树莓
    的头像 发表于 05-22 16:53 1213次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>“吉尼斯世界记录”:将<b class='flag-5'>树莓</b><b class='flag-5'>派</b>的性能发挥到极致的项目!

    能够精准定位的树莓机器人!

    我为我的自制机器人BigRob(同样由树莓驱动)配备了基于树莓的精准GPS导航系统。本项目所用组件硬件组件NV08C-CSMx1NV08C-CSM是一款集成式卫星导航接收器
    的头像 发表于 05-17 08:33 851次阅读
    能够精准定位的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>机器人!

    树莓 Zero 打造的智能漫游车!

    使用PXFMini和树莓Zero打造您自己的自主漫游车。本项目所用组件硬件组件ErleRoboticsPXFmini×1树莓Zero×1树莓
    的头像 发表于 05-13 16:39 874次阅读
    用 <b class='flag-5'>树莓</b><b class='flag-5'>派</b> Zero 打造的智能漫游车!

    deepin 23+树莓让小车动起来

    deepin 23 +树莓还有啥新玩法?     前言 继我们之前发布的树莓运行 deepin 23 系统教程后,此次我们将深入探索如何
    的头像 发表于 02-12 09:12 1328次阅读
    deepin 23+<b class='flag-5'>树莓</b><b class='flag-5'>派</b>让小车动起来