记得我刚买树莓派的时候,还对这小东西一无所知。去某宝买了一些教学资料和一些书,杂七杂八的什么都有,花了很多不必要的时间,现在想想真是后悔。
写这一系列博客,一来技术共享,大家共同进步,二来自己哪天又要用这小东西的时候能直接看着博客顺利上手。
了解树莓派的最好方式当然是去树莓派官方网址 raspberrypi.com
以下内容针对树莓派3B进行介绍,新出的树莓派4B可到此处进行对比。
树莓派是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100以太网接口,可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备PC的所有基本功能。
(图片来源:Raspberry Pi User Guide 4th Edition)
该文档下载链接
提取码:henj
树莓派型号 | 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 |
以下内容是上学期课程所整理的一些东西,新手可选择性跳过,不过了解一下绝对大有帮助:)
目标平台上为运行嵌入式软件而必须的的软件环境。
首先,需要知道的是树莓派传统的desktop computer那样启动。VideoCore(a.k.a the Graphics processor)实际上 是在ARM CPU之前 启动的!
树莓派的SOC内部集成了ARM CPU,GPU,ROM,SDRAM,以及其他设备,所以可以把SoC想象成主板和CPU一起压缩成一个芯片(arm系统结构的PC)。
当给树莓派加电后,最先执行保存在ROM中的代码,这些代码是芯片出厂的时候就设定的,通常被称为 first-stage bootloader,这些代码固化硬件内部,可以认为是SoC硬件的一部分。
first-stage bootloader的主要工作是加载位于SD卡上第一个分区的bootloader(称为second-stage bootloader ),第一个分区必须是FAT32格式。
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卡的第一分区)加载到内存中。
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 开始)。
config.txt在内存地址空间分配完成后才加载,因此,不可以在config.txt中更改内存地址的配置。然而,可以通过配置多个elf文件来让start.elf和config.txt支持多种配置空间。start.elf还从SD卡的第一个分区中加载cmdline.txt(如果cmdline.txt存在的话)。该文件保存的是启动kernel(不一定是Linux的内核)的参数。
至此,SoC进入了boot的最后阶段,start.efl把kernel.img,ramdisk,dtb加载到内存的预定地址,然后向cpu发出重启信号,因此cpu就可以从内存的预定地址执行kernel的代码,就进入了软件定义的系统启动流程。
启动操作系统后,GPU代码没有unloaded。事实上,start.elf不仅仅是GPU的固件,它还是一个专有的操作系统,叫做VideoCore OS。当普通OS (Linux)需要一个不能直接访问的元素时,Linux使用邮箱消息系统与VCOS通信。
Reference:How the Raspberry Pi boots up
树莓派操作系统 | 简介 |
---|---|
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面向专业的渗透测试和安全审计,黑客的最爱 |
为完成嵌入式软件开发而必须的软硬件工具。
nano是一个小巧自由,并且友好的编辑器,在大部分linux上都有nano命令。相对vi,不熟悉linux的话nano比较简单,只需要知道如何进入编辑,如何保存退出即可。
vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样。对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
安装vim只需要以下两步操作
卸载vim-tiny:$ sudo apt-get remove vim-common
安装vim full:$ sudo apt-get install vim
是Linux下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。
树莓派中已经安装了gcc工具链,可在树莓派中直接编译源代码生成可执行文件。与此同时,PC机上也可使用gcc工具链生成可执行代码,但是和树莓派上的gcc工具不同,PC机上的gcc工具生成intel或amd芯片上可执行的代码,但树莓派却是arm系列的芯片,显然存在不小的差异。那么使用交叉工具链便可在PC机上开发树莓派中可执行程序。 虽然树莓派的主频可达700MHz远高于一般的嵌入式系统,但相比于PC机其性能还是差些,使用交叉工具链可节约开发时间。在编译链接同等规模的代码时,PC机所用的时间应少于树莓派所用时间,通过交叉编译的方法提高效率。
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。在UNIX平台下做软件,GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
一般来说,GDB主要帮忙完成下面四个方面的功能:
OKay,基础知识先整理这么多,接下来开始动手实践!