树莓派(0):树莓派基础知识

开启树莓派之旅

记得我刚买树莓派的时候,还对这小东西一无所知。去某宝买了一些教学资料和一些书,杂七杂八的什么都有,花了很多不必要的时间,现在想想真是后悔。

写这一系列博客,一来技术共享,大家共同进步,二来自己哪天又要用这小东西的时候能直接看着博客顺利上手。

1.什么是树莓派

了解树莓派的最好方式当然是去树莓派官方网址 raspberrypi.com

以下内容针对树莓派3B进行介绍,新出的树莓派4B可到此处进行对比。

树莓派是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100以太网接口,可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备PC的所有基本功能。
树莓派3B

(图片来源:Raspberry Pi User Guide 4th Edition)
该文档下载链接
提取码:henj

2.树莓派3B参数表

树莓派型号 Raspberry Pi 3B
SOC Broadcom BCM2837
CPU Cortex-A53 64Bit Soc at 1.2GHz
GPU Broadcom VideoCore IV,OpenGL ES 2.0,1080p 30 h.264/MPEG-4 AVC高清解码器
内存 1GB SDRAM @ 400MHz (LPDDR2)
板载资源 Sandisk Micro SD card 16GB class 10 (ours)
蓝牙 Bluetooth 4.1/Bluetooth Low Energy(BLE)
无线网络 802.11.b/g/n wireless LAN
以太网网口 Ethernet over USB 2.0(max. throughput 100Mbps)
USB 4x USB Ports
GPIO 40 pins
音频接口 3.5mm插孔,HDMI电子输出或IIS
视频接口 Full Size HDMI, MIPI DSI display port, MIPI CSI camera port
电源输入 5V/2.5A DC via micro USB or GPIO
重量 45g
总体尺寸 85 x 56 x 17mm
工作环境温度 0-50℃
操作系统 Debian GNU/Linux、 Fedora、 Arch Linux 、 RISC OS、 Windows10 IoT

raspberry

  • 关于GPU的分配:
    1GB内存要用于Broadcom BCM2837上的中央处理器(CPU)和图形处理器(GPU),因此要在两者之间合理分配内存。默认情况下GPU占64M,剩下全部用于CPU。
    1)如果将树莓派用作文件服务器或Web服务器,不需要使用视频输出,可以减少分配给GPU的内存数量(最少为16MB);
    2)如果用它来浏览网页,看B站甚至运行3D游戏,那么应该为GPU分配较大的内存,从而提高GPU性能,使其更好地渲染3D游戏画面;如果需要接入摄像头,则至少要为要为GPU分配128MB显存。

以下内容是上学期课程所整理的一些东西,新手可选择性跳过,不过了解一下绝对大有帮助:)

3.运行环境(Run-Time Environment)

目标平台上为运行嵌入式软件而必须的的软件环境。

3.1启动代码(Start-up code)

首先,需要知道的是树莓派传统的desktop computer那样启动。VideoCore(a.k.a the Graphics processor)实际上 是在ARM CPU之前 启动的!

树莓派的SOC内部集成了ARM CPU,GPU,ROM,SDRAM,以及其他设备,所以可以把SoC想象成主板和CPU一起压缩成一个芯片(arm系统结构的PC)。

  1. 当给树莓派加电后,最先执行保存在ROM中的代码,这些代码是芯片出厂的时候就设定的,通常被称为 first-stage bootloader,这些代码固化硬件内部,可以认为是SoC硬件的一部分。
    first-stage bootloader的主要工作是加载位于SD卡上第一个分区的bootloader(称为second-stage bootloader ),第一个分区必须是FAT32格式。

  2. second-stage bootloader 主要是bootloader.bin。可以把SD卡取出,放到Windows或Linux系统中,就可以看到bootloader.bin文件。需要说明的是,上电或者重启后,cpu和ram都没有初始化,因此,执行second-stage bootloader 的实体是GPU,bootcode.bin是加载到GPU的128KB大小的L2Cache中,再执行的。
    bootcode.bin的主要工作是初始化ram,并把start.elf(也位于SD卡的第一分区)加载到内存中

  3. start.elf就是third-stage bootloader,start.efl从第一个分区中加载config.txt,可以把config.txt想象成bios配置信息,内部的配置都可以改变。
    start.elf把ram空间划分为2部分:CPU访问空间GPU访问空间
    SoC芯片只访问属于GPU地址空间的内存区,例如,GPU的物理内存地址空间为0x000F000 – 0x0000FFFF,CPU的物理内存地址空间为0x00000000 – 0x0000EFFF,如果GPU访问0x0000008,那么它访问的物理地址为0x000F008。(实际上,ARM处理器的mmu部件把GPU的内存空间映射到0xC0000000 开始)。

  4. config.txt在内存地址空间分配完成后才加载,因此,不可以在config.txt中更改内存地址的配置。然而,可以通过配置多个elf文件来让start.elf和config.txt支持多种配置空间。start.elf还从SD卡的第一个分区中加载cmdline.txt(如果cmdline.txt存在的话)。该文件保存的是启动kernel(不一定是Linux的内核)的参数。

  5. 至此,SoC进入了boot的最后阶段,start.efl把kernel.img,ramdisk,dtb加载到内存的预定地址,然后向cpu发出重启信号,因此cpu就可以从内存的预定地址执行kernel的代码,就进入了软件定义的系统启动流程。

  6. 启动操作系统后,GPU代码没有unloaded。事实上,start.elf不仅仅是GPU的固件,它还是一个专有的操作系统,叫做VideoCore OS。当普通OS (Linux)需要一个不能直接访问的元素时,Linux使用邮箱消息系统与VCOS通信。

