Linux中國

在樹莓派中開啟激動人心的 Perl 之旅

我最近在 SVPerl (矽谷 Perl 聚會)談到在樹莓派上運行 Perl 語言的時候,有人問我,「我聽說樹莓派應該使用 Python ,是這樣嗎?」。我非常樂意回答他,這是個常見誤解。樹莓派可以支持任何語言: Python、Perl 和其他樹莓派官方軟體 Raspbian Linux 初始安裝的語言。

看似很厲害,其實很簡單。樹莓派的創造者英國的計算機科學教授 Eben Upton 曾經說過,樹莓派名字中的『派』(pi),是想為了聽起來像 Python,因為他喜歡這門語言。他選擇了這門語言作為孩子們的啟蒙語言。但是他和他的團隊做了一個通用計算機。開源軟體沒給樹莓派任何限制。我們想運行什麼就運行什麼,全憑自己心意。

我在 SVPerl 和這篇文章中還想講第二點,就是介紹我的 「PiFlash」 腳本。雖然它是用 Perl 寫的,但是不需要你有多了解 Perl 就可以在 Linux 下將樹莓派系統自動化燒錄到 SD 卡。這樣對初學者就比較友好,避免他們在燒錄 SD 卡時候,偶然擦除了整個硬碟。即使是高級用戶也可以從它的自動化工作中受益,包括我,這也是我開發這個工具的原因。在 Windows 和 Mac 下也有類似的工具,但是樹莓派網站沒有介紹類似工具給 Linux 用戶。不過,現在有了。

開源軟體早就有自己造輪子的傳統,因為他們總是崇尚「自癢自撓」去解決問題。這種方式在 Eric S 1997 年的論文和 1999 年的書籍《大教堂與集市》中早有提及,它定義了開源軟體的方法論。我也是為了滿足想我這樣的 Linux 用戶,所以寫了這個腳本。

下載系統鏡像

想要開啟樹莓派之旅,你首先需要為它下載一個操作系統。我們稱之為「系統鏡像」文件。一旦你把它下載到你的桌面、手提電腦,或者甚至是另一個樹莓派中,我就需要寫入或者稱之為「燒錄」進你的 SD卡。詳細情況可以看在線文件。手動做這件事情需要一些功底,你要把系統鏡像燒錄到整個 SD卡,而不是其中一塊分區。系統鏡像必須獨自包含至少一個分區,因為樹莓派引導需要一個 FAT32文件系統分區,系統引導這裡開始。除了引導分區,其他分區可以是操作系統內核支持的任何分區類型。

在大部分樹莓派中,我們都運行的是某些使用 Linux 內核的發行版。已經有一系列樹莓派中常用的系統鏡像你可以下載使用。(當然,沒什麼能阻止你自己造輪子)

樹莓派基金會向新手推薦的是「NOOBS」系統。它代表了 「New Out of the Box System」(新鮮出爐即開即用系統),顯然它好像聽起來像術語 「noob"」(小白),通俗點說就是 「newbie」(菜鳥)。NOOBS 是一個基於樹莓派的 Linux 系統,它會給你一個菜單可以在你的樹莓派上自動下載安裝幾個其它的系統鏡像。

Raspbian Linux 是 Debian Linux 發行版的樹莓派定製版。它是為樹莓派開發的正式 Linux 發行版,並且由樹莓派基金會維護。幾乎所有樹莓派驅動和軟體都會在 Raspbian 上先試用,然後才會放到其它發行版上。其默認安裝博客 Perl。

Ubuntu Linux (還有其社區版的 Ubuntu MATE)也將樹莓派作為其支持 ARM (Advanced RISC Machines)處理器的平台之一。RISC(Reduced Instruction Set Computer)Ubuntu 是一個 Debian Linux 的商業化支持的開源分支,它也使用 DEB 包管理器。Perl 也在其中。它僅僅支持 32 位 ARM7 或者 64 位 ARM8 處理器的樹莓派 2 和 3。ARM6 的樹莓派 1 和 Zero 從未被 Ubuntu 構建過程支持。

Fedora Linux 支持樹莓派2 ,而 Fedora 25 支持 3。 Fedora 是一個隸屬於紅帽(Red Hat)的開源項目。Fedora 是個基礎,商業版的 RHEL(Red Hat Enterprise Linux)在其上增加了商業軟體包和支持,所以其軟體像所有的兼容紅帽的發行版一樣來自 RPM(Red Hat Package Manager) 軟體包。就像其它發行版一樣,也包括 Perl。

RISC OS 是一個特別針對 ARM 處理器的單用戶操作系統。如果你想要一個比 Linux 系統更加簡潔的小型桌面(功能更少),你可以考慮一下。它同樣支持 Perl。

RaspBSD 是一個 FreeBSD 的樹莓派發行版。它是一個基於 Unix 的系統,而不是 Linux。作為開源 Unix 的一員,它延續了 Unix 的功能,而且和 Linux 有著眾多相似之處。包括有類似的開源軟體帶來的相似的系統環境,包括 Perl。

