<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>NanoPi on STARRY-S&#39; Blog</title>
    <link>https://blog.starry-s.moe/tags/nanopi/</link>
    <description>Recent content in NanoPi on STARRY-S&#39; Blog</description>
    <image>
      <title>STARRY-S&#39; Blog</title>
      <url>https://blog.starry-s.moe/web-app-manifest-512x512.png</url>
      <link>https://blog.starry-s.moe/web-app-manifest-512x512.png</link>
    </image>
    <generator>Hugo</generator>
    <language>zh</language>
    <copyright>2016 - 2026 STARRY-S | CC BY-NC-SA 4.0 | Hosted on GitHub Pages
</copyright>
    <lastBuildDate>Fri, 13 May 2022 00:32:40 +0800</lastBuildDate>
    <atom:link href="https://blog.starry-s.moe/tags/nanopi/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NanoPi R4S上手 &amp; 安装Arch Linux ARM</title>
      <link>https://blog.starry-s.moe/posts/2022/nanopi-r4s/</link>
      <pubDate>Fri, 13 May 2022 00:32:40 +0800</pubDate>
      <guid>https://blog.starry-s.moe/posts/2022/nanopi-r4s/</guid>
      <description>&lt;p&gt;前两天下单了个Nano Pi R4S，4G内存的版本。通常情况下这玩意别人都把他当软路由用，但是今天咱收到货后想了一会拍大腿一寻思这玩意不就是个ARM架构的小电脑嘛~&lt;/p&gt;
