zoukankan      html  css  js  c++  java
  • FriendlyWrt

    FriendlyWrt

    来源 https://wiki.friendlyarm.com/wiki/index.php/How_to_Build_FriendlyWrt/zh

    参考 http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO/zh

    1 FriendlyWrt简介

    FriendlyWrt是友善电子基于OpenWrt定制的系统,完全开源,用于企业物联网二次开发,个人定制NAS,家庭物联网网关等。

    2 帐户与密码

    默认是空密码,请为root设置一个密码用于web登录与ssh登录。

    3 当前支持的开发板型号

    平台 版本 支持的开发板型号 固件文件名 下载体验版固件
    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下载链接
    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下载链接
    FriendlyWRT for S5P4418 19.07-snapshot NanoPi-Fire2A, NanoPC-T2, NanoPi-S2,
    NanoPi-M2A, Smart4418
    s5p4418-sd-friendlywrt-4.4-YYYYMMDD.img.zip S5P4418下载链接
    FriendlyWRT for S5P6818 19.07-snapshot NanoPi-Fire3, NanoPC-T3, Smart6818 s5p6818-sd-friendlywrt-4.4-YYYYMMDD.img.zip S5P6818下载链接
    FriendlyWRT for RK3399 (1/2) 19.07.5 with rockchip kernel-4.19 All FriendlyElec's RK3399 based boards, including NanoPi-M4v2, NanoPi-M4B, Som-RK3399 rk3399-sd-friendlywrt-4.19-YYYYMMDD.img.zip RK3399 Download Link
    FriendlyWRT for RK3399 (2/2) 19.07.5 with mainline kernel-5.10 NanoPi-R4S, NanoPC-T4, NanoPC-M4v1, NanoPi-NEO4 rk3399-sd-friendlywrt-5.10-YYYYMMDD.img.zip RK3399 Download Link
    FriendlyWRT for RK3328 19.07.5 NanoPi-R2S rk3328-sd-friendlywrt-5.10-YYYYMMDD.img.zip RK3328下载链接

    体验版固件使用方法:解压后用 dd 或者 win32image 烧写到 SD 卡。

    4 获取项目源代码

    4.1 安装 repo 工具

    首先需要安装 repo 工具:

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

    4.2 下载项目源代码

    有以下两种途径获取项目源代码,中国大陆用户建议使用方法1的途径下载:

    4.2.1 方法一:使用网盘里的repo压缩包

    文件位于网盘的以下路径:sources/friendlywrt-CPU-YYYYMMDD.tar (CPU为对应的cpu型号,YYYYMMDD表示打包的日期)
    从网盘中获取的 repo 压缩包在解压之后,需要执行一下以下命令做一次解包动作,以H3为例:

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

    至此你已经获得了完整的可以编译生成img的源代码,源代码版本是打包对应的日期,如果想拉取到官方最新的版本,可以去掉 -l 参数,执行一次 repo sync即可, 命令如下:

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

    可选步骤:如果网络环境比较差,可以预先解压好FriendlyWrt所需的压缩包,避免中途因为网络原因导致编译被中断:

    cd friendlywrt-h3
    cd pre-download/
    ./unpack.sh

    4.2.2 方法二:直接从github下载完整的源代码

    4.2.2.1 H3平台
    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平台
    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平台
    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平台
    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平台
    • FriendlyWrt with Rockchip kernel-4.19

    For NanoPi-M4, NanoPC-T4, NanoPi-NEO4, Som-RK3399:

    mkdir friendlywrt-rk3399
    cd friendlywrt-rk3399
    repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.5 
            -m rk3399-kernel4.19.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
    repo sync -c  --no-clone-bundle
    • FriendlyWrt with Mainline kernel-5.10

    For NanoPi-R4S:

    mkdir friendlywrt-rk3399
    cd friendlywrt-rk3399
    repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.5 
            -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
    repo sync -c  --no-clone-bundle
    4.2.2.6 RK3328平台
    mkdir friendlywrt-rk3328
    cd friendlywrt-rk3328
    repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.5 
            -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
    repo sync -c  --no-clone-bundle

    4.2.3 同步项目到最新版本

    repo sync -c --no-clone-bundle

    同步过程中,由于网络原因出现中断,可以使用下面脚本同步代码:

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

    4.2.4 同一份代码,切换到其他平台

    比如已有H3平台的代码,现在要开发H5平台,可以用以下命令,好处是可以减少网络下载:

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

    5 如何编译

    5.1 搭建编译环境

    在PC的Ubuntu系统下 (建议使用版本18.04-64bit),执下以下命令安装所需的软件:

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

    5.2 查看帮助

    不带参数执行 build.sh,默认是打印帮助信息:

    ./build.sh

    显示的帮助信息如下 (以H3平台为例):

    USAGE: ./build.sh <parameter>
     
    # 选择目标的硬件平台:
      ./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
     
    # 编译各个模块:
      ./build.sh all                -编译所有组件
      ./build.sh uboot              -单独编译uboot
      ./build.sh kernel             -单独编译kernel
      ./build.sh friendlywrt        -单独编译friendlywrt
      ./build.sh sd-img             -生成sd启动的镜像文件
      ./build.sh emmc-img           -生成用于安装到emmc的镜像文件 (镜像文件需要dd到sd卡,通过sd卡启动安装程序)
    # 清理:
      ./build.sh cleanall

    5.3 全自动方式编译

    初次编译,需要选择目标的硬件平台,以H3平台的R1为例:

    ./build.sh nanopi_r1.mk

    执行上述命令,会自动编译所有组件,其中包括u-boot, kernel 和 friendlywrt,并生成sd启动的烧写镜像文件。

    5.4 编译单独的模块

    5.4.1 kernel

    ./build.sh kernel

    5.4.2 u-boot

    ./build.sh uboot

    5.4.3 FriendlyWrt

    可以用build.sh脚本简化编译:

    ./build.sh friendlywrt

    也可以使用openwrt传统方法来编译:

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

    5.5 生成sdcard固件

    sudo ./build.sh sd-img

    打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:

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

    5.6 生成emmc (eflasher) 固件

    sudo ./build.sh emmc-img

    打包img成功后,终端会显示如下信息,可以参考下面的dd命令将img写入sd卡,注意/dev/sdX需要替换成真实的sd卡设备:

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

    用此sd卡启动eflasher系统,执行eflasher命令,将系统写入emmc,之后就可以拨掉sd卡,从emmc启动friendlywrt了。

    6 friendlywrt定制与开发

    6.1 源代码目录结构

    ├── friendlywrt
    │   ├── friendlywrt -> friendlywrt源代码
    |   └── configs -> 保存预设好的friendlywrt defconfig文件
    |   └── toolchain -> 交叉编译器,仅用于编译u-boot与kernel
    │   ├── build.sh -> 全自动编译脚本
    │   ├── device/friendlyelec -> 用于适配友善电子开发板的相关文件
    │   ├── kernel -> 内核
    │   └── u-boot -> u-boot
    │   └── scripts -> 打包img的相关脚本

    6.2 配置friendlywrt的软件包

    • 使用make menuconfig更改配置 (以h3为例)
    cd friendlywrt-h3/friendlywrt
    make menuconfig
    • 另存你个人的软件包配置
    make menuconfig
    ./scripts/diffconfig.sh > ../configs/my_config
    • 让以后的编译使用你的friendlywrt配置

    以NanoPi-R1为例,编辑以下文件:

    device/friendlyelec/h3/nanopi_r1.mk

    将TARGET_FRIENDLYWRT_CONFIG的值改为你的配置。

    • 重新编译friendlywrt并制成sd启动镜像
    ./build.sh friendlywrt
    ./build.sh sd-img

    6.3 固化个人文件到friendlywrt

    以H3平台为例, 将文件或目录放入以下目录即可,打包img时会把它们都打包进去:
    
    device/friendlyelec/h3/common-files

    也可以放在新建的目录里,以NanoPi-R1为例,然后编辑以下文件:

    device/friendlyelec/h3/nanopi_r1.mk

    在文件中新增一行 (XXX替换为你的目录名):

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

    6.4 修改friendlywrt系统的默认配置(如网络、防火墙等)

    编辑如下目录中的文件:

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

    6.5 更改u-boot和kernel配置 (以H3为例)

    同样是编辑如下文件:

    device/friendlyelec/h3/nanopi_r1.mk

    可通过以下设置,将uboot的配置改为你自已的:

    TARGET_UBOOT_CONFIG=nanopi_h3_defconfig

    可通过以下设置,将kernel的配置改为你自已的:

    TARGET_KERNEL_CONFIG=sunxi_defconfig

    6.6 更换其他源代码

    编辑如下 xml 文件,即可替换 kernel 、uboot以及friendlywrt的源代码:

    .repo/manifests/h3.xml

    想了解 xml 文件各个节点的含义和用法,请参考:repo Manifest Format
    编辑完成后,需要用 repo 命令同步一下,比如更换了 kernel 的源代码,用以下命令同步一次:

    repo sync --force-sync kernel

    同步后单独重新内核即可:

    ./build.sh kernel

    7 玩转FriendlyWrt:使用技巧

    7.1 访问FriendlyWrt管理页面

    在电脑浏览器上输入 http://friendlywrt/ 或者IP地址即可进入FriendlyWrt管理页面,默认情况下,LAN口的IP地址为192.168.2.1,WAN会从你的主路由器动态获取IP地址。

    7.2 关闭 IPv6

    进入 "网络" -> "接口",点击LAN接口右边的 "修改" 按钮,将 "IPv6分配长度" 设置为已禁用,重启路由器即可。

    7.3 Docker使用:安装JellyFin影音服务器

    请参考: How to setup JellyFin media system on NanoPi-R2S/zh

    7.4 Docker使用:安装个人网盘nextcloud

    注1:目前仅支持 H5/S5P4418/S5P6818/RK3399 平台。
    注2:S5P4418平台是32位的,需要将arm64v8改为arm。

    mkdir /nextcloud -p
    docker run -d -p 8888:80  --name nextcloud  -v /nextcloud/:/var/www/html/ --restart=always --privileged=true  arm64v8/nextcloud

    安装完成后,使用8888端口进行访问。

    7.5 使用Aria2下载网络资源

    使用 Aria2 之前,需要先设置一个目录专门用于存放 Aria2 下载的文件,这个目录需要 让aria2 用户有读写权限,如果你是挂载外部的硬盘作为下载目录,硬盘建议格式化为 ext4 格式。
    下面以 /mnt/download 目录为例,进入“网络“->"ttyd“, 输入以下命令创建目录,并设置目录拥有者为 aria2:

    mkdir /mnt/download
    chown aria2:aria2 /mnt/download

    现在开始设置 Aria2, 进入 “服务”->“Aria2” ,选中“已启用”复选框,将下载目录设置为 /mnt/download,最后点击“保存并应用”按钮。
    保存完成后,点击 “AriaNg”即可进入 Aria2 前端界面,点击“新建”按钮即可创建下载任务了:

    7.6 设置Samba网络文件共享

    进入“服务”->“网络共享”,点击底部的添加按钮,填写你要共享目录,这里以设置共享 /mnt/ 目录为例,按如下展示的内容填写即可:
    名称:mnt
    路径:/mnt
    允许用户:root
    只读:不钩选
    可游览:钩选
    允许匿名:不钩选
    创建权限掩码:0777
    目录权限掩码:0777
    然后点击“保存并应用“按钮。

    7.6.1 在Windows10系统下访问Samba共享

    默认情况下,你的Windows10可能没有启动网络发现与共享,请先参考下面这二份文档,对你的Windows10做一些设置:
    1) 启用Samba v1/v2的访问:https://www.windowscentral.com/how-access-files-network-devices-using-smbv1-windows-10
    2) 启用网络发现:https://www.dummies.com/computers/operating-systems/windows-10/how-to-enable-network-discovery-and-configure-sharing-options-in-windows-10/
    可以百度“Windows10 开启SMBv1” 与 "Win10启用网络发现"了解中文版的设置方法。
    设置完成后,在资源管理器上,在地址栏输入 \friendlywrt 即可访问共享目录, 用户名为root, 密码为password。

    7.6.2 在OS X系统下访问Samba共享

    右击 Finder 图标,选择“连接到服务器“,输入地址 smb://root@friendlywrt 后点击“连接“按钮,
    在要求输入用户名与密码时,输入用户名为root, 密码为password,最后点击 mnt 即可进入 /mnt/的共享目录。

    7.6.3 在Linux系统下访问Samba共享

    在文件管理器的地址栏中输入 smb://root@friendlywrt 后敲回车,在提示输入密码时输入 password,最后点击 mnt 即可进入 /mnt/的共享目录。

    7.7 挂载其他设备的网络共享目录

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

    8 常见问题及注意事项

    • Ubuntu下不能使用 root 用户来编译,需要使用普通用户
    • 在 vnc 环境下编译可能会编译失败

    9 参考资料

    repo使用指南

    10 报告bug

    欢迎发邮件到:techsupport@friendlyarm.com

    11 更新日志

    11.1 2021-01-14

    11.1.1 RK3328 FriendlyWrt更新说明:

    • RK3328 FriendlyWrt更新至官方稳定版本 19.07.5

    11.2 2020-12-24

    • RK3399 FriendlyWrt更新至官方稳定版本 19.07.5, 提供两个版本的内核:
      • 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.3 2020-02-28

    11.3.1 RK3328 FriendlyWrt更新说明:

    • 默认不启用 lan 口的dhcp ipv6
    • 增加usb wifi 的支持(RTL8821CU)

    11.4 2020-02-25

    11.4.1 RK3328 FriendlyWrt更新说明:

    11.4.1.1 更新代码到 openwrt v19.07.1 版本,请使用 master-v19.07.1 分支的代码,下载方法:
    mkdir friendlywrt-rk3328
    cd friendlywrt-rk3328
    repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v19.07.1 
            -m rk3328.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle
    repo sync -c --no-clone-bundle
    11.4.1.2 修复初版固件发现的一些issues,如下:
    • 优化加载bpfilter 模块
    • 设置 dist-feeds 指向最新版本, 解决opkg update 异常
    • 缺省config中移除 modemmanager和mwan3 插件 (可自行添加)
    • 优化 cpu 调频策略和开机速度

    11.5 2020-02-20

    • 优化了 openssl 性能
    • 增加pwm风扇的支持,支持温控 (平台: rk3328/rk3399)

    11.6 2019-12-28

    • H5/S5P4418/S5P6818/RK3399 更新到 19.07-snapshot版本,支持docker-ce

    11.7 2019-08-28

    • 首次发布

    ============ End

  • 相关阅读:
    Nodejs:fs模块 & rimraf模块
    Nodejs:简单的脚手架(一)
    Nodejs:Glob对象
    Nodejs:Path对象
    后台系统组件:一丶bootstrap table
    关于Fekit的安装与测试
    Web存储-Web Storage
    【python】基础入门
    排除正则
    js正则处理千分位
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/14340027.html
Copyright © 2011-2022 走看看