嵌入式Linux设备驱动程序开发指南(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统

Broadcom处理器BCM2837被使用在Raspberry Pi 2上以及后来的Raspberry Pi 3上。BCM2837的底层体系结构与BCM2836相同。唯一的显著区别是用四核ARM Cortex A53(ARMv8)替换了四核ARMv7。

ARM内核运行速为1.2GHz,比Raspberry Pi 2快50%。VideoCore IV的处理速度为400MHz。可以在下面链接查看BCM2836的相关文档:https://www.raspberrypi.org/docu-mentation/hardware/raspberrypi/bcm2836/README.md。

以及在如下链接查看BCM2835的相关文档:https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/README.md。

使用Raspberry Pi 3 Model B型号做开发试验,这是一款带有无线局域网和蓝牙的单板计算机。可以在如下链接查看更多的信息:https://www.raspberrypi.org/products/raspberry-pi-3-model-b/。

1.11.1 Raspbian

Raspbian是推荐用于Raspberry Pi上的典型操作系统。Raspbian是一款免费的操作系统,它基于Debian系统开发,并针对Raspberry Pi硬件做了优化。Raspbian附带了35 000多个软件包:这些软件包以很好的格式预编译为附带软件,以便可以轻松地安装到Raspberry Pi上。Raspbian是一个社区项目,目前正在积极的开发中,其重点是尽可能提高Debian软件包的稳定性和性能。

你将在SD卡中安装基于内核4.9.y的Raspbina_lite映像。打开链接http://downloads.raspberrypi.org/raspbian_lite/images/,下载raspbian_lite-2017-09-08/目录下的2017-09-07-raspbian-stretch-lite.zip映像文件。

要将映像文件写入SD卡中,你需要下载和安装软件Etcher。该工具是一款开源软件,非常有用,因为它允许将压缩后的映像文件作为输入参数。更多的信息和额外的帮助见Ether的网站:https://etcher.io/。

请依照下面网站的“Writing an image to the SD card”节的步骤把映像文件写入SD卡中:https://www.raspberrypi.org/documentation/installation/installing-images/README.md。

1.11.2 构建Linux内核

有两种方法构建内核。你可以在Raspberry Pi上本地构建,但是这种方法需要很长的时间。或者使用交叉编译的方法,这样更快,但是这需要更多的设置。你将选择第二种方法。

首先安装Git和构建依赖:

047-01

接下来获取资源:

047-02

将工具链下载到主文件夹:

047-03

编译内核、模块和设备树文件:

047-04

做如下的内核配置,用于接下来的开发试验:

047-05

保存设置并退出菜单。

一次性编译内核、设备树文件和模块:

048-01

构建完内核后,你需要把内核文件拷贝到Raspberry Pi上并安装模块。把uSD插入SD读卡器。

048-02

更新config.txt文件,添加以下值:

048-03

更新内核、设备树文件和模块:

049-01

从读卡器中拔下uSD卡,并插入Raspberry Pi 3 Model B单板中。给单板上电。启动并配置主机上的minicom应用,观察系统启动过程。给minicom做如下配置:115200波特率,8位数据位,1位停止位,无奇偶校验。确保硬件和软件流控功能关闭。

1.11.3 将文件复制到Raspberry Pi

可以使用SSH从同一网络里的另一台计算机或者设备上远程登录到Raspberry Pi的命令行模式中。请确保正确设置并连接了Raspberry Pi:

049-02

Raspbian默认情况下是关闭SSH服务器的,你需要手动启动它:

049-03

默认情况下root账号是禁止的,但是可以是用下面的命令来启用它,同时给它设置密码:

049-04

现在你可以使用root账号登录你的Raspberry Pi了。打开sshd_config文件,将Permit-RootLogin改为yes(同时把原来的行注释掉)。按<Ctrl+O>键保存文件,然后按<Ctrl+x>键,输入“yes”并回车退出。

049-05

创建一个简单的应用来验证工具链是否正确安装。可以使用gedit文本编辑器来编写应用文件:

049-06

添加如下代码:

050-01

将工具链添加到$PATH环境变量里:

050-02

可以直接使用C编译器编译app.c文件。

050-03

scp是通过SSH传输文件的命令。这意味着你可以在计算机之间复制文件,例如从Raspberry Pi复制到台式机或者笔记本,反之亦然。现在你可以使用下面的命令将应用程序文件app从你的计算机复制到IP地址为10.0.0.10的Raspberry Pi用户目录下:

050-04

050-05

你必须先以root用户身份登录Raspberry Pi设备,才能在主机中使用scp app root@ 10.0.0.10命令:

050-06

如果随后修改了内核或设备树文件,你可以使用SHH将它们远程复制到Raspberry Pi:

050-07

在Raspberry Pi板(目录)上将eth0网络接口的IP地址配置为10.0.0.10,需要编辑/etc/network/interfaces文件。使用nano编辑器打开这个文件:

050-08

添加如下的内容:

051-01

按<Ctrl+O>键保存文件,然后按<Ctrl+x>,输入“yes”并按回车键退出。重启SSH服务。这样,每次启动Pi的时候,就不必再次通过ifconfig来设置网络地址了。