如何编译R1S

技术 2019-11-17

本文详细介绍我是如何编译FriendlyArm的nanopi r1s的,单纯编译官方的版本非常简单,一键就能搞定,但是因为我们要融合lean的特色插件因此难度大大提升。编译失败也是家常便饭,本文是抛砖引玉,力求让你少采坑,提高编译成功率

前情提要,r1s属于arm平台,跟x86有所不同。我们既要用friendlyWrt提供的内核,又要融合lean插件,这样才能正常运行在r1s上。假设你已经有了Ubuntu Server 18.04.3 LTS环境(https://ubuntu.com/download/server),假设你已经安装了repo 工具(如何安装),假设你已经全局科学上网

如何安装repo
git clone https://github.com/friendlyarm/repo
sudo cp repo/repo /usr/bin/

第一步:同步friendlyWrt代码,同步L大代码。
1、同步R1S源码
friendlyWrt代码分为h3,和h5 两个版本,我们今天用h5版本,参考地址:http://wiki.friendlyarm.com/wiki/index.php/How_to_Build_FriendlyWrt/zh

如果你网络较差,你最好之间下载他们的R1s-h5源码,避免同步出错
源码地址2个:
谷歌地址: https://drive.google.com/open?id=1XEP6wV8R6T99HbZrp-NH93_FnUdkHp6S
百度地址: https://pan.baidu.com/s/1FDXFnYv4AViyShHC4ZEReg 提取码: 5a6x
大小6G多, 先解压 sources-20191113.7z ,然后解包到你想要的目录下。

如何解包
tar xvf xx路径的/xxxx.tar


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

2、同步Lean的lede源码
git clone https://github.com/coolsnowwolf/lede
以下简称此代码为L大代码

第二步:融合lean插件和修改代码
1、在融合代码之前,确保2份代码都是最新的,friendlywrt-h5代码使用repo sync 同步到最新,L大代码使用git pull 拉取到最新。
2、将L大源码目录的lede/package/lean 文件夹复制到 friendlywrt-h5/friendlywrt/package/lean
3、 删除/friendlywrt-h5/friendlywrt/feeds.conf.default, 将L大源码 lede/feeds.conf.default 复制到/friendlywrt-h5/friendlywrt/
4、用vi修改friendlywrt-h5/scripts/mk-friendlywrt.sh , 将所有的 make -j$(nproc) V=s 修改为make -j1 V=s
,这个步骤的意义在于,第一次编译尽量采用单线程编译。多线程编译容易出现依赖错误。
5、进入到friendlywrt-h5/friendlywrt/ ,执行 以下三个命令

./scripts/feeds update -a 
./scripts/feeds install -a
make menuconfig 

然后选择主题和lean插件,这样最后会自动保存在.config文件中,记住尽量少选插件,因为这里面存在很多不确定性,lean的插件也在不断更新。不要给自己增加不必要的变量,尽可能选择一些你非常常用的插件即可,如果你选择过多,一是可能固件加载变慢,二是很可能因为缺少组件依赖而编译失败。

6、由于默认friendlywrt没有中文,所以我们修改friendlywrt-h5/friendlywrt/.config ,这个配置文件。
在这个配置文件里 我们找到 # CONFIG_PACKAGE_luci-i18n-base-zh-cn is not set
将其#去掉 并修改为 CONFIG_PACKAGE_luci-i18n-base-zh-cn =y
(PS:友情提醒,在vi编辑器里,可以输入 / 来搜索关键字, 比如你输入 /luci-i18n-base-zh-cn 回车后就能定位到你搜到的行 )

7、回到friendlywrt-h5 根目录。执行 ./build.sh nanopi_r1s.mk
8、如果编译成功,会有一个打包的过程,此时需要你输入管理员密码,输入后方可执行打包动作,最后xxx.img文件位于friendlywrt-h5 根目录中的out中

PS:小技巧,如果你想让img小一点,你可以在out目录中执行 zip -r xxx.img.zip xxx.img ,压缩后的大小为30到150M之间 就非常利于传输啦
如果对你有帮助,欢迎来打赏哟,悟空的日常~bye
微信图片_20191117131103.jpg


转载务必注明出处

7 条评论

  1. Diger
    Diger

    照着教程第一次尝试编译固件,在VPS里面做,开始遇到好几次错误,边搜索边解决了,现在这遍已经运行了快3小时了,不知道能不能成~

  2. jason
    jason

    为什么我编译完小1g luci就选了4个插件 wifi驱动选哪个 求解答 谢谢

  3. stream
    stream

    您好,Ubuntu1804和Debian 9 执行这一句代码时【repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master -m h5.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle】 报错

    提示:/usr/bin/env: ‘python’: No such file or directory

    请问怎么解决

    1. winco
      winco

      你的依赖环境没装好,先去把所有要用上的软件给装上,具体google一下

    2. Nash
      Nash

      安装python:sudo apt install python

  4. Nash
    Nash

    你好,我按照你的教程,执行./scripts/feeds install -a之后出现以下错误:
    WARNING: Makefile 'package/feeds/telephony/freeswitch-stable/Makefile' has a dependency on 'libopusenc', which does not exist
    WARNING: Makefile 'package/feeds/telephony/freeswitch-stable/Makefile' has a dependency on 'libopusfile', which does not exist
    WARNING: Makefile 'package/feeds/packages/owfs/Makefile' has a dependency on 'librpc', which does not exist
    WARNING: Makefile 'package/feeds/packages/snort/Makefile' has a build dependency on 'librpc', which does not exist
    重复试了好几次都是这样,不知道怎么解决?

  5. shaw
    shaw

    我想问下哪个 YouTube 的信息页面的代码是什么? 我也想挂在博客

添加新评论