Reference:How the Raspberry Pi boots up

3.2操作系统

树莓派操作系统 简介
Raspbian Stretch with Desktop 基于Debian,Arm版的Linux系统,兼容性和性能优秀,当前实用最广泛的操作系统
Raspbian Stretch with Desktop and recommended software 相比上一个多了一些推荐软件,比如一些IDE、Office、游戏等
Raspbian Stretch Lite 基于Debian,不带图形界面,相比第一个小很多,4G内存卡就够
Pidora 基于Fedora,是拥有另一种风格的树莓派操作系统
Arch Linux ARM 基于Arch Linux,对linux操作系统很熟悉的人大都实用此版本
Raspbmc 在Raspbian基础上定制的XBMC影音播放系统,将树莓派设置成电视机的Linux操作系统
OpenELEC NOOBS安装推荐版本之一,用得最多的XBMC跨平台分支,是一个小的XBMC媒体操作系统
Windows10 IoT 微软官方针对物联网(IoT)的一个Windows版本
Ubuntu MATE 针对树莓派的版本,界面个性美观
Snappy Ubuntu Core 针对物联网(IoT)的一个发行版本
CentOS 针对ARM的发行版,基于Red Hat Linux ,CentOS 是RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在RHEL的基础上修正了不少已知的 Bug ,稳定性值得信赖
FreeBSD 针对树莓派的发行版,由于FreeBSD宽松的法律条款,其代码被好多其他系统借鉴包括苹果公司的OS X,正是由于OS X的UNIX兼容性,使得OS X获得了UNIX商标认证。
Kali 针对树莓派的发行版,Kali Linux面向专业的渗透测试和安全审计,黑客的最爱

3.3编程环境

为完成嵌入式软件开发而必须的软硬件工具。

3.3.1 文本编辑器:vi/vim,gedit, nano

nano(小白最爱)

nano是一个小巧自由,并且友好的编辑器,在大部分linux上都有nano命令。相对vi,不熟悉linux的话nano比较简单,只需要知道如何进入编辑,如何保存退出即可。

vi(标准)

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样。对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。

vim(编程最爱)

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
安装vim只需要以下两步操作
卸载vim-tiny:$ sudo apt-get remove vim-common
安装vim full:$ sudo apt-get install vim

gedit(纯文本)

是Linux下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。

3.3.2交叉编译工具:gcc

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。

树莓派中已经安装了gcc工具链,可在树莓派中直接编译源代码生成可执行文件。与此同时,PC机上也可使用gcc工具链生成可执行代码,但是和树莓派上的gcc工具不同,PC机上的gcc工具生成intel或amd芯片上可执行的代码,但树莓派却是arm系列的芯片,显然存在不小的差异。那么使用交叉工具链便可在PC机上开发树莓派中可执行程序。 虽然树莓派的主频可达700MHz远高于一般的嵌入式系统,但相比于PC机其性能还是差些,使用交叉工具链可节约开发时间。在编译链接同等规模的代码时,PC机所用的时间应少于树莓派所用时间,通过交叉编译的方法提高效率

3.3.3交叉调试工具:gdb

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。在UNIX平台下做软件,GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

一般来说,GDB主要帮忙完成下面四个方面的功能:

  1. 启动程序,可以按照自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
  3. 当程序被停住时,可以检查此时程序中所发生的事。
  4. 动态的改变程序的执行环境。

OKay,基础知识先整理这么多,接下来开始动手实践!

发布了5 篇原创文章 · 获赞 0 · 访问量 317

猜你喜欢

转载自blog.csdn.net/ZhaoDongyu_AK47/article/details/103932245