Warning: Undefined array key "id" in /www/wwwroot/xtremedev/usr/plugins/MenuTree/Plugin.php on line 235
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废话,一张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,进入前确保终端的窗口大小足够,不然无法打开。进入后选中我们需要的配置。
关于输出的格式,默认会是squashfs的img,我们更换为ext4(squashfs后遗症)。
注:图中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)
根据我图上的信息,我的tf卡是/dev/sdb,我的镜像名重命名了op.img,我cd到了我img的目录下,执行:
sudo dd bs=1M if=op.img of=/dev/sdb
等待它写入完毕。
调整SD卡空间
这一步貌似是可以用resize2fs代替的,但是既然都在linux环境下了,我就直接用gparted调整了
dd以后,rootfs的总空间将会变成你镜像大小的空间。我16G的tf卡剩下那么多总不能浪费了啊。于是我们调整它的大小,打开Gparted,没有请安装或别的代替。
选中/dev/sdb(自行调整),先将ext4分区的rootfs分区卸载,然后右键选择调整大小,直接拖满(也可以自行决定多大,或者多分区)
结束
(迫真)
将TF卡插入橘子皮,通电,lan口连电脑(路由也行),浏览器打开192.168.1.1,将会看到luci界面。lean大的固件默认密码是password,随后ssh也可以登录上。
最后上一张图
==============分割线================
" 后 续 工 作 " Part1
(修复板载wifi)
由于橘子皮zero的板载wifi模块是XR819,貌似lean大的源码里不支持。。听说官方op编译出来是正常的。也就是官方OP正常的话就不用看了。我们需要手动处理这个问题。
github上可以找到xr819的patch,给openwrt适用的(感谢作者)。项目链接。
首先将这个项目clone到本地。
然后,点进去,你会发现有这几个目录。
那么,我们用的是lean大的源码,现在走的是5.4内核走的是4.19的内核,同样进入所以我们先进入“add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master-4.19”这个目录。
里面有两个patch一个readme,readme是俄文,凑合能猜得出意思。我们把这两个patch复制到op的源码目录下。
然后在源码目录下打开终端。
输入:
patch -p1 < add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master.patch
patch -p1 < add-on_wifi-mac80211.patch
====================================
0712更新:
由于源码变动,patch前先修改add-SOC_AUDIO-usb2-usb3-opi_zero_openwrt-master.patch文件,几个地方需要更改
1.
patches-4.19需要改成patches-5.4,有多少个改多少个
2.
同理,config-4.19改config-5.4,有多少个改多少个
3.
文件名变动,源码里文件名改为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的文件,就是存在的冲突
可以看到,+号的为添加段,-号为删除段
那么为什么存在冲突呢
我们查看源文件关于zero的这一段
可以看到,样子已经大变了,所以打补丁时找不到,很正常,所有我们需要手动处理上去
根据rej里的我们可得知,需要动的为DEVICE_PACKAGE段,即选中的这个设备且要带的包,我们手动补上即可
同时,可以看到,我们需要修改的文件里也没有关于xradio的,一起加上即可
即修改效果:
其他的就看自己的理解了(
====================================
解决完了后,开始编译,如果先前编译过,先进行一次makeclean,然后make defconfig后再编译,编译命令参照上面。
注:打完patch后xr819是默认=y的,也就是参与编译,所以不用menuconfig里在无线模块选中它。
注X2:firmware会在make的时候进行下载,请确认“网络连接通畅”
出包后,刷入,不出意外的话板载wifi就可以工作了
==============分割线X2==============
“后 续 工 作” Part2
这一步仅写给有需要的人,例如和我一样过EAP认证的
EAP认证需要WPAD(完整版),而op默认带的是mini版。原本这玩意可以在后期通过opkg卸载然后换版本,但是有个不大不小的问题,导致我们还得从源码整(
先。分析问题。
在menuconfig里。我们可以看到,wpad-mini无法被取消,根据help,看出,kmod-xradio依赖了这个。这个xradio,就是xr819。选中了mini的情况下完整wpad是只能做modules编译的,而且opkg无法卸载,会提示被xradio依赖,而且wpad完整版也无法安装,会提示有mini了。
So,我们得修改下,可以让完整版wpad内置进系统。
通过patch的内容,我们可以定位到在package/kernel/xradio/makefile里,有关于xradio包的信息。我们将depends中的wpad-mini改为wpad
最后可以看到
已经支持带EAP的选项了。
结尾
总体来说,这玩意运行openwrt还是可以的,配合插件做旁路由应该也还行,毕竟便宜,价位低。虽然板载wifi模块性能不是很好,但是对付我宿舍的20mbps绰绰有余了。
最后,可以在橘子皮上开动自己编译出炉的OP了。
本文部分命令来自于lean源码的readme和香橙派官方文档
转载请注明
不出意外地话会有两个冲突,自行解决冲突。这里就不说如何解了。。基本就是手动修改下文件。。
========================================
小白嘗試自己編譯,求解決衝突的指引。。。
另melsem已經更新了5.4的patch,方便的話也請大佬更新一下過程(☆ω☆)
By 18016916999 at March 25th, 2021 at 11:01 am.
@18016916999
加上了,并且带了个例子(
By rote66 at March 25th, 2021 at 05:50 pm.
大佬,我今天新拉取的lean大的源码进行编译,编译之后opi zero并没有无线选项....
请问是不是仍然需要patch,或者是需要在lean大的最新源码make menuconfig后的Wireless Drivers 选中xr819?
但我没看到kmod-xradio或者xr819名称的驱动,使用/搜索
请求指教 \(。•ˇ‸ˇ•。)/
By Yashlaning at February 23rd, 2021 at 08:48 pm.
@Yashlaning
刚刚我同步了一份下来看,貌似确实没找到xr819的东西,还是接着打patch吧
By rote66 at February 23rd, 2021 at 09:08 pm.
能求一下带wifi的固件吗?
By 林中鸟 at December 26th, 2020 at 08:42 pm.
@林中鸟
不好意思哦我手头现在没有现成的固件,你可以看另一个简易版教程,用github action来进行编译
By rote66 at January 26th, 2021 at 03:11 pm.