Upgrade

2021-03-25
应回复更新下内容

2021-02-23
手动查看了一下貌似还是没有支持,故还是手动打patch吧(

2021更新:
根据反馈lean大源码已经支持xr819,故可直接用无需进行patch
2020-07-12更新:

由于lean大现在源码已经把内核更到5.4,故本教程xradio部分已经进行修改

前言

本篇文章采用的是lean大的Openwrt源码进行编译,在此感谢lean大的固件源码。本人的编译环境为manjaro,ubuntu及其发行版所需依赖请看lean大项目的readme,Arch/manjaro这边一个yay -S openwrt-devel 差不多就行了

注意:建议先看完再整体操作,因为存在后续(

具某个dalao的说法,如在Arch系发行版下编译,建议降级gawk至4.2.1版本,否则可能出现类似strerror-sym.c:47:9: error: 'errnos_msgstr' undeclared (first use in this function)的报错。(此段来自某N厂250dalao


缘由

之前因为要过网络的EAP认证,用手头的小米路由器3刷了个lede,然后发现7620用这玩意实在是不理想,于是看了看手边装了ubuntu企图做小型nas香橙派(橘子皮·)zero,想起来这玩意整OP性能会好很多,毕竟好歹也是arm。于是打算用它过Eap认证,然后将米3做AP,毕竟7620做AP还是可以的。虽然说H2+,做别的性能的确堪忧。于是果断把里面装有ubuntu的tf卡给格式化了(


开整

首先放下其参数

OrangePi zero 的硬件规格(参数来自官网)

Basic Spec Sheet
CPU 全志H2 ARM的Cortex-A7四核
GPU Mali400MP2 GPU @600MHz Supports OpenGL ES 2.0
内存 256MB/512MB DDR3(与GPU共享) (256MB为标准版本)
板载存储 TF卡(最大32GB)/或者2MB SPI Flash)
板载wifi XR819, IEEE 802.11 b/g/n
尺寸 48mm × 46mm
板载网络 10/100M 以太网 RJ45 (POE供电缺省未打开)

zero


我们需要准备的有:
一台橘子皮zero废话,一张Class10的tf卡(按照官方的标准是最小8G容量,class 10级,我使用的是16G,实测2G卡无法启动),一台有linux有网的PC,并且已经配置好了环境,(关于环境问题开头有说。)有网络,并且能够科学的使用网络

首先我们克隆源码:

git clone https://github.com/coolsnowwolf/lede

然后cd进源码目录,执行以下操作(注意,建议全程科学上网):

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

随后进入menuconfig,进入前确保终端的窗口大小足够,不然无法打开。进入后选中我们需要的配置。
Target System
Sub Target
Target Profile
关于输出的格式,默认会是squashfs的img,我们更换为ext4(squashfs后遗症)。
Target Images

注:图中tar.gz和gzip images可以不用勾选,然后boot分区20m足以,甚至绰绰有余。system,120m其实也够了,具体看你加多少插件。官方OP编译后貌似要150m左右,lean大这个我编译出最多也没到100.

然后就是开自己所需的东西了,开好以后退出保存。

输入命令:

   make -j8 download V=s

它会开始下载包,如果没有输入V=s他将会简要输出而不是详细输出日志。

download结束后,输入:

make -j1 V=s 

j后面的数字为线程数,首次编译建议单线程,实测可能还会有下载,多线程可能导致失败。也可以考虑加-k参数多线程强制编译大部分后再整单线程。

编译时间相对来说还是比较长的毕竟是最小的linux发行版。编译成功后,镜像在源码目录下的bin/target中
出包位置


刷入

解压gz文件得到镜像,按照橘子皮官方给的教程,在win下可使用Win32diskmanager进行刷入,在linux下使用dd(单推)命令。

用读卡器插入tf卡,终端下输入:

sudo fdisk -l

以确认你的卡有没有别的分区,如果有,先删除。接着格式化你的盘(其实可以省略格式化,因为dd命令就会格式化)

这里引入下橘子皮官方的格式化教程:

i:运行 fdisk –l 命令确认TF卡的盘符。
ii:运行 umount /dev/sdxx 去卸载TF卡的所有分区。
iii:运行 sudo fdisk /dev/sdx 命令. 使用 o 命令去删除TF卡的所有分区,然后使用n 命令去添加一个新的分区,最后使用 w 命令保存退出。
iv:运行 sudo mkfs.vfat /dev/sdx1 命令去格式化刚生成的TF卡分区为FAT32格式
(根据你的TF卡盘符来替换x)

fdisk
根据我图上的信息,我的tf卡是/dev/sdb,我的镜像名重命名了op.img,我cd到了我img的目录下,执行:

   sudo dd bs=1M if=op.img of=/dev/sdb

等待它写入完毕。
dd


调整SD卡空间

这一步貌似是可以用resize2fs代替的,但是既然都在linux环境下了,我就直接用gparted调整了

dd以后,rootfs的总空间将会变成你镜像大小的空间。我16G的tf卡剩下那么多总不能浪费了啊。于是我们调整它的大小,打开Gparted,没有请安装或别的代替。
选中/dev/sdb(自行调整),先将ext4分区的rootfs分区卸载,然后右键选择调整大小,直接拖满(也可以自行决定多大,或者多分区)
gparted


结束

迫真

将TF卡插入橘子皮,通电,lan口连电脑(路由也行),浏览器打开192.168.1.1,将会看到luci界面。lean大的固件默认密码是password,随后ssh也可以登录上。
最后上一张图

op界面

==============分割线================

" 后 续 工 作 " Part1

(修复板载wifi)

由于橘子皮zero的板载wifi模块是XR819,貌似lean大的源码里不支持。。听说官方op编译出来是正常的。也就是官方OP正常的话就不用看了。我们需要手动处理这个问题。
github上可以找到xr819的patch,给openwrt适用的(感谢作者)。项目链接

首先将这个项目clone到本地。

然后,点进去,你会发现有这几个目录。
xr819
那么,我们用的是lean大的源码,现在走的是5.4内核走的是4.19的内核,同样进入所以我们先进入“add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master-4.19”这个目录。
patch folder
里面有两个patch一个readme,readme是俄文,凑合能猜得出意思。我们把这两个patch复制到op的源码目录下。
然后在源码目录下打开终端。

输入:

patch -p1 < add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master.patch
patch -p1 < add-on_wifi-mac80211.patch

patch failed

====================================
0712更新:
由于源码变动,patch前先修改add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master.patch文件,几个地方需要更改
1.
TIM截图20200712002511
patches-4.19需要改成patches-5.4,有多少个改多少个

2.
TIM截图20200712002519
同理,config-4.19改config-5.4,有多少个改多少个

3.
TIM截图20200712002525
文件名变动,源码里文件名改为cortexa7.mk了,没有“-”号。所以改为cortexa7.mk,有多少个改多少个

===================================

不出意外地话会有两个冲突,自行解决冲突。这里就不说如何解了。。基本就是手动修改下文件。。

然后进入“packages_xradio-OpenWrt-master”文件夹,里面有一个patch。老样子(0712:需修改这个patch里的cortexa7和4.19变为5.4,修改同上)

patch -p1 < add-patch_dts_file-wifi-xradio.patch

不出意外的话还是有一个冲突,自行解决X2

====================================
0712更新:
更新到5.4后,打完这个patch,进入到xradio-Openwrt_kernel-5.4.xx文件夹,能看到里面有个makefiles和patches文件夹。其中,这个文件夹的makefile替换掉package/kernel/xradio/makefile(也就是刚刚打补丁创建的),然后删除package/kernel/xradio/patches/052-add-wifi_xradio_xr819-driver.patch这个文件,把Openwrt_kernel-5.4.xx/patches 文件夹里的xradio.patch放过去。

====================================
0325更新:
前几天melsem更新了5.4补丁,5.4补丁同上,把更新后的makefile和xradio的patch扔过去

顺便提及一下解冲突
以cortexa7.mk的冲突为例
在cortexa7.mk的目录下可以看到个同名的后缀为rej的文件,就是存在的冲突
截屏2021-03-25 下午5.30.37
可以看到,+号的为添加段,-号为删除段
那么为什么存在冲突呢
我们查看源文件关于zero的这一段
截屏2021-03-25 下午5.34.04
可以看到,样子已经大变了,所以打补丁时找不到,很正常,所有我们需要手动处理上去
根据rej里的我们可得知,需要动的为DEVICE_PACKAGE段,即选中的这个设备且要带的包,我们手动补上即可
同时,可以看到,我们需要修改的文件里也没有关于xradio的,一起加上即可
即修改效果:
截屏2021-03-25 下午5.45.42
其他的就看自己的理解了(

====================================

解决完了后,开始编译,如果先前编译过,先进行一次makeclean,然后make defconfig后再编译,编译命令参照上面。

注:打完patch后xr819是默认=y的,也就是参与编译,所以不用menuconfig里在无线模块选中它。

注X2:firmware会在make的时候进行下载,请确认“网络连接通畅”

出包后,刷入,不出意外的话板载wifi就可以工作了

==============分割线X2==============

“后 续 工 作” Part2

这一步仅写给有需要的人,例如和我一样过EAP认证的
EAP认证需要WPAD(完整版),而op默认带的是mini版。原本这玩意可以在后期通过opkg卸载然后换版本,但是有个不大不小的问题,导致我们还得从源码整(

先。分析问题。
wpad menuconfig
在menuconfig里。我们可以看到,wpad-mini无法被取消,根据help,看出,kmod-xradio依赖了这个。这个xradio,就是xr819。选中了mini的情况下完整wpad是只能做modules编译的,而且opkg无法卸载,会提示被xradio依赖,而且wpad完整版也无法安装,会提示有mini了。

So,我们得修改下,可以让完整版wpad内置进系统。

modify patch
通过patch的内容,我们可以定位到在package/kernel/xradio/makefile里,有关于xradio包的信息。我们将depends中的wpad-mini改为wpad

最后可以看到
luci-eap
已经支持带EAP的选项了。


结尾

总体来说,这玩意运行openwrt还是可以的,配合插件做旁路由应该也还行,毕竟便宜,价位低。虽然板载wifi模块性能不是很好,但是对付我宿舍的20mbps绰绰有余了。
最后,可以在橘子皮上开动自己编译出炉的OP了。


本文部分命令来自于lean源码的readme和香橙派官方文档

转载请注明