15 KiB
在树莓派中开启激动人心的Perl之旅
树莓派,随心所欲.
Image by : opensource.com
我最近在 SVPerl 谈到运行在树莓派上的 Perl 语言时候,有人问我,"我听说树莓派应该使用 Python ,是这样吗?".我非常乐意回答他,这是个常见误解.树莓派可以支持任何语言: Python,Perl和其他树莓派官方理事会初始安装在树莓派上的语言.
看似很厉害,其实也非常简单.树莓派是个创造者,英国科学教授 Eben Upton,树莓派中的'派'(pi),是想为了听起来像 'python',因为他喜欢这门语言.他选择了这门语言作为孩子们的启蒙语言.但是他和他的团队做了一个通用计算机.开源软件没给树莓派任何限制.我们想运行什么就运行什么,全凭自己心意.
更多关于树莓派的信息
- Our latest on Raspberry Pi
- What is Raspberry Pi?
- Getting started with Raspberry Pi
- Send us your Raspberry Pi projects and tutorials
我在 SVPerl 和这篇文章中还想讲第二点,就是介绍我的 'PiFlash' 脚本.虽然它是用 Perl 写的,但是不需要你有多了解 Perl 就可以将树莓派系统写入到 SD卡.这样对初学者就比较友好,避免他们在烧录SD卡时候,偶然擦除了整个硬盘.即使是高级用户也可以从它的自动化工作中受益,包括我.这也是我开发它的原因.在 Windows 和 Macs 下也有类似的工具,但是树莓派网站没有介绍类似工具给 Linux 用户.不过,现在有了.
开源软件早就有自己造轮子的传统,因为大牛总是崇尚 "自痒自挠"去解决问题.Eric S在他 1997年的论文和 1999年的书籍 The Cathedral and Bazaar中早有提及,它定义了开源软件的方法论.我也是为了满足 Linux 用户,比如我,所以写了这个脚本.
下载系统镜像
想要开启树莓派之旅,你首先需要为它下载一个操作系统.我们称之为 "系统镜像"文件.一旦你把它下载到你的桌面,手提电脑,或者甚至是另一个树莓派中,我就需要写入或者称之为烧录进你的 SD卡.详细情况可以看在线文件.手动做这件事情需要一些功底,你要把系统镜像烧录到整个 SD卡,而不是其中一块.系统镜像必须独自包含至少一个分区,因为树莓派引导需要从它启动的地方读取 FAT32文件系统分区.除了 boot 分区,其他分区可以是操作系统内核支持的任何分区类型.
在大部分树莓派中,我们都是搭载一些 Linux 内核.这里有一些树莓派中常用的系统镜像.(当然,没什么能阻止你自己造轮子)
树莓派基金会向新手推荐的是 "NOOBS"系统.它代表了 "New Out of the Box System",显然它好像听起来像术语 "noob"(小白),通俗点说 "newbie"(菜鸟的口语化).NOOBS是一个基于 Linux 系统的树莓派系统,它会给你一个菜单可以在你的树莓派上自动下载安装几个系统镜像.
Raspbian Linux是 Debian Linux 发行版的树莓派定制版.它是由树莓派开发的正式 Linux 发行版,并且由树莓派基金会维护.在运行在 Linux发行版之前的所有驱动和软件都会在 Raspbian上先试用.默认安装了 Perl.
Ubuntu Linux (还有 社区版的 Ubuntu MATE)也支持 ARM处理器的树莓派平台.Ubuntu 是一个商业化的开源软件,是 Debian Linux 的衍生版,它也使用 DEB 包管理器.Perl 也在其中.它仅仅支持32位或者64位的ARM处理器的树莓派2,3模块.`
Fedora Linux.Fedora 25支持树莓派2,3. Fedora 是一个隶属于 红帽(Red Hat)的开源操作系统.Fedora 是增加了商业包的企业版红帽( Red Hat Enterprise Linux)的急先锋,它当然也像所有的 Hat-compatible Linux 发行版一样使用 RPM 包管理器.同样,它也包含 Perl.
RISC OS 是一个 ARM 处理器的特化单用户操作系统.如果你想要一个比 Linux 系统更加简洁的小型桌面(特点更少),你可以考虑一下.它同样支持 Perl.
RaspBSD 是一个 FreeBsd 树莓派发行版.它是一个基于 Unix 的系统,而不是 Linux.作为开源 Unix 的一员,它延续了 Unix 的风格,而且和 Linux 有着众多相似之处.包括相似的系统环境,和 Perl.
OSMC 开源多媒体中心,LibreElec 电视娱乐中心.它们都基于运行 Linux 内核的Kodi 娱乐中心.它是一个小巧,特化的 Linux 系统,所以不要期望它能支持 Perl.
Microsoft Windows IoI 是运行树莓派3大家庭的新成员.你需要微软开发者身份才能下载.而作为一个 Linux 极客,我现在还没看.我的 PiFlash 脚本还不支持它.
PiFlash 脚本
如果你想看看树莓派烧录及引导,那么在 Windows 或者 Mac 系统下,你很容易下载到工具完成烧录任务.但是对于 Linux 系统,你有一套工作要自己去做.我已经做过这个太多次,这很容易引发一个开发者的本能去自动化这个过程,这就是 PiFlash 脚本.它能通用的诀窍就在于 Linux系统各有千秋,但是内核却完全相同.
我想,手工操作最大的潜在错误恐怕就是偶然错误地擦除了某个设备,而没有擦除 SD卡,彻底清除了我本想保留在硬盘的东西.我在 SVPerl 中演讲也说了,能在台下听众中找到这种人(恐怕他们不会承认)我会非常高兴.因此,PiFlash 其中一个目的就是保护新手的安全,只擦除 SD卡.PiFlash 脚本还会拒绝覆盖已经包含文件系统的设备.
对于有经验的用户,包括我,PiFlash 脚本还提供提供一个简便的自动化服务.下载完系统镜像之后,一般需要从zip格式中归档或者说解压缩系统镜像.PiFlash 可以直接提取它的文件格式,并且直接烧录到 SD卡中.
我把 PiFlash与指导 发布在了 GitHub 上.
命令行用法如下:
piflash [--verbose] input-file output-device
piflash [--verbose] --SDsearch
input-file参数是你要写入的系统镜像文件,只要是你从树莓派发行版网站下载的镜像都行.output-device参数是你要写入的sd卡块设备路径.
你也可以使用SDsearch 参数列出挂载在系统中sd卡设备名称.
可选项 verbose 在你需要帮助时非常有用,它可以输出所有的程序状态数据,递送 bug 报告,还可以帮助你修复错误.这本来也就是我开发它的目的.
下面是一个列子用来向目标路径 /dev/mmcblk0 的 sd 卡写入经过 zip 压缩的树莓派镜像
piflash 2016-11-25-raspbian-jessie.img.zip /dev/mmcblk0
如果你已经指定了 /dev/mmcblk0p1 (sd卡的第一分区),它会识别到这个分区不可用,然后重新写入.
在不同的 Linux 系统中怎样去识别你的 SD卡 设备是一个技术活.像 mmcblk0 这种在我的笔记本上是基于外设互联的 SD卡接口.如果我使用了 USBSD 卡接口,它就是 /dev/sdb.这在多硬盘的系统中不好区分.但是只有少量的 Linux 块驱动支持 SD卡.PiFlash 在这两种情况下都会块设备的参数.如果全部失败,它会默认使用SD卡中,可写可删除并且有着正确物理扇区数量的 USB 驱动.
我想这应该能涵盖大部分情况.但是,如果你使用了我不知道的 sd 卡呢?我乐意看到你的来信.请在输出信息中加上 --verbos --SDsearch 参数,让我可以知道你系统目前的环境.理想情况下,如果 PiFlash 脚本可以被广泛利用,我们可以构建一个开源社区去尽可能的帮助更多的树莓派用户.
树莓派的 CPAN 模块
CPAN 是一个世界范围内包含各种 Perl 模块的的下载镜像.它们都是开源的.大量 CPAN 中的模块都是历久弥坚.对于成千上百的任务,你不需要重复造轮子,只要利用别人已经发布的代码就可以了.然后,你还可以提交你的新功能.
尽管树莓派是个五脏俱全的 Linux 系统,支持大部分 CPAN 模块,但是这里我想强调一下专为树莓派硬件开发的东西.一般来说它们都用在测量,控制,机械方面的嵌入式系统中.你可以通过 GPIO 针脚将你的树莓派连接到外部电子设备.
可以使用树莓派 GPIO 针脚的模块如下:[Device::SMBus],[Device::I2C],[Rpi::PIGPIO],[Rpi::SPI],[Rpi::WiringPi],[Device::WebIO::RaspberryPI]和[Device::PiGlow].树莓派支持的嵌入式模块如下[UAV::Pilot::Wumpus::Server::Backend::RaspberryPiI2C],[RPI::DHT11],[RPI::HCSR04],[App::RPI::EnvUI],[RPi::DigiPot::MCP4XXXX],[RPI::ADC::ADS],[Device::PaPiRus]和[Device::BCM2835::Timer]
例子
这里有些我们在树莓派上可以用Perl做的事情的例子
例一:在 OSMC 使用 PiFlash 播放视频
本例中,你将练习如何设置并运行使用 OSMC 操作系统的树莓派.
- 到RaspberryPi.Org下载区,下载最新的 OSMC 版本.
- 将空 SD卡插入你的 Linux 电脑或者笔记本.树莓派第一代是全尺寸的 SD卡,而其他树莓派版本需要一个通用适配器才能插入 SD卡
- 在插入前后分别运行 cat /proc/partitions 命令才得到系统分给硬件的设备名称.它可能像这样 /dev/mmcblk0 或者 /dev/sdb 用如下命令将正确的系统镜像烧录到 SD卡.
** piflash OSMC_TGT_rbp2_20170210.img.gz /dev/mmcblk0**
-
弹出 SD卡,将它插入树莓派中,接上 HDMI 显示器,开机.
-
当 OSMC 设置完毕,插入一个USB设备,我打算里面放点视频.示范目的,我将使用 youtube-dl 程序下载两个视频.运行 youtube-dl OHF2xDrq8dY(彭博关于英国高新产业,包括树莓派,的首次介绍)还有, youtube-dl nAvZMgXbE9c ( CNet上排名前五的树莓派项目) .将它们下载到USB中,然后卸载移除设备.
-
将 USB 设备插入到 OSMC 树莓派.点击视频选项进入到外部设备
-
只要你能在树莓派中播放视频,那么恭喜你,你已经完成了本次练习.玩的愉快.
例二:随意打开目录中的视频的脚本
This example uses a script to shuffle-play videos from a directory on the Raspberry Pi. Depending on the videos and where it's installed, this could be a kiosk display. I wrote it to display videos while using indoor exercise equipment. 这个例子将使用一个脚本在树莓派目录中随机播放某个视频.不同的视频和安装位置,可能有不同的结果.写这个脚本用来展示视频.
- 设置树莓派引导 Raspbian Linux.连接到 HDMI 监视器
- 从 GitHub 上下载 "do-video"脚本.把它写入到树莓派中.
- 跟随安装指导.最主要的事情就是安装 omxplayer 包,它可以使用树莓派硬件安全,稳定地播放视频
- 在家目录的 "Videos" 下放一些视频
- 运行 do-video ,这样,应该就可以播放视频了
例三:读取GPS数据的脚本
这个例子更加深入,更有针对性.它展示了 Perl 怎么从外部设备中读取数据.在先前例子中出现的我的GitHub上 "Perl on Pi"有一个 gps-read.pl 脚本.它可以通过一系列端口从 GPS 读取 NMEA(国家海洋电子协会)的数据.页面还有教程,包括构建它所使用的AdaFruit Industries 部分,但是你可以使用任何能输出 NMEA 数据的 GPS
通过这些任务,我想你应该可以在树莓派上,像使用其他语言一样使用 Perl了.希望你喜欢.
作者简介:
Ian Kluft - 上学开始,Ian 就对喜欢编程和飞行.他一直致力于 Unix 的工作.内核发布后的六个月他转向了 Linux 的工作.他有计算机科学硕士学位,并且拥有 CSSLP资格证(认证规范开发流程专家),另一方面,他还是引航员,飞机的指令长.作为一个获得二十五认证的无线电爱好者,在近些年,他在一些电子设备上陆续做了实验,包括树莓派.
via: https://opensource.com/article/17/3/perl-raspberry-pi
作者:Ian Kluft 译者:Taylor1024 校对:校对者ID