OSMC,即開源多媒體中心,以及 LibreElec 電視娛樂中心,它們都基於運行 Linux 內核之上的 Kodi 娛樂中心。它是一個小巧、特化的 Linux 系統,所以不要期望它能支持 Perl。

Microsoft Windows IoT Core 是僅運行在樹莓派3上的新成員。你需要微軟開發者身份才能下載。而作為一個 Linux 極客,我根本不看它。我的 PiFlash 腳本還不支持它,但如果你找的是它,你可以去看看。

PiFlash 腳本

如果你想看看樹莓派 SD 卡燒錄指導,你可以找到在 Windows 或者 Mac 系統下需要下載的工具來完成燒錄任務。但是對於 Linux 系統,只有一系列手工操作建議。我已經手工做過這個太多次,這很容易引發一個開發者的本能去自動化這個過程,這就是 PiFlash 腳本的起源。這有點難,因為 Linux 有太多方法可以配置,但是它們都是基於 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 報告和自行排錯時很有用。它就是我開發時用的。

下面的例子是我使用該腳本寫入仍是 zip 存檔的 Raspbian 鏡像到位於 /dev/mmcblk0 的 SD 卡:

piflash 2016-11-25-raspbian-jessie.img.zip /dev/mmcblk0

如果你已經指定了 /dev/mmcblk0p1 (SD 卡的第一分區),它會識別到這個分區不是一個正確的位置,並拒絕寫入。

在不同的 Linux 系統中怎樣去識別哪個設備是 SD 卡是一個技術活。像 mmcblk0 這種在我的筆記本上是基於 PCI 的 SD卡介面。如果我使用了 USB SD 卡介面,它就是 /dev/sdb,這在多硬碟的系統中不好區分。然而,只有少量的 Linux 塊設備支持 SD 卡。PiFlash 在這兩種情況下都會檢查塊設備的參數。如果全部失敗,它會認為可寫入、可移動的,並有著正確物理扇區數量的 USB 驅動器是 SD 卡。

我想這應該能涵蓋大部分情況。但是,如果你使用了我不知道的 SD 卡介面呢?我樂意看到你的來信。請在輸出信息中加上 --verbos --SDsearch 參數,以便讓我可以知道你系統目前的環境。理想情況下,如果 PiFlash 腳本可以被廣泛利用,我們可以構建一個開源社區去儘可能的幫助更多的樹莓派用戶。

樹莓派的 CPAN 模塊

CPAN(Comprehensive Perl Archive Network)是一個世界範圍內包含各種 Perl 模塊的的下載鏡像。它們都是開源的。大量 CPAN 中的模塊都是歷久彌堅。對於成千上百的任務,你不需要重複造輪子,只要利用別人已經發布的代碼就可以了。然後,你還可以提交你的新功能。

儘管樹莓派是個五臟俱全的 Linux 系統,支持大部分 CPAN 模塊,但是這裡我想強調一下專為樹莓派硬體開發的東西。一般來說它們都用在測量、控制、機器人方面的嵌入式系統中。你可以通過 GPIO (General-Purpose Input/Output)針腳將你的樹莓派連接到外部電子設備。

可以使用樹莓派 GPIO 針腳的模塊如下:Device::SMBusDevice::I2CRpi::PIGPIORpi::SPIRpi::WiringPiDevice::WebIO::RaspberryPIDevice::PiGlow。樹莓派支持的嵌入式模塊如下:UAV::Pilot::Wumpus::Server::Backend::RaspberryPiI2CRPI::DHT11(溫度/濕度)、RPI::HCSR04(超聲波)、App::RPI::EnvUIRPi::DigiPot::MCP4XXXXRPI::ADC::ADSDevice::PaPiRusDevice::BCM2835::Timer

例子

這裡有些我們在樹莓派上可以用 Perl 做的事情的例子。

例一:在 OSMC 使用 PiFlash 播放視頻

本例中,你將練習如何設置並運行使用 OSMC 操作系統的樹莓派。

  • RaspberryPi.Org 下載區,下載最新的 OSMC 版本。
  • 將空 SD 卡插入你的 Linux 電腦或者筆記本。樹莓派第一代是全尺寸的 SD 卡,除此以外都在使用 microSD,你也許需要一個通用適配器才能插入它。
  • 在插入前後分別運行 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 樹莓派。點擊視頻選項進入到外部設備。
  • 只要你能在樹莓派中播放視頻,那麼恭喜你,你已經完成了本次練習。玩的愉快。

例二:隨機播放目錄中的視頻的腳本

這個例子將使用一個腳本在樹莓派上的目錄中亂序播放視頻。根據視頻的不同和設備的擺放位置,這可以用作信息亭顯示的用途。我寫這個腳本用來展示室內體驗視頻。

  • 設置樹莓派引導 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 內核發布後的六個月他轉向了 Linux。他有計算機科學碩士學位,並且擁有 CSSLP 資格證(認證規範開發流程專家),另一方面,他還是引航員和認證的飛機指令長。作為一個超過二十五年的認證的無線電愛好者,在近些年,他在一些電子設備上陸續做了實驗,包括樹莓派。

via: https://opensource.com/article/17/3/perl-raspberry-pi

作者:Ian Kluft 譯者:Taylor1024 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國