Difference between revisions of "How to Build FriendlyWrt"

From FriendlyELEC WiKi
Jump to: navigation, search
(Get Source Code)
(updated by API)
 
(43 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
 
==Introduction to FriendlyWrt==
 
==Introduction to FriendlyWrt==
FriendlyWrt is a customized OpenWrt system developed by FriendlyElec. It is open source and suitable for applications in IoT, NAS and smart home gateways and etc.<br />
+
FriendlyWrt is a customized OpenWrt system developed by FriendlyElec. It is open source and suitable for applications in IoT, NAS and etc.<br />
  
 
==User Name & Password==
 
==User Name & Password==
User name: root<br />
+
No password set default, please configure a root password to protect the web interface and enable SSH.
Password: fa<br />
+
<br />
+
Note: some systems don't need passwords
+
  
 
==Supported FriendlyElec Boards==
 
==Supported FriendlyElec Boards==
Line 14: Line 11:
 
|-
 
|-
 
   | '''OS'''
 
   | '''OS'''
 +
  | '''Version'''
 
   | '''Supported Board Types'''
 
   | '''Supported Board Types'''
 
   | '''Image File'''
 
   | '''Image File'''
 
   | '''Download Link'''
 
   | '''Download Link'''
 
|-
 
|-
   | FriendlyWRT for H3
+
   | FriendlyWrt for H3
   | NanoPi-R1, NanoPi-NEO, NanoPi-NEO-Air,  <br />NanoPi-M1, ZeroPi, NanoPi-NEO-S,  <br />NanoPi-NEO-Core, NanoPi-M1-Plus, NanoPi-Duo2
+
   | 19.07.1
 +
  | NanoPi-R1S, NanoPi-R1, NanoPi-NEO, NanoPi-NEO-Air,  <br />NanoPi-M1, ZeroPi, NanoPi-NEO-S,  <br />NanoPi-NEO-Core, NanoPi-M1-Plus, NanoPi-Duo2
 
   | nanopi-r1_sd_friendlywrt_4.14_armhf_YYYYMMDD.img.zip
 
   | nanopi-r1_sd_friendlywrt_4.14_armhf_YYYYMMDD.img.zip
   | [http://download.friendlyarm.com/nanopir1 H3 Download Link]
+
   | [http://download.friendlyelec.com/nanopir1 H3 Download Link]
 
|-
 
|-
   | FriendlyWRT for H5
+
   | FriendlyWrt for H5
 +
  | 19.07-snapshot
 
   | NanoPi-NEO2,NanoPi-K1-Plus,NanoPi-NEO-Core2
 
   | NanoPi-NEO2,NanoPi-K1-Plus,NanoPi-NEO-Core2
 
   | nanopi-neo-core2_sd_friendlywrt_4.14_arm64_YYYYMMDD.img.zip
 
   | nanopi-neo-core2_sd_friendlywrt_4.14_arm64_YYYYMMDD.img.zip
   | [http://download.friendlyarm.com/nanopineocore2 H5 Download Link]
+
   | [http://download.friendlyelec.com/nanopineocore2 H5 Download Link]
 
|-
 
|-
   | FriendlyWRT for S5P4418
+
   | FriendlyWrt for S5P4418
 +
  | 19.07-snapshot
 
   | NanoPi-Fire2A, NanoPC-T2, NanoPi-S2,  <br />NanoPi-M2A, Smart4418
 
   | NanoPi-Fire2A, NanoPC-T2, NanoPi-S2,  <br />NanoPi-M2A, Smart4418
 
   | s5p4418-sd-friendlywrt-4.4-YYYYMMDD.img.zip
 
   | s5p4418-sd-friendlywrt-4.4-YYYYMMDD.img.zip
   | [http://download.friendlyarm.com/nanopct2 S5P4418 Download Link]
+
   | [http://download.friendlyelec.com/nanopct2 S5P4418 Download Link]
 
|-
 
|-
   | FriendlyWRT for S5P6818
+
   | FriendlyWrt for S5P6818
 +
  | 19.07-snapshot
 
   | NanoPi-Fire3, NanoPC-T3, Smart6818
 
   | NanoPi-Fire3, NanoPC-T3, Smart6818
 
   | s5p6818-sd-friendlywrt-4.4-YYYYMMDD.img.zip
 
   | s5p6818-sd-friendlywrt-4.4-YYYYMMDD.img.zip
   | [http://download.friendlyarm.com/nanopct3 S5P6818 Download Link]
+
   | [http://download.friendlyelec.com/nanopct3 S5P6818 Download Link]
 
|-
 
|-
   | FriendlyWRT for RK3399
+
   | FriendlyWrt for RK3399
   | NanoPi-M4, NanoPC-T4, NanoPi-NEO4, Som-RK3399
+
   | 21.02.5 / 23.05
   | rk3399-sd-friendlywrt-4.4-YYYYMMDD.img.zip
+
  | All FriendlyElec's RK3399 based boards, including NanoPi-M4v2, NanoPi-M4B, Som-RK3399
   | [http://download.friendlyarm.com/nanopct4 RK3399 Download Link]
+
   | rk3399-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip
 +
   | [http://download.friendlyelec.com/nanopct4 RK3399 Download Link]
 +
|-
 +
  | FriendlyWrt for RK3328
 +
  | 21.02.5 / 23.05
 +
  | NanoPi-R2S, NanoPi-R2C, NanoPi-R2C-Plus
 +
  | rk3328-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip
 +
  | [http://download.friendlyelec.com/nanopir2s RK3328 Download Lin]
 +
|-
 +
  | FriendlyWrt for RK3568
 +
  | 21.02.5 / 23.05
 +
  | NanoPi-R5S
 +
  | rk3568-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip
 +
  | [http://download.friendlyelec.com/nanopir5s RK3568下载链接]
 +
|-
 +
  | FriendlyWrt for RK3588
 +
  | 21.02.5 / 23.05
 +
  | NanoPi-R6S
 +
  | rk3588-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip
 +
  | [http://download.friendlyelec.com/nanopir6s RK3588下载链接]
 
|}
 
|}
 
How to test the image: extract the image file, use the "dd" command under Linux or the win32image utility under Windows to flash the image to an SD card.
 
How to test the image: extract the image file, use the "dd" command under Linux or the win32image utility under Windows to flash the image to an SD card.
Line 49: Line 70:
 
Firstly you need to install the repo utility:
 
Firstly you need to install the repo utility:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://github.com/friendlyarm/repo
+
git clone https://github.com/friendlyarm/repo --depth 1
cp repo/repo /usr/bin/
+
sudo cp repo/repo /usr/bin/
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
===Download Source Code===
 
===Download Source Code===
 
There are two ways to obtain the source code. For mainland Chinese users the first is recommended:
 
There are two ways to obtain the source code. For mainland Chinese users the first is recommended:
Line 68: Line 90:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
====方法二:直接从github下载完整的源代码====
+
====Two: Get Source Code from Github====
=====H3平台=====
+
=====H3 Based Boards=====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
mkdir friendlywrt-h3
 
mkdir friendlywrt-h3
 
cd friendlywrt-h3
 
cd friendlywrt-h3
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m h3.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
+
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.1 -m h3.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
=====H5平台=====
+
=====H5 Based Boards=====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
mkdir friendlywrt-h5
 
mkdir friendlywrt-h5
 
cd friendlywrt-h5
 
cd friendlywrt-h5
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m h5.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
+
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
 +
        -m h5.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
=====S5P4418平台=====
+
=====S5P4418 Based Boards=====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
mkdir friendlywrt-s5p4418
 
mkdir friendlywrt-s5p4418
 
cd friendlywrt-s5p4418
 
cd friendlywrt-s5p4418
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m s5p4418.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
+
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
 +
        -m s5p4418.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
=====S5P6818平台=====
+
=====S5P6818 Based Boards=====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
mkdir friendlywrt-s5p6818
 
mkdir friendlywrt-s5p6818
 
cd friendlywrt-s5p6818
 
cd friendlywrt-s5p6818
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m s5p6818.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
+
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
 +
        -m s5p6818.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
repo sync -c  --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
=====RK3399平台=====
+
=====RK3399 Based Boards=====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir friendlywrt-rk3399
+
mkdir friendlywrt23-rk3399
cd friendlywrt-rk3399
+
cd friendlywrt23-rk3399
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
+
git clone https://github.com/friendlyarm/repo --depth 1 tools
repo sync -c  --no-clone-bundle
+
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
 +
        -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 +
tools/repo sync -c  --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
=====RK3328 Based Boards=====
====同步项目到最新版本====
+
<syntaxhighlight lang="bash">
 +
mkdir friendlywrt23-rk3328
 +
cd friendlywrt23-rk3328
 +
git clone https://github.com/friendlyarm/repo --depth 1 tools
 +
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
 +
        -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 +
tools/repo sync -c  --no-clone-bundle
 +
</syntaxhighlight>
 +
=====RK3568 Based Boards=====
 +
<syntaxhighlight lang="bash">
 +
mkdir friendlywrt23-rk3568
 +
cd friendlywrt23-rk3568
 +
git clone https://github.com/friendlyarm/repo --depth 1 tools
 +
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
 +
        -m rk3568.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 +
tools/repo sync -c  --no-clone-bundle
 +
</syntaxhighlight>
 +
=====RK3588 Based Boards=====
 +
<syntaxhighlight lang="bash">
 +
mkdir friendlywrt23-rk3588
 +
cd friendlywrt23-rk3588
 +
git clone https://github.com/friendlyarm/repo --depth 1 tools
 +
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
 +
        -m rk3588.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
 +
tools/repo sync -c  --no-clone-bundle
 +
</syntaxhighlight>
 +
====Get Latest Release With "Sync"====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
repo sync -c --no-clone-bundle
 
repo sync -c --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
同步过程中,由于网络原因出现中断,可以使用下面脚本同步代码:
+
If synchronization is interrupted you can run the following script to do sync again:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
#! /bin/bash
 
#! /bin/bash
Line 119: Line 172:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
====同一份代码,切换到其他平台====
+
====Swtich To Different Platform====
比如已有H3平台的代码,现在要开发H5平台,可以用以下命令,好处是可以减少网络下载:
+
If you have been working on the source code for Allwinner H3's boards and want to swtich to the source code for Allwinner H5's boards you can do it this way:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cp -af friendlywrt-h3 friendlywrt-h5
 
cp -af friendlywrt-h3 friendlywrt-h5
Line 128: Line 181:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==如何编译==
+
==Compile Source Code==
===搭建编译环境===
+
===Setup Development Environment===
在PC的Ubuntu系统下 (建议使用版本18.04-64bit),执下以下命令安装所需的软件:
+
You need a host PC running a 64-bit Ubuntu 20.04 system and run the following command on the PC:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash
 
wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===查看帮助===
+
===Build buildroot in Docker container===
不带参数执行 build.sh,默认是打印帮助信息:
+
Please use the Docker image provided by this link, for details, please refer to the README document:<br />
 +
https://github.com/friendlyarm/docker-cross-compiler-novnc<br />
 +
 
 +
===Get Help Info===
 +
Run the build.sh script without any options it will print the help information:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
./build.sh  
 
./build.sh  
 
</syntaxhighlight>
 
</syntaxhighlight>
显示的帮助信息如下 (以H3平台为例):
+
Let's take Allwinner H3 as an example, the help information will be presented as follows:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
USAGE: ./build.sh <parameter>
 
USAGE: ./build.sh <parameter>
  
# 选择目标的硬件平台:
+
# Select Board Type:
 
   ./build.sh nanopi_r1.mk
 
   ./build.sh nanopi_r1.mk
 
   ./build.sh nanopi_duo.mk
 
   ./build.sh nanopi_duo.mk
Line 154: Line 211:
 
   ./build.sh nanopi_neo_air.mk
 
   ./build.sh nanopi_neo_air.mk
  
# 编译各个模块:
+
# Select Module:
   ./build.sh all                -编译所有组件
+
   ./build.sh all                -compile all
   ./build.sh uboot              -单独编译uboot
+
   ./build.sh uboot              -compile uboot
   ./build.sh kernel            -单独编译kernel
+
   ./build.sh kernel            -compile kernel
   ./build.sh friendlywrt        -单独编译friendlywrt
+
   ./build.sh friendlywrt        -compile friendlywrt
   ./build.sh sd-img            -生成sd启动的镜像文件
+
   ./build.sh sd-img            -generate an image for an sd card
   ./build.sh emmc-img          -生成用于安装到emmc的镜像文件 (镜像文件需要dd到sd卡,通过sd卡启动安装程序)
+
   ./build.sh emmc-img          -generate an image for emmc (the generated image should be flased to an SD card and then flashed to emm with this SD card)
# 清理:
+
# Clean:
 
   ./build.sh cleanall
 
   ./build.sh cleanall
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===全自动方式编译===
+
===Auto Compile===
初次编译,需要选择目标的硬件平台,以H3平台的R1为例:
+
For a first time compilation you need to select an SoC platform. Let's take the NanoPi R1(Allwinner H3) as an example:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
./build.sh nanopi_r1.mk
 
./build.sh nanopi_r1.mk
 
</syntaxhighlight>
 
</syntaxhighlight>
执行上述命令,会自动编译所有组件,其中包括u-boot, kernel 和 friendlywrt,并生成sd启动的烧写镜像文件。
+
After the script is done successfully all components including a u-boot, a kernel and a friendlywrt will be compiled, and an image file will be generated.
  
===编译单独的模块===
+
===Compile Individual Component===
 
====kernel====
 
====kernel====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 182: Line 239:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
====FriendlyWrt====
 
====FriendlyWrt====
 +
method 1:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
./build.sh friendlywrt
 
./build.sh friendlywrt
 
</syntaxhighlight>
 
</syntaxhighlight>
===生成sdcard固件===
+
method 2:
 +
<syntaxhighlight lang="bash">
 +
cd friendlywrt
 +
./scripts/feeds update -a
 +
./scripts/feeds install -a
 +
cp ../configs/config_XXXX .config
 +
make defconfig
 +
make download -j8
 +
make -j8
 +
</syntaxhighlight>
 +
===Generate Image for SD Card===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo ./build.sh sd-img
 
sudo ./build.sh sd-img
 
</syntaxhighlight>
 
</syntaxhighlight>
打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:<br />
+
If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
Run the following for sdcard install:
 
Run the following for sdcard install:
 
     sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_sd.img bs=1M of=/dev/sdX
 
     sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_sd.img bs=1M of=/dev/sdX
 
</syntaxhighlight>
 
</syntaxhighlight>
===生成emmc (eflasher) 固件===
+
===Generate emmc (eflasher) Image===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo ./build.sh emmc-img
 
sudo ./build.sh emmc-img
 
</syntaxhighlight>
 
</syntaxhighlight>
打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:<br />
+
If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
Run the following for sdcard install:
 
Run the following for sdcard install:
 
     sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_eflasher.img bs=1M of=/dev/sdX
 
     sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_eflasher.img bs=1M of=/dev/sdX
 
</syntaxhighlight>
 
</syntaxhighlight>
用此sd卡启动eflasher系统,执行eflasher命令,将系统写入emmc,之后就可以拨掉sd卡,从emmc启动friendlywrt了。
+
Use this SD card to boot the eflasher system and run eflasher commands to install an OS to emmc. After installation is done, take off the SD card of the board and boot your system friendlywrt will load from eMMC.
==friendlywrt定制与开发==
+
 
===源代码目录结构===
+
==Make Your Own Friendlywrt==
 +
===Structure of Source Code Directories===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
├── friendlywrt
 
├── friendlywrt
│  ├── friendlywrt -> friendlywrt源代码
+
│  ├── friendlywrt -> friendlywrt's source code
|   └── configs -> 保存预设好的friendlywrt defconfig文件
+
  └── configs -> save the "friendlywrt defconfig" file
|   └── toolchain -> 交叉编译器,仅用于编译u-boot与kernel
+
  └── toolchain -> cross-compiler, used for compiling a u-boot and kernel
│  ├── build.sh -> 全自动编译脚本
+
│  ├── build.sh -> script for auto-compile
│  ├── device/friendlyelec -> 用于适配友善电子开发板的相关文件
+
│  ├── device/friendlyelec -> configuration file for friendlyelec boards
│  ├── kernel -> 内核
+
│  ├── kernel -> kernel
 
│  └── u-boot -> u-boot
 
│  └── u-boot -> u-boot
│  └── scripts -> 打包img的相关脚本
+
│  └── scripts -> script files for generating an img
 
</syntaxhighlight>
 
</syntaxhighlight>
===配置friendlywrt的软件包===
+
 
* 使用make menuconfig更改配置 (以h3为例)
+
===Configure friendlywrt Components===
 +
* Configure by Using Make Menuconfig(H3)
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd friendlywrt-h3/friendlywrt
 
cd friendlywrt-h3/friendlywrt
 
make menuconfig
 
make menuconfig
 
</syntaxhighlight>
 
</syntaxhighlight>
* 另存你个人的软件包配置
+
* Save Your Configurations
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
make menuconfig
 
make menuconfig
 
./scripts/diffconfig.sh > ../configs/my_config
 
./scripts/diffconfig.sh > ../configs/my_config
 
</syntaxhighlight>
 
</syntaxhighlight>
* 让以后的编译使用你的friendlywrt配置
+
* Set Your Configurations As Default
以NanoPi-R1为例,编辑以下文件:
+
Let's take the NanoPi-R1 as an example and edit the following file:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
device/friendlyelec/h3/nanopi_r1.mk
 
device/friendlyelec/h3/nanopi_r1.mk
 
</syntaxhighlight>
 
</syntaxhighlight>
将TARGET_FRIENDLYWRT_CONFIG的值改为你的配置。
+
Set TARGET_FRIENDLYWRT_CONFIG to your configurations.
* 重新编译friendlywrt并制成sd启动镜像
+
* Recompile Friendlywrt and Generate Image for SD Card
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
./build.sh friendlywrt
 
./build.sh friendlywrt
Line 240: Line 310:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===固化个人文件到friendlywrt===
+
===Put Your Add-on Features to Friendlywrt===
以H3平台为例, 将文件或目录放入以下目录即可,打包img时会把它们都打包进去:
+
Let's take H3 as an example. Put your files and directories to the following directory and they will be compiled to an img file.
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
device/friendlyelec/h3/common-files
 
device/friendlyelec/h3/common-files
 
</syntaxhighlight>
 
</syntaxhighlight>
也可以放在新建的目录里,以NanoPi-R1为例,然后编辑以下文件:
+
Or you can put your files and directories in a new directory. Let's take the NanoPi-R1 as an example and edit the following file:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
device/friendlyelec/h3/nanopi_r1.mk
 
device/friendlyelec/h3/nanopi_r1.mk
 
</syntaxhighlight>
 
</syntaxhighlight>
在文件中新增一行 (XXX替换为你的目录名):
+
Open the file and add a new line(replace "XXX" with your directory):
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
FRIENDLYWRT_FILES+=(device/friendlyelec/h3/XXX)
 
FRIENDLYWRT_FILES+=(device/friendlyelec/h3/XXX)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===修改friendlywrt系统的默认配置(如网络、防火墙等)===
+
===Change Friendlywrt's Default Configurations(Network, Firewall Etc)===
编辑如下目录中的文件:
+
Open and edit the following files:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
device/friendlyelec/h3/default-settings/files
 
device/friendlyelec/h3/default-settings/files
Line 261: Line 331:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===更改u-boot和kernel配置 (以H3为例)===
+
===Change U-boot and Kernel's Configurations(H3)===
同样是编辑如下文件:
+
Open and edit the following file:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
device/friendlyelec/h3/nanopi_r1.mk
 
device/friendlyelec/h3/nanopi_r1.mk
 
</syntaxhighlight>
 
</syntaxhighlight>
可通过以下设置,将uboot的配置改为你自已的:
+
Change uboot's settings to your own by making the following changes:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
TARGET_UBOOT_CONFIG=nanopi_h3_defconfig
 
TARGET_UBOOT_CONFIG=nanopi_h3_defconfig
 
</syntaxhighlight>
 
</syntaxhighlight>
可通过以下设置,将kernel的配置改为你自已的:
+
Change kernel's settings to your own by making the following changes:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
TARGET_KERNEL_CONFIG=sunxi_defconfig
 
TARGET_KERNEL_CONFIG=sunxi_defconfig
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===更换其他源代码===
+
===Change Other COnfigurations===
编辑如下 xml 文件,即可替换 kernel 、uboot以及friendlywrt的源代码:
+
Open and edit the following xml file and you can replace the source code of kernel, uboot and friendlywrt yo your own code:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
.repo/manifests/h3.xml
 
.repo/manifests/h3.xml
 
</syntaxhighlight>
 
</syntaxhighlight>
想了解 xml 文件各个节点的含义和用法,请参考:[https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/manifest-format.md repo Manifest Format]<br />
+
For more details about what each item in the xml file means, refer to:[https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/manifest-format.md repo Manifest Format]<br />
编辑完成后,需要用 repo 命令同步一下,比如更换了 kernel 的源代码,用以下命令同步一次:
+
After you make your changes you need to do "repo" to sync and make the changes effective. For example after you change the kernel's source code you need to run the following command to sync:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
repo sync --force-sync kernel
 
repo sync --force-sync kernel
 
</syntaxhighlight>
 
</syntaxhighlight>
同步后单独重新内核即可:
+
After synchronization you just need to recompile the kernel's source code:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
./build.sh kernel
 
./build.sh kernel
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
===Repacking firmware after editing===
 +
After compiling FriendlyWrt, you can get a copy of the filesystem contents (directory named rootfs) with the following command:
 +
<syntaxhighlight lang="bash">
 +
export KEEP_CACHE=1
 +
./build.sh sd-img
 +
cd scripts/sd-fuse
 +
rm -rf ./rootfs
 +
cp -r out/rootfs.* ./rootfs
 +
</syntaxhighlight>
 +
Repacking firmware after editing:
 +
<syntaxhighlight lang="bash">
 +
./build-rootfs-img.sh $PWD/rootfs friendlywrt
 +
./mk-sd-image.sh friendlywrt
 +
</syntaxhighlight>
 +
 +
== Tips ==
 +
===Visit FriendlyWrt management page===
 +
Enter http://friendlywrt/ or the IP address on the computer browser to enter the FriendlyWrt management page. By default, the IP address of the LAN port is 192.168.2.1, and the WAN will dynamically obtain an IP address from your main router.
 +
<!--
 +
==Enable swap===
 +
<syntaxhighlight lang="bash">
 +
/etc/enable-swap.sh
 +
reboot
 +
</syntaxhighlight>
 +
-->
 +
 +
===mount smbfs resource===
 +
<syntaxhighlight lang="bash">
 +
mount -t cifs //192.168.1.10/shared /movie -o username=xxx,password=yyy,file_mode=0644
 +
</syntaxhighlight>
 +
 +
==Common Issues and Tips==
 +
* When you compile a source code under Ubuntu you cannot do it as root and you need to do it as a non-root user
 +
* Compilation in VNC may not succeed
  
==常见问题及注意事项==
+
==Resources==
* Ubuntu下不能使用 root 用户来编译,需要使用普通用户
+
[https://source.android.com/setup/develop/repo repo guidance]<br />
* 在 vnc 环境下编译可能会编译失败
+
  
==参考资料==
+
==Report bug==
[https://source.android.com/setup/develop/repo repo使用指南]<br />
+
Please mail-to:techsupport@friendlyarm.com<br />
  
==更新日志==
+
==Update Log==
===2019-08-28===
+
===2023-10-25===
* 首次发布
+
* Rockchip platform: upgrade FriendlyWrt to 23.05
 +
===2021-10-29===
 +
* RK33xx platform: upgrade FriendlyWrt to 21.02.1, features are basically the same as 19.07.5, support docker, usb wifi, etc.
 +
===2021-08-31===
 +
* Add a high-speed 5G USB WiFi support, the network card model is Comfast CF-WU782AC V2, the chip model is MediaTek MT7662
 +
* Improved USB WiFi compatibility
 +
* Improved PWM fan support (RK3399 platform), fan controlled by kernel drive, temperature control support(Please search for "PWM fans" on the R4S WiKi page for details)
 +
* Improved stability on first boot (previous version, bpfilter error occurred in some cases on first boot)
 +
===2021-01-14===
 +
====RK3328 FriendlyWrt:====
 +
* RK3328 FriendlyWrt has been updated to the official stable version 19.07.5
 +
===2020-12-24===
 +
* RK3399 FriendlyWrt has been updated to the official stable version 19.07.5, which provides two versions of the kernel:
 +
** Mainline kernel-5.10 for NanoPi-R4S, NanoPC-T4, NanoPC-M4v1, NanoPi-NEO4
 +
** Rockchip kernel-4.19 for All FriendlyElec's RK3399 based boards
 +
===2020-02-20===
 +
* Optimized openssl performance<br />
 +
* Added support for PWM fan, support fan speed control (platform: rk33xx)<br />
 +
===2019-09-06===
 +
* Released English version

Latest revision as of 16:33, 26 October 2023

查看中文

1 Introduction to FriendlyWrt

FriendlyWrt is a customized OpenWrt system developed by FriendlyElec. It is open source and suitable for applications in IoT, NAS and etc.

2 User Name & Password

No password set default, please configure a root password to protect the web interface and enable SSH.

3 Supported FriendlyElec Boards

OS Version Supported Board Types Image File Download Link
FriendlyWrt for H3 19.07.1 NanoPi-R1S, NanoPi-R1, NanoPi-NEO, NanoPi-NEO-Air,
NanoPi-M1, ZeroPi, NanoPi-NEO-S,
NanoPi-NEO-Core, NanoPi-M1-Plus, NanoPi-Duo2
nanopi-r1_sd_friendlywrt_4.14_armhf_YYYYMMDD.img.zip H3 Download Link
FriendlyWrt for H5 19.07-snapshot NanoPi-NEO2,NanoPi-K1-Plus,NanoPi-NEO-Core2 nanopi-neo-core2_sd_friendlywrt_4.14_arm64_YYYYMMDD.img.zip H5 Download Link
FriendlyWrt for S5P4418 19.07-snapshot NanoPi-Fire2A, NanoPC-T2, NanoPi-S2,
NanoPi-M2A, Smart4418
s5p4418-sd-friendlywrt-4.4-YYYYMMDD.img.zip S5P4418 Download Link
FriendlyWrt for S5P6818 19.07-snapshot NanoPi-Fire3, NanoPC-T3, Smart6818 s5p6818-sd-friendlywrt-4.4-YYYYMMDD.img.zip S5P6818 Download Link
FriendlyWrt for RK3399 21.02.5 / 23.05 All FriendlyElec's RK3399 based boards, including NanoPi-M4v2, NanoPi-M4B, Som-RK3399 rk3399-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip RK3399 Download Link
FriendlyWrt for RK3328 21.02.5 / 23.05 NanoPi-R2S, NanoPi-R2C, NanoPi-R2C-Plus rk3328-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip RK3328 Download Lin
FriendlyWrt for RK3568 21.02.5 / 23.05 NanoPi-R5S rk3568-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip RK3568下载链接
FriendlyWrt for RK3588 21.02.5 / 23.05 NanoPi-R6S rk3588-sd-friendlywrtNN-6.1-YYYYMMDD.img.zip RK3588下载链接

How to test the image: extract the image file, use the "dd" command under Linux or the win32image utility under Windows to flash the image to an SD card.

4 Get Source Code

4.1 Install repo

Firstly you need to install the repo utility:

git clone https://github.com/friendlyarm/repo --depth 1
sudo cp repo/repo /usr/bin/

4.2 Download Source Code

There are two ways to obtain the source code. For mainland Chinese users the first is recommended:

4.2.1 One: Use Repo Package from FriendlyElec's Cloud Storage

The source files are located at the "sources/friendlywrt-CPU-YYYYMMDD.tar" directory in FriendlyElec's cloud storage. "CPU" stands for an SoC model and YYYYMMDD stands for date(the year, month and day) in which the package is packed.
After you get a repo package run the following command to extract it. Let's take an image for Allwinner H3 based boards as an example:

tar xvf /path/to/netdisk/sources/friendlywrt-h3-20190101.tar
cd friendlywrt-h3
repo sync -l --no-clone-bundle

Now you have had the full source code for generating an image. The last number digits in the file name stand for the packing date. If you want to obtain the latest official release, remove "-l" and do "repo sync" again:

cd friendlywrt-h3
repo sync --no-clone-bundle

4.2.2 Two: Get Source Code from Github

4.2.2.1 H3 Based Boards
mkdir friendlywrt-h3
cd friendlywrt-h3
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.1 -m h3.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
repo sync -c  --no-clone-bundle
4.2.2.2 H5 Based Boards
mkdir friendlywrt-h5
cd friendlywrt-h5
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
        -m h5.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
repo sync -c  --no-clone-bundle
4.2.2.3 S5P4418 Based Boards
mkdir friendlywrt-s5p4418
cd friendlywrt-s5p4418
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
        -m s5p4418.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
repo sync -c  --no-clone-bundle
4.2.2.4 S5P6818 Based Boards
mkdir friendlywrt-s5p6818
cd friendlywrt-s5p6818
repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master \
        -m s5p6818.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
repo sync -c  --no-clone-bundle
4.2.2.5 RK3399 Based Boards
mkdir friendlywrt23-rk3399
cd friendlywrt23-rk3399
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
        -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle
4.2.2.6 RK3328 Based Boards
mkdir friendlywrt23-rk3328
cd friendlywrt23-rk3328
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
        -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle
4.2.2.7 RK3568 Based Boards
mkdir friendlywrt23-rk3568
cd friendlywrt23-rk3568
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
        -m rk3568.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle
4.2.2.8 RK3588 Based Boards
mkdir friendlywrt23-rk3588
cd friendlywrt23-rk3588
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
        -m rk3588.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle

4.2.3 Get Latest Release With "Sync"

repo sync -c --no-clone-bundle

If synchronization is interrupted you can run the following script to do sync again:

#! /bin/bash
repo sync -c --no-clone-bundle
while [ $? -ne 0 ]; 
do  
    repo sync -c --no-clone-bundle
done

4.2.4 Swtich To Different Platform

If you have been working on the source code for Allwinner H3's boards and want to swtich to the source code for Allwinner H5's boards you can do it this way:

cp -af friendlywrt-h3 friendlywrt-h5
cd friendlywrt-h5
repo init -m h5.xml
repo sync --force-sync

5 Compile Source Code

5.1 Setup Development Environment

You need a host PC running a 64-bit Ubuntu 20.04 system and run the following command on the PC:

wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash

5.2 Build buildroot in Docker container

Please use the Docker image provided by this link, for details, please refer to the README document:
https://github.com/friendlyarm/docker-cross-compiler-novnc

5.3 Get Help Info

Run the build.sh script without any options it will print the help information:

./build.sh

Let's take Allwinner H3 as an example, the help information will be presented as follows:

USAGE: ./build.sh <parameter>
 
# Select Board Type:
  ./build.sh nanopi_r1.mk
  ./build.sh nanopi_duo.mk
  ./build.sh nanopi_neo_core.mk
  ./build.sh nanopi_neo.mk
  ./build.sh nanopi_neo_s.mk
  ./build.sh nanopi_m1_plus.mk
  ./build.sh nanopi_m1.mk
  ./build.sh nanopi_neo_air.mk
 
# Select Module:
  ./build.sh all                -compile all
  ./build.sh uboot              -compile uboot
  ./build.sh kernel             -compile kernel
  ./build.sh friendlywrt        -compile friendlywrt
  ./build.sh sd-img             -generate an image for an sd card
  ./build.sh emmc-img           -generate an image for emmc (the generated image should be flased to an SD card and then flashed to emm with this SD card)
# Clean:
  ./build.sh cleanall

5.4 Auto Compile

For a first time compilation you need to select an SoC platform. Let's take the NanoPi R1(Allwinner H3) as an example:

./build.sh nanopi_r1.mk

After the script is done successfully all components including a u-boot, a kernel and a friendlywrt will be compiled, and an image file will be generated.

5.5 Compile Individual Component

5.5.1 kernel

./build.sh kernel

5.5.2 u-boot

./build.sh uboot

5.5.3 FriendlyWrt

method 1:

./build.sh friendlywrt

method 2:

cd friendlywrt
./scripts/feeds update -a 
./scripts/feeds install -a 
cp ../configs/config_XXXX .config
make defconfig
make download -j8
make -j8

5.6 Generate Image for SD Card

sudo ./build.sh sd-img

If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:

Run the following for sdcard install:
    sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_sd.img bs=1M of=/dev/sdX

5.7 Generate emmc (eflasher) Image

sudo ./build.sh emmc-img

If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:

Run the following for sdcard install:
    sudo dd if=out/FriendlyWrt_20190828_NanoPi-R1_armhf_eflasher.img bs=1M of=/dev/sdX

Use this SD card to boot the eflasher system and run eflasher commands to install an OS to emmc. After installation is done, take off the SD card of the board and boot your system friendlywrt will load from eMMC.

6 Make Your Own Friendlywrt

6.1 Structure of Source Code Directories

├── friendlywrt
│   ├── friendlywrt -> friendlywrt's source code
│   └── configs -> save the "friendlywrt defconfig" file
│   └── toolchain -> cross-compiler, used for compiling a u-boot and kernel
│   ├── build.sh -> script for auto-compile
│   ├── device/friendlyelec -> configuration file for friendlyelec boards
│   ├── kernel -> kernel
│   └── u-boot -> u-boot
│   └── scripts -> script files for generating an img

6.2 Configure friendlywrt Components

  • Configure by Using Make Menuconfig(H3)
cd friendlywrt-h3/friendlywrt
make menuconfig
  • Save Your Configurations
make menuconfig
./scripts/diffconfig.sh > ../configs/my_config
  • Set Your Configurations As Default

Let's take the NanoPi-R1 as an example and edit the following file:

device/friendlyelec/h3/nanopi_r1.mk

Set TARGET_FRIENDLYWRT_CONFIG to your configurations.

  • Recompile Friendlywrt and Generate Image for SD Card
./build.sh friendlywrt
./build.sh sd-img

6.3 Put Your Add-on Features to Friendlywrt

Let's take H3 as an example. Put your files and directories to the following directory and they will be compiled to an img file.

device/friendlyelec/h3/common-files

Or you can put your files and directories in a new directory. Let's take the NanoPi-R1 as an example and edit the following file:

device/friendlyelec/h3/nanopi_r1.mk

Open the file and add a new line(replace "XXX" with your directory):

FRIENDLYWRT_FILES+=(device/friendlyelec/h3/XXX)

6.4 Change Friendlywrt's Default Configurations(Network, Firewall Etc)

Open and edit the following files:

device/friendlyelec/h3/default-settings/files
friendlywrt/package/base-files/files

6.5 Change U-boot and Kernel's Configurations(H3)

Open and edit the following file:

device/friendlyelec/h3/nanopi_r1.mk

Change uboot's settings to your own by making the following changes:

TARGET_UBOOT_CONFIG=nanopi_h3_defconfig

Change kernel's settings to your own by making the following changes:

TARGET_KERNEL_CONFIG=sunxi_defconfig

6.6 Change Other COnfigurations

Open and edit the following xml file and you can replace the source code of kernel, uboot and friendlywrt yo your own code:

.repo/manifests/h3.xml

For more details about what each item in the xml file means, refer to:repo Manifest Format
After you make your changes you need to do "repo" to sync and make the changes effective. For example after you change the kernel's source code you need to run the following command to sync:

repo sync --force-sync kernel

After synchronization you just need to recompile the kernel's source code:

./build.sh kernel

6.7 Repacking firmware after editing

After compiling FriendlyWrt, you can get a copy of the filesystem contents (directory named rootfs) with the following command:

export KEEP_CACHE=1
./build.sh sd-img
cd scripts/sd-fuse
rm -rf ./rootfs
cp -r out/rootfs.* ./rootfs

Repacking firmware after editing:

./build-rootfs-img.sh $PWD/rootfs friendlywrt
./mk-sd-image.sh friendlywrt

7 Tips

7.1 Visit FriendlyWrt management page

Enter http://friendlywrt/ or the IP address on the computer browser to enter the FriendlyWrt management page. By default, the IP address of the LAN port is 192.168.2.1, and the WAN will dynamically obtain an IP address from your main router.

7.2 mount smbfs resource

mount -t cifs //192.168.1.10/shared /movie -o username=xxx,password=yyy,file_mode=0644

8 Common Issues and Tips

  • When you compile a source code under Ubuntu you cannot do it as root and you need to do it as a non-root user
  • Compilation in VNC may not succeed

9 Resources

repo guidance

10 Report bug

Please mail-to:techsupport@friendlyarm.com

11 Update Log

11.1 2023-10-25

  • Rockchip platform: upgrade FriendlyWrt to 23.05

11.2 2021-10-29

  • RK33xx platform: upgrade FriendlyWrt to 21.02.1, features are basically the same as 19.07.5, support docker, usb wifi, etc.

11.3 2021-08-31

  • Add a high-speed 5G USB WiFi support, the network card model is Comfast CF-WU782AC V2, the chip model is MediaTek MT7662
  • Improved USB WiFi compatibility
  • Improved PWM fan support (RK3399 platform), fan controlled by kernel drive, temperature control support(Please search for "PWM fans" on the R4S WiKi page for details)
  • Improved stability on first boot (previous version, bpfilter error occurred in some cases on first boot)

11.4 2021-01-14

11.4.1 RK3328 FriendlyWrt:

  • RK3328 FriendlyWrt has been updated to the official stable version 19.07.5

11.5 2020-12-24

  • RK3399 FriendlyWrt has been updated to the official stable version 19.07.5, which provides two versions of the kernel:
    • Mainline kernel-5.10 for NanoPi-R4S, NanoPC-T4, NanoPC-M4v1, NanoPi-NEO4
    • Rockchip kernel-4.19 for All FriendlyElec's RK3399 based boards

11.6 2020-02-20

  • Optimized openssl performance
  • Added support for PWM fan, support fan speed control (platform: rk33xx)

11.7 2019-09-06

  • Released English version