讓Mono 4在Raspberry Pi上飛

我才是銀古發表於2015-06-02

  最近公司有專案想要在樹莓派上做,代替原來的工控機(我們是把工控主機當作小的主機用,一臺小的工控主機最少也要600左右,而樹莓派只要200多)。於是,公司買了一個Raspberry Pi B+和一個Raspberry Pi 2 B,並要求能在B+上做就儘量用B+,原因很簡單,B+比Raspberry Pi 2要便宜70左右。拿到聞名已久的樹莓派之後很是興奮,試著從官網下載了官方推薦的映象raspbian,用Win32DiskImager燒錄到SD卡上,然後上電,起初螢幕上什麼都沒顯示,不管重新燒寫了多少次SD卡,螢幕都是黑的,後來發現原來螢幕是否顯示,是需要配置一下config.txt檔案裡面的一些引數螢幕才會顯示,我用的是HDMI接顯示器,所以只要把config.txt裡面跟HDMI有關的選項前面的#去掉就可以了。剩下的就比較簡單了,配置一下就可以用了,初始登入使用者是pi。
  本人用的比較熟的語言是C#,樹莓派上能用嗎?答案是肯定的,Mono 4是支援ARM裝置的,這就意味著樹莓派可以用C#寫程式,但問題來了,怎麼安裝Mono 4呢?如果你用官方的映象raspbian-wheezy,你會發現,通過apt-get怎麼都裝不上Mono 4,顯示缺少依賴項。於是,我想到有沒有其他可以用的映象,是不是映象的問題,wheezy是debian的上一個版本,debian當前的版本是jessie,那麼jessie(下載地址http://sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/)可以在樹莓派上用嗎?答案是可以,但是僅限於Raspberry Pi 2,因為jessie的ARM版系統是基於ARMv7的,Raspberry Pi 2是ARMv7的晶片,但是上一代的樹莓派都是ARMv6的晶片。我試了一下,在jessie的系統裡可以很輕鬆地安裝Mono 4,不過B+的板子要怎麼安裝Mono 4呢?看到jessie上可以安裝Mono 4,我想到了是不是找不到軟體源,既然raspbian是基於wheezy的,那我把wheezy的debian官方源加上試試,結果,兩個都不行。jessie確實可以裝啊,於是我就直接把jessie的軟體源加上了,結果是Raspberry Pi 2在raspbian上新增jessie源就可以順利的安裝Mono 4,而B+還是不行,原因很簡單,Mono 4是支援ARM裝置,但官方的軟體源只支援ARMv7架構,如果要想在B+上用,就只剩下一條路了,直接在樹莓派上編譯原始碼,Mono官方有教程,這裡簡單的貼一下程式碼:

wget http://download.mono-project.com/sources/mono/mono-4.0.1.44.tar.bz2
下載官方原始碼包
tar -xvf mono-4.0.1.44.tar.bz2
解壓
cd mono-4.0.1
切換路徑
./configure --prefix=/usr/local
配置編譯安裝路徑
make
編譯
make install
安裝

  這裡雖然只有幾行命令,但是中間的過程是極其緩慢的,B+編譯安裝完要8個小時,Raspberry Pi 2要3個小時……
  看到這個極其緩慢的過程,我肯定是不想再來第二回的,所以,我很想把它們做成安裝包,以後要用就直接安裝一下就可以了,不用漫長的編譯過程,找了很多辦法,走了很多彎路……很多彎路……真的很多彎路……
  ……
  終於讓我找到了一個可以比較簡單的製作安裝包的方法,就是用checkinstall,這是一個工具,需要提前用apt-get安裝,於是上面的程式碼需要修改一下:

wget http://download.mono-project.com/sources/mono/mono-4.0.1.44.tar.bz2
下載官方原始碼包
tar -xvf mono-4.0.1.44.tar.bz2
解壓
cd mono-4.0.1
切換路徑
./configure --prefix=/usr/local
配置編譯安裝路徑
make
編譯
checkinstall
將編譯後的檔案製作成deb安裝包,製作過程中有一些引數要設定,不想費神的話,就直接用預設值吧。

  折騰了兩天,終於達到了自己的目的,暮然回首,我的週末,我的六一,哎,這就是程式猿啊……
  最後,說一個小技巧,如果你也想不開要在樹莓派上編譯軟體,而且經過漫長的等待也編譯好了,但是突然不知道下一步該怎麼辦了,請注意,一定要把你當前的SD卡燒錄到IMG檔案裡,不管你以後想怎麼做,直接燒寫一遍SD卡就行了,不用再經歷漫長的等待,這可是血的教訓!
  最後的最後當然是做點好事,把我編譯好的安裝包分享出來,親測可用哦!
  ARMv6(B+) : http://yunpan.cn/cw6NYzXkD9kHq 訪問密碼 63ae
  ARMv7(Raspberry Pi 2) : http://yunpan.cn/cw6NMKUztiSDu 訪問密碼 4efb

  (PS:我測試Mono是否正常執行是用的Jexus,如果能正常執行Jexus就認為是可以了,剛開始弄出了一版,mono -V有反應,csharp指令也可以用,但是因為編譯路徑問題,Jexus執行不了,於是折騰很久,最終可以正常執行Jexus了,Jexus怎麼用我就不說了,宇內大神做的很簡潔,直接看官網就可以了,http://www.jexus.org/)

相關文章