TL/DR:
我试图在下面对这个主题进行一般性介绍。如果您是一个更动手的类型并且想跳过文字墙,请跳到最后。那里有一些教程链接。跳进去——卡住会导致 Stack Overflow 最擅长的问题。
C/C++ 中的标头与库
C++ 中的头文件和库之间有一个重要的区别。头文件在您的代码中是可见的,因为它们是您在 #include 语句中实际提及的内容。但是,在大多数情况下,您包含的标头对应于系统上安装的库。
实际上,这很重要,原因有两个:
- 您通常不会在系统上安装“头文件”,而是安装恰好带有头文件的库。有少数只有标头的库是此规则的例外,但通常您在标头便于访问的某个地方有一个二进制库。
- #include 语句只是故事的一半。通常有一个相应的编译器选项,您需要在其中指定要链接到特定库。在 IDE 中,这将隐藏在某个项目选项中。对于命令行编译器,这将是您在命令行或(更常见)在 Make 文件或类似文件中传递给编译器的开关。
第二点实际上适用于您的标准库,如 iostream 或 stdio.h,但这些由标准 C 或 C++ 库支持,该库由默认。
一般的 Linux
大多数 linux 发行版都会附带某种包管理器。有很多可用的(Ubuntu 使用 Apt,Redhat 使用 yum,Arch 使用 pacman,Gentoo 使用 portage 等)。实际使用的管理器是发行版的定义属性之一。在 Distro 的网页上很容易找到文档。这是一个非常重要的理解工具。
除了各种 C/C++ 和 Posix 标准头文件外,您可以使用的头文件是您系统上安装的库的功能。理解这一点很重要,因为可用标头列表包含 Internet 上所有可用的库,而不仅仅是您的系统目前恰好安装的少数库。
每个库通常都会打包为您的 linux 发行版的一个包。当您找到所需的库时,安装相应的包。这将为您提供所需的头文件和库文件。
在硬盘驱动器上查找库和头文件实际上并不常用,但如果您好奇,头文件通常会在以下目录之一(或其中的子目录)中结束
/usr/local/include
/usr/include
图书馆大多位于
/lib
/usr/lib
/usr/local/lib
这些将具有包含其版本号的神秘名称,以及一个更通用(仍然神秘)的名称,该名称符号链接到具有特定版本号的名称。
一些发行版有单独的“开发”版本的库,包括头文件,并且默认只安装运行时文件(即用户运行程序所需的文件)。如果您的发行版这样做,您将需要开发包来使用该库编写软件。
当您决定了所需的功能后,您通常会去寻找可以帮助您完成该任务的库。您可以在论坛上四处打听,或者直接在 Google 上搜索。
内核中的设备驱动程序
大多数库将通过设备驱动程序与设备交互。在 linux 中,设备驱动程序被编译到内核中,或者作为加载到内核中的模块存在。您的 Pi 发行版有望随附现有硬件所需的所有驱动程序。如果没有,您需要获取内核模块或重新编译内核以包含所需的驱动程序。模块和用于加载/卸载它们的适当脚本通常作为您的发行版的包提供,就像库一样。
可以编写软件直接与驱动程序对话。这是一个非常广泛的话题。您最好的选择是选择一个设备(即 I2C、SPI 等)并在谷歌上找到一个专门在 Pi 上与该设备交互的教程。
This tutorial addresses the basics of writing a loadable module. 如果您想编写自己的 SPI 驱动程序,这将是一个不错的起点。
This is a good place to go for a general kernel overview.它将帮助您了解可用的内容,如何获取内核源代码的副本等。如果您想编写驱动程序,这也是一个很好的知识。如果您开发新的东西,它也是学习如何将代码提交到内核的地方。
最后,编写自己的设备驱动程序是可能的,而且不必害怕。不过,该主题的详细信息可能会写满一本书,因此当您准备好尝试时,可以通过 Google 搜索。
Raspberry Pi 上的 Linux
首先要了解 Pi,它在大多数方面与运行 linux 的 PC 没有什么不同。您在 PC 上找到的有关 linux 系统编程的任何一般信息都将同样适用于 Pi。唯一需要注意的是处理器架构不同(ARM,与 Intel/AMD),并且 Pi 有一些硬件项目(如 I2C、SPI 和 GPIO)在个人电脑。
在 Pi 上实际上有不止一个 linux 发行版可用。这些通常来自常见的 PC 发行版——Ubuntu 衍生发行版是最常见的。您需要找到您拥有的任何发行版的网站。
如果您尝试在包管理器之外安装东西,则需要小心为 ARM 处理器编译库(或您自己编译的源库)。有一些例外,但绝大多数开源库都应该可以在 ARM 上使用。
This 看起来是一个很有前途的库,可能是一个很好的起点。
This 看起来像是一个很好的 GPIO(通用输入/输出——即,您可以切换的引脚)教程。
This 导致一些 SPI 示例代码。