&lt;p&gt;所以咱暂时先不打算给这玩意装OpenWRT或 *WRT这类的路由器系统了，而是把它当成一个超小号的带俩网口的mini主机折腾。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>前两天下单了个Nano Pi R4S，4G内存的版本。通常情况下这玩意别人都把他当软路由用，但是今天咱收到货后想了一会拍大腿一寻思这玩意不就是个ARM架构的小电脑嘛~</p>
<p>所以咱暂时先不打算给这玩意装OpenWRT或 *WRT这类的路由器系统了，而是把它当成一个超小号的带俩网口的mini主机折腾。</p>
<meting-js server="netease" type="song" id="19563215" theme="#233333"></meting-js>
<h2 id="开箱">开箱</h2>
<p><img loading="lazy" src="images/nanopi_1.jpg" alt="&ldquo;USB 3.0、SD卡插槽以及三脚架接口&rdquo;" />
<p style="margin-bottom: -0.8em;" class="image-title">USB 3.0、SD卡插槽以及三脚架接口</p>
</p>
<p><img loading="lazy" src="images/nanopi_2.jpg" alt="&ldquo;供电接口和网口&rdquo;" />
<p style="margin-bottom: -0.8em;" class="image-title">供电接口和网口</p>
</p>
<p><img loading="lazy" src="images/nanopi_3.jpg" alt="&ldquo;正面&rdquo;" />
<p style="margin-bottom: -0.8em;" class="image-title">正面</p>
</p>
<h2 id="拆解">拆解</h2>
<p>咱收到货后第一件事就是找螺丝刀和塑料卡片把这漏油器拆开看看（</p>
<p><img loading="lazy" src="images/nanopi_7.jpg" alt="" />
<p style="margin-bottom: -0.8em;" class="image-title">主板正面</p>
</p>
<p>芯片的布局可以在<a href="https://www.friendlyelec.com/index.php?route=product/product&amp;product_id=284">R4S的商品页面</a>查到，<a href="https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R4S">官方Wiki</a>上也有更多关于R4S的介绍。</p>
<h2 id="arch-linux-arm">Arch Linux ARM</h2>
<p>在Arch Linux ARM (简称alarm) 官网上没找到对R4S的官方的支持，简单搜了一下armbian有对R4S的官方支持。</p>
<p>因为用惯了<strong>滚动更新</strong>发行版，所以不想用*bian系统，而*WRT系统的软件包相对其他发行版而言更少一些，系统也相当于被魔改过，所以除了做漏油器之外几乎干不了别的，所以这是我想安装Arch Linux的理由。</p>
<p>然后咱搜到了一篇给<a href="https://gist.github.com/larsch/a8f13faa2163984bb945d02efb897e6d">NanoPi R2S安装alarm的教程</a>，评论里有人提到了给R4S安装也是可以的。</p>
<p>所以咱大致把这个教程翻译一下，再修改一些R2S和R4S在安装时的区别。</p>
<p>以下内容需结合alarm的 <a href="https://archlinuxarm.org/platforms/armv8/generic">aarch64通用安装教程</a>食用，像更新pacman-key，ssh的密码之类的部分咱就不在这里重复了。</p>
<h3 id="准备sd卡">准备SD卡</h3>
<ol start="0">
<li>
<p>下载armbian的镜像，下载链接自行谷歌。</p>
<blockquote>
<p>通常下载好的文件是<code>xz</code>格式的压缩文件，需要使用<code>unxz</code>解压成<code>img</code>镜像。</p>
</blockquote>
</li>
<li>
<p>将armbian镜像的<code>bootloader</code>和<code>uboot</code>(32-32767区块的部分)用<code>dd</code>写到SD卡中：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="c1"># Clean the sector before 32</span>
</span></span><span class="line"><span class="cl"><span class="n">dd</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1</span><span class="n">M</span> <span class="n">count</span><span class="o">=</span><span class="mi">32</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Write uBoot and bootloader</span>
</span></span><span class="line"><span class="cl"><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">Armbian_</span><span class="o">*.</span><span class="n">img</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> <span class="n">skip</span><span class="o">=</span><span class="mi">31</span> <span class="n">seek</span><span class="o">=</span><span class="mi">31</span> <span class="n">bs</span><span class="o">=</span><span class="mi">512</span> <span class="n">count</span><span class="o">=</span><span class="mi">32736</span>
</span></span></code></pre></div><blockquote>
<p>其实可以直接用<code>dd</code>把armbian的整个镜像写到内存卡中然后插入R4S开机，第一次开机后他会自动重新给内存卡分区，然后只需把<code>/dev/sdX1</code>格式化成ext4就能安装alarm了。</p>
</blockquote>
</li>
<li>
<p>使用<code>fdisk</code>给内存卡分区并格式化文件系统</p>
<p>创建分区时先按<code>o</code>创建个MBR分区表，然后按<code>n</code>添加分区。第一个分区的起始区块(sector)需要设置为32768，通常情况下分一个区就够用了，或者你可以像我这样分俩区，一个给swap，不过实际没啥必要。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Disk /dev/mmcblk1: 29.72 GiB, 31914983424 bytes, 62333952 sectors
</span></span><span class="line"><span class="cl">Units: sectors of 1 * 512 = 512 bytes
</span></span><span class="line"><span class="cl">Sector size (logical/physical): 512 bytes / 512 bytes
</span></span><span class="line"><span class="cl">I/O size (minimum/optimal): 512 bytes / 512 bytes
</span></span><span class="line"><span class="cl">Disklabel type: dos
</span></span><span class="line"><span class="cl">Disk identifier: 0x33fc535e
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Device         Boot    Start      End  Sectors  Size Id Type
</span></span><span class="line"><span class="cl">/dev/mmcblk1p1         32768 53944319 53911552 25.7G 83 Linux
</span></span><span class="line"><span class="cl">/dev/mmcblk1p2      53944320 62333951  8389632    4G 82 Linux swap / Solaris
</span></span></code></pre></div><p>创建完分区后，把<code>root</code>分区<code>mkfs.ext4</code>格式化成ext4，swap分区用<code>mkswap</code>格式化。</p>
</li>
<li>
<p>解压alarm系统文件到root分区中</p>
</li>
<li>
<p>复制并替换armbian的<code>/boot</code>中的文件到新建分区的<code>/boot</code>文件夹中。</p>
</li>
<li>
<p>编辑<code>/boot/armbianEnv.txt</code>，更新<code>rootdev</code>的UUID
使用<code>blkid</code>或者<code>lsblk -o+UUID</code>可以查看UUID，注意是<strong>UUID</strong>不是PARTUUID。</p>
</li>
<li>
<p>插电，开机 (<del>此处不会出现五安大电牛</del>)，网线连接R4S的WAN口到路由器的LAN口，第一次开机需要生成SSH Key所以时间会久一些，然后就可以ssh到R4S上去辣。</p>
</li>
</ol>
<h3 id="内核">内核</h3>
<p>上述的安装步骤使用的armbian的内核，可以正常开机，但是想用Arch Linux stock aarch64内核的话，得替换一下DTB文件。（DTB文件是啥我目前还不清楚，如果后续弄明白了再更新到博客上吧）</p>
<ol>
<li>
<p>ssh到R4S中，安装<code>linux-aarch64</code>。</p>
</li>
<li>
<p>修改使用的DTB文件：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">cd /boot
</span></span><span class="line"><span class="cl">rm dtb
</span></span><span class="line"><span class="cl">ln -sf dtbs dtb
</span></span></code></pre></div><p>编辑<code>armbianEnv.txt</code>，在末尾添加一行<code>fdtfile=rockchip/rk3399-rockpro64.dtb</code>。</p>
<blockquote>
<p>在<code>/boot/dtb/rockchip</code>目录下是可以找到<code>rk3399-nanopi-r4s.dtb</code>文件的，但是目前用这个DTB的话会导致PCIE不能正常工作，导致LAN口无法使用。
<code>dmesg</code>的输出为：</p>
</blockquote>
<blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-prolog" data-lang="prolog"><span class="line"><span class="cl"><span class="s">dmesg</span> <span class="p">|</span> <span class="s">grep</span> <span class="s">pci</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">0.538310</span><span class="p">]</span> <span class="s">ehci</span><span class="o">-</span><span class="nn">pci</span><span class="p">:</span> <span class="nv">EHCI</span> <span class="nv">PCI</span> <span class="s">platform</span> <span class="s">driver</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">0.559708</span><span class="p">]</span> <span class="s">ohci</span><span class="o">-</span><span class="nn">pci</span><span class="p">:</span> <span class="nv">OHCI</span> <span class="nv">PCI</span> <span class="s">platform</span> <span class="s">driver</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">2.999933</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="s">pcie</span> <span class="s">f8000000</span><span class="p">.</span><span class="nn">pcie</span><span class="p">:</span> <span class="s">host</span> <span class="s">bridge</span> <span class="o">/</span><span class="s">pcie@f8000000</span> <span class="nn">ranges</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">2.999974</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="s">pcie</span> <span class="s">f8000000</span><span class="p">.</span><span class="nn">pcie</span><span class="p">:</span>      <span class="nv">MEM</span> <span class="mh">0x00fa000000</span><span class="p">.</span><span class="mf">.0</span><span class="s">x00fbdfffff</span> <span class="s">-&gt;</span> <span class="mh">0x00fa000000</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">2.999987</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="s">pcie</span> <span class="s">f8000000</span><span class="p">.</span><span class="nn">pcie</span><span class="p">:</span>       <span class="nv">IO</span> <span class="mh">0x00fbe00000</span><span class="p">.</span><span class="mf">.0</span><span class="s">x00fbefffff</span> <span class="s">-&gt;</span> <span class="mh">0x00fbe00000</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">3.000410</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="s">pcie</span> <span class="s">f8000000</span><span class="p">.</span><span class="nn">pcie</span><span class="p">:</span> <span class="s">no</span> <span class="s">vpcie12v</span> <span class="s">regulator</span> <span class="s">found</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">3.500881</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="s">pcie</span> <span class="s">f8000000</span><span class="p">.</span><span class="nn">pcie</span><span class="p">:</span> <span class="nv">PCIe</span> <span class="s">link</span> <span class="s">training</span> <span class="s">gen1</span> <span class="s">timeout</span><span class="p">!</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span>    <span class="mf">3.500944</span><span class="p">]</span> <span class="s">rockchip</span><span class="o">-</span><span class="nn">pcie</span><span class="p">:</span> <span class="s">probe</span> <span class="s">of</span> <span class="s">f8000000</span><span class="p">.</span><span class="s">pcie</span> <span class="s">failed</span> <span class="s">with</span> <span class="s">error</span> <span class="o">-</span><span class="mi">110</span>
</span></span></code></pre></div><p>于是就先用rockpro64的DTB文件了。</p>
</blockquote>
</li>
<li>
<p>创建uBoot镜像和initramfs。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pacman -S uboot-tools
</span></span><span class="line"><span class="cl">mkimage -A arm64 -T ramdisk -n uInitrd -d /boot/initramfs-linux.img /boot/uInitrd-initramfs-linux.img
</span></span><span class="line"><span class="cl">ln -sf /boot/uInitrd-initramfs-linux.img /boot/uInitrd
</span></span></code></pre></div><p>创建个<code>pacman</code>的钩子，在以后更新<code>linux-aarch64</code>的时候自动的重新构建uboot和initramfs。</p>
<p>在<code>mkdir -p /etc/pacman.d/hooks</code>目录下创建<code>/etc/pacman.d/hooks/initramfs.hook</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-pacmanconf" data-lang="pacmanconf"><span class="line"><span class="cl"><span class="k">[Trigger]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Operation</span> <span class="o">=</span> Install<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Operation</span> <span class="o">=</span> Upgrade<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Type</span> <span class="o">=</span> Package<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Target</span> <span class="o">=</span> linux-aarch64<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">
</span></span></span><span class="line"><span class="cl"><span class="k">[Action]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Description</span> <span class="o">=</span> Generate uInitrd<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Exec</span> <span class="o">=</span> /usr/bin/mkimage -A arm64 -T ramdisk -n uInitrd -d /boot/initramfs-linux.img /boot/uInitrd-initramfs-linux.img<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">When</span> <span class="o">=</span> PostTransaction<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Depends</span> <span class="o">=</span> uboot-tools<span class="err">
</span></span></span></code></pre></div></li>
<li>
<p>重启，<code>uname -a</code>输出的应该是新版本的内核了。</p>
<p>有个细节，用armbian的DTB文件时，开机后SYS LED灯是闪烁的，但是换到rockpro60的DTB文件后只有PWR灯长亮，别的灯都不闪了。</p>
</li>
</ol>
<h2 id="router">Router</h2>
<p>虽然装的是Arch Linux ARM系统，但是这并不代表它不能作为一个路由器使用。</p>
<p>系统默认用的是<code>systemd-networkd</code>管理网络，所以以下内容使用<code>systemd-networkd</code>配置路由器，暂时没遇到问题，如果不行的话我再换别的。</p>
<blockquote>
<p>参考: <a href="https://wiki.archlinux.org/title/Router">Router - ArchWiki</a></p>
</blockquote>
<h3 id="重命名网络接口">重命名网络接口</h3>
<blockquote>
<p>这一步并非必须，但是我有遇到重启系统后网口从<code>eth0</code>变成<code>eth1</code>的情况，所以还是给网口重命个名好一些。</p>
</blockquote>
<p>首先移除并备份<code>/etc/systemd/network</code>中原有的配置文件。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> /etc/systemd/network
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># backup config files</span>
</span></span><span class="line"><span class="cl">mv ./* /root/
</span></span></code></pre></div><p>获取WAN口的mac地址。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /sys/class/net/eth0/address
</span></span><span class="line"><span class="cl">12:34:56:78:90:ab
</span></span></code></pre></div><p>创建<code>10-extern0.link</code>，重命名<code>eth0</code>到<code>extern0</code>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-pacmanconf" data-lang="pacmanconf"><span class="line"><span class="cl"><span class="k">[Match]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">MACAddress</span><span class="o">=</span>12:34:56:78:90:ab<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">
</span></span></span><span class="line"><span class="cl"><span class="k">[Link]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Description</span><span class="o">=</span>WAN<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Name</span><span class="o">=</span>extern0<span class="err">
</span></span></span></code></pre></div><p>另一个网口(LAN)在开机时<code>systemd-networkd</code>会自动给他重命名为<code>enp1s0</code>。</p>
<h3 id="wan口配置dhcp客户端">WAN口配置DHCP客户端</h3>
<p>这里我是把R4S的WAN口接到另一台路由器的LAN上，所以配置的是DHCP客户端。如果你打算直接把路由器接光猫，而且你的猫设置了桥接，那么你可能需要配置PPPOE。</p>
<p>创建<code>20-extern0.network</code>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-pacmanconf" data-lang="pacmanconf"><span class="line"><span class="cl"><span class="k">[Match]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Name</span><span class="o">=</span>extern0<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">
</span></span></span><span class="line"><span class="cl"><span class="k">[Network]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">DHCP</span><span class="o">=</span>yes<span class="err">
</span></span></span></code></pre></div><h3 id="lan口配置静态ip和dhcp服务器">LAN口配置静态IP和DHCP服务器</h3>
<p>给LAN口设置成另一个网络的静态IP地址，并配置DHCP服务器，给连接到LAN口的机器分配同一个网络下的其他IP地址。</p>
<p>创建<code>20-enp1s0.network</code>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-pacmanconf" data-lang="pacmanconf"><span class="line"><span class="cl"><span class="k">[Match]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Name</span><span class="o">=</span>enp1s0<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">
</span></span></span><span class="line"><span class="cl"><span class="k">[Network]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">Address</span><span class="o">=</span>10.0.0.1/24<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">DHCPServer</span><span class="o">=</span>true<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">IPMasquerade</span><span class="o">=</span>both<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">
</span></span></span><span class="line"><span class="cl"><span class="k">[DHCPServer]</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">PoolOffset</span><span class="o">=</span>100<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">PoolSize</span><span class="o">=</span>100<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="na">EmitDNS</span><span class="o">=</span>yes<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="c1"># DNS=8.8.8.8</span><span class="err">
</span></span></span></code></pre></div><p>我这个配置是给LAN口设置了静态IP地址<code>10.0.0.1</code>，掩码<code>255.255.255.0</code>，启用了DHCP服务器，
设置了IPv4数据“伪装”(packets forwarded from the network interface will be appear as coming from the local host)。</p>
<p>有关配置文件的参数可以使用<code>man systemd.network</code>查询。</p>
<p>暂时还没搞懂怎么折腾IPv6，如果配置好IPv6的话我再补上……</p>
<h2 id="后续">后续</h2>
<p>之后咱装了JDK以及一堆我常用的小组件。为了测试性能，我把我以前备份的Minecraft服务器复制到R4S上跑了一下试试。我的服务器之前是在疼讯云学生主机上跑的(1核2G)，装了好多性能优化插件(lithium，phosphor，carpet&hellip;)，版本是1.16.4，抱着尝试的心态跑了一下这个服务器结果发现很流畅，一开始区块加载的时候CPU的6个核心全跑满，之后就恢复到正常水平了。刚才尝试了一下长时间的生成区块貌似没什么大的问题，只要别一直用鞘翅跑图就行，应该是内存够用了所以运行效果要好一些，不过单核性能来讲的话肯定还是X86吊打R4S的。</p>
<p>毕竟这就是半个巴掌大小的机器，跑MC的时候CPU温度才不到50度，应该不需要主动散热，功耗才十多瓦……</p>
<p><img loading="lazy" src="images/nanopi_performance.png" alt="&ldquo;MineCraft Server Performance&rdquo;" />
<p style="margin-bottom: -0.8em;" class="image-title">MineCraft Server Performance</p>
</p>
<p><img loading="lazy" src="images/nanopi_neofetch.png" alt="&ldquo;Arch Linux ARM&rdquo;" />
<p style="margin-bottom: -0.8em;" class="image-title">Arch Linux ARM</p>
</p>
<h2 id="参烤链接">参烤链接</h2>
<ul>
<li><a href="https://www.friendlyelec.com/index.php?route=product/product&amp;product_id=284">NanoPi R4S</a></li>
<li><a href="https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R4S">NanoPi R4S - FriendlyELEC WiKi</a></li>
<li><a href="https://gist.github.com/larsch/a8f13faa2163984bb945d02efb897e6d">Installing Arch Linux AArch64 on the NanoPi R2S</a></li>
<li><a href="https://archlinuxarm.org/platforms/armv8/generic">Generic AArch64 Installation | Arch Linux ARM</a></li>
<li><a href="https://wiki.archlinux.org/title/Router">Router - ArchWiki</a></li>
<li><a href="https://wiki.archlinux.org/title/Systemd-networkd">systemd-networkd - ArchWiki</a></li>
<li><a href="https://man.archlinux.org/man/systemd.network.5">systemd.network(5) — Arch manual pages</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/392619184">在 NanoPi R2S 上安装 Archlinuxarm - 知乎</a></li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>
