Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

新玩具 NanoPi R2S/R4S
post by tommy @ 02 元月, 2022 08:54

由於家裡的其中一台 firewall 使用的 CompuLab 的 Intense-PC 這半年老是在執行 php script 時發生 coredump, 加上硬碟應該也有壞軌, smartd 每天都發信通知有問題, 所以想找機器來換掉它. 因為做的事不複雜, 也不需要太多的效能就能處理, 加上之前買來用的 Utilite 都能運作, 所以考慮買個雙網卡的耗能低小機器來處理就可以.

上淘寶找了一下, x86 的機器有兩個網卡的有 celeron 847 (跟那個 Intense-PC 一樣, 不過看起來多數都沒貨, 都改成比較新的 CPU 了) 跟 1037U, 還是 J1800/J1900. 而 arm based 的機器, 雖然因為樹梅派的關係, 比以往多了不少, 不過多數都還是只有一個網卡. 後來突然想到, 可能是找的方向不對, 改用 "軟路由" 去找, 果然除了一堆 J1800 的機器外, 也出現了 NanoPi 的 R2S 跟 R4S

比較了一下優缺點:

 

  • x86 的機器效能比較好, R2S/R4S 比較省電
  • x86 的機器有 VGA 可以接顯示器, R2S/R4S 只有 serial console 可以用
  • R2S/R4S 應該比較有可 "玩" 性, 如果買 x86 的機器, 可能直接硬碟複製一下就繼續使用了
  • R2S/R4S 比較便宜

 

最後決定買台 R2S 或 R4S 來玩. 不過要買比較便宜但只有 1G 記憶體的 R2S 還是比較貴, 但有 4G 記憶體的 R4S 呢? 後來為了怕被我玩壞, 乾脆各買一台回來試看看 (兩台加一起的錢跟一台 x86 的小機器差不多).
不過在玩過機器後, 如果目前讓我選, 應該只會選擇 R4S 就好, 理由如下:

 

  • R4S 的記憶體多了些
  • R4S 的速度快了一些
  • R4S 在同樣的環境下, 溫度比 R2S 少 8 度
  • 最重要的是, R2S 其中一個網卡是使用 USB 介面的 R8153B, 在比較重度的使用 (其實我覺得一點都不 "重度"), 會有網卡 timeout 的問題 (雖然會恢復, 但總會有突然頓一下的感覺)

 

買的時候, 建議也買個 USB2ART 的設備回來當 console 用, 不然在一開始安裝系統時, 會不太方便使用 (怕開機有問題看不到, 到時網路連不上, 很難找到問題).
不過 USB2ART 這東西, 因為樹梅派的關係, 台灣的拍賣網站也有一堆, 價差不會很大, 也可以在台灣買就好 (不過 R2S/R4S 價差很大, 建議直接由淘寶買比較划算). 

兩個都是使用 MicroSD 卡當儲存設備, 應該一般常見的 class 10 的卡就能用 (我是拿之前手機換下來的卡來用), 可能是有 cache 的關係, 實際使用並不會覺得 I/O 慢 (只有把系統複製過上去, 最後執行 sync 時會慢).
至於 rootfs 的製作, 可以參老這篇, 使用 debootstrap 的方式處理, 或者參考這篇, 使用 VM 的方式來處理.
使用 debootstrap 應該比較快, 不過如果習慣用 aptitude 來安裝軟體的話, 可能使用 VM 的方式會好一些, 因為在 x86-64 的 Debian 上用 chroot 的方式跑 arm/arm64 的環境時, 使用 aptitude 在最後執行安裝作業時, 常常有 coredump 的情形.

至於 bootloader/uboot 的部分, 可以由 friendlyarm 的 github 抓 source code 回來編譯, 也可以抓別人做好的直接用.
我是建議直接用 Armbian 做好的版本. R2S 可以用這個, R4S 可以用這個.

SD 卡的前 16MB 是用來放 bootloader/uboot 的, 所以分割區要由 16M 之後開始用, 第一個分區是建議用一個 ext4 的分區放 kernel 跟 ramdisk, 我自己是給 1G 的空間, 不然可能裝個幾個 kerne/ramdisk 就放不下了.
uboot 支援 extlinux 的方式載入 kernel 跟 ramdisk, 所以建一個 extlinux/extlinux.conf 來載入會比使用 uboot 的 script 容易些.
至於實際的 linux 分區, 可以用 ext4/f2fs/btrfs/xfs 都可以, 我習慣是用 lvm 搭配 xfs 來使用, 比較方便做 snapshot 來備份.

Kernel 可以抓 friendlyarm 的 github 上的 nanopi-r2-v5.10.y 分支來使用, R2S/R4S 可以共用相同的 kernel, 只不過 R2S 使用 rk3328-nanopi-r2-rev00.dtb, 而 R4S 使用 rk3399-nanopi-r4s.dtb.
上面的 kernel 是 5.10.60, 可以自己用 patch 到最新的 linux-5.10.y 分支 (使用 git 或抓 patch 檔回來都可以).

另外關於 R2S 的 R8153B 網卡, 用的是 r8152 這個驅動程式, 在我的機器上, 直接用上面 kernel 含的 v1.11.11 版本, 會抓不到網卡, 所以抓這個的 v2.15 回來用, 可以正常使用.
只不過這個網卡當成 LAN 使用時, 在透過 NFS 把系統備份到 NAS 上時, 會發生 timeout 的問題, 所以我就把 LAN 跟 WAN 互換來用.

網卡的名稱可以透過 udev 來改, 產生 /etc/udev/rules.d/70-persistent-net.rules 內容如下:

# R2S
# r8152 usb nic
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8152", NAME="ethext"
# rockchip built-in nic
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="rk_gmac-dwmac", NAME="ethint"

 

 如果是 R4S 的話, 內容如下:

# R4S
# r8169
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", NAME="ethint"
# rockchip built-in nic
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="rk_gmac-dwmac", NAME="ethext"

 

另外, R2S 的 r8152 網卡, 會在每次載入模組時, 重新設定 mac address, 如果需要固定的 mac address, 可以在 /etc/network/interfaces 中, 針對該網卡在 pre-up 時執行 ifconfig 去設定 mac address.
例如:

auto ethext
iface ethext inet static
address 192.168.1.1
netmask 255.255.255.0
pre-up ifconfig ethext hw ether 11:22:33:44:55:66

 

依據之前使用 Utilite 的經驗, arm linux 在搞定 uboot/kernel/rootfs 之後, 使用上與 x86 的 linux 並沒有什麼不同. 所以後面 linux 的部份也沒什麼好提了.

在系統安裝測試正常後, 要把鋁合金的外殼裝上, 就沒辦法把 serial console 接出來用了 (建議以後設計外殼時, 把 serial console 也接出來吧, 不然沒畫面輸出, 又沒 console 可以接, 有問題實在很不方便. 我一度還想找個電鑽來挖洞把接線出來用).

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 60 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS