这个系列的文章翻译改编自剑桥大学的关于树莓派操作系统开发的系列文章,课程制作人是Alex Chadwick,不是直译,和原文会有些比较大的区别
而且系列没有针对B+、A+和v2,v3进行更新,一些地方可能会无法工作,尤其是最开始的一些关于LED的课程
不过你可以在GitHub对它进行贡献和更新
这个课程是带你了解开发一个在树莓派上能运行的几乎最基本的操作系统(裸板开发),使用的是汇编语言,准确的说是ARM
上的汇编,原作者尽可能的减少汇编带来的难度(其实本质的难度就在那里..),整个课程由11个小课和一个小的入门构成,每个小课都有一些理论知识和一个实际的操作(上机),不过作者都给出了参考答案。
作者在设计课程的时候更加注重于实现一些操作系统常有的功能任务,而不是把操作系统的方方面面都实现一遍,到最后,读者应该是有能力把学到的所有知识都整合到一起,做出一个自己的操作系统的。
课程列表
0 Introduction
这里面不包含任何的动手操作,就是讲了一些简单的基础先修知识而已,即使不看直接上手后面的教程也是没有关系的。
OK LED (入门)
1 OK01
这个教程包含了一个上手的解释,以及具体的如何控制树莓派板子上面的OK
和ACT
的LED。
2 OK02
以OK01为基础,控制板子上的LED循环闪烁,也就是反复的点亮和关闭。
3 OK03
在OK02的基础上,使用函数来使得汇编代码具有更大的可读性。
4 OK04
在OK03基础上,如何使用定时器来让LED的闪烁达到精确的时间间隔。
5 OK05
在OK04基础上,使用摩尔斯电码来发送SOS的信号。
显示 (进阶)
Screen01
这个教程会介绍一些基础的图形学知识,并把一个梯度变换的图案显示到显示器上。
Screen02
在上一个教程的基础上,介绍如何在显示器上画一条线和如何产生伪随机数。
Screen03
上一个教程基础上,介绍如何在显示器上画出文字,并对内核命令行的概念做一定的讲解。
Screen04
上一个教程为基础,介绍如何通过操作文本在显示器上显示一些计算量。
输入 (进阶)
Input01
介绍一些驱动的理论,以及代码的链接和键盘输入,通过这个教程就能把字符输入到显示器上了。
Input2
在Input2的基础上,介绍如何为操作系统做一个命令行的接口。
需要的材料
硬件
- 一台计算机用来写代码
- 树莓派和SD卡
- 显示器
- 键盘
软件
只需要一个ARMv6的GNU的编译器,准确的说是一堆工具或者说是交叉编译环境,这个交叉编译器可以把你的源代码转换成树莓派SD卡上可以运行的文件
Linux
有好几种安装方式,对于Ubuntu这种,直接用apt-get
就行了
$ sudo apt-get install gcc-arm-none-eabi
操作系统
一个操作系统只是一个非常复杂的程序而已,它的任务就是组织它上面的各种程序怎么运行以及如何给这些程序分配计算机的时间、内存、硬件和其他的资源。常见的操作系统包括GNU/Linux,Mac OS X和Windows这些桌面系统,当然也有安卓和iOS这些手机操作系统。
由于操作系统必须要和实体的硬件有交互联系,所以它必须要对当前运行的硬件底层有一定的具体的了解。为了让操作系统在不同的硬件架构上都能使用,驱动的概念也被提出来了,驱动是操作系统上的一段可以添加也可以删掉的代码,通过它可以让操作系统调动硬件上的某个部分,在整个教程中,我们不会讲到如何创建可移除的驱动,但会重点介绍针对树莓派的驱动怎么来写。
操作系统的设计模式有很多很多种,这个教程只能讲到一些最表面的东西。
汇编代码
这个课程几乎全部都要用汇编来写,毕竟汇编是最接近机器代码的。
那么计算机是怎么工作的呢?假如你上过计算机组成原理课,那你就知道是处理器在不断的执行指令,进行一些数字的加减,然后有内存来存这些数字,同时要和连着的硬件部分相交互,汇编代码就是这些指令的人能相对读的文本格式了。
当我们正常编程写代码的时候,我们写的是C++,Java,C#和Basic等等,然后会有一个程序把这些代码转成汇编代码,然后汇编代码再转成二进制的机器码。二进制的机器码是计算机能读的代码,但对人类而言是几乎不可能读懂的一串0、1序列。
和普通编程一样,汇编代码也有好几种,不同的种类针对不同的处理器,这也就意味着同一份代码,想用在不同的硬件架构上,我们就需要用不同汇编语言来重写一边,这是一件让人很头大的事情,好在后来有了C语言,我们可以写一份C代码,然后让编译器转换成不同种类的汇编代码,这样就能在各种不同的硬件上都能顺利的跑起来了。