Total Pageviews

Saturday 12 August 2017

嵌入式系统 Padavan

斐迅的 K2 可以刷入其他系统,比起我之前的烂路由稍微有点可玩性,于是动手刷入 Padavan
K2 的 CPU 是烂大街的 mt7620,虽然是烂大街的东西但是无线驱动说不开源就是不开源,导致一大批的开源固件无线信号很差,所以为了无线信号只能选择 Padavan 。

Padavan

Padavan 是基于 BusyBox(也就是 Linux-based kernel)的嵌入式 Linux 系统,和
OpenWRT 一样都是开源的
不过他跟 OpenWRT 最大的区别就是为了保护系统不受破坏,大部分的目录是不可写入的
这也注定了它与涉及修改内核参数之类的操作无缘,不过这么做也有好处,你不会轻易的把路由器系统玩坏

安装

我的路由器是 K2,网上刷入其他人编译好的固件的教程已经有一大堆了。但是要注意的是如果你的固件版本高于等于 22.4.6.3 或者路由器型号是 A6,那么只能通过后台管理页面的漏洞刷入
刷入第三方 Bootloader :
上面那个链接是刷入新的 Bootloader——Breed,原文内容没什么大毛病(毕竟是 Bootloader 作者发布的内容),不过由于最近 Breed 全站强制
HTTPS 了,而 K2 官方固件自带的 wget 无法正常访问HTTPS 资源(不知道是因为没有根证书还是 wget 为不支持 HTTPS 的版本),总之用 Breed 官方提供链接无法刷入
其他的操作均相同,但是在第五步时请修改为
05 | wget http://77l50c.com1.z0.glb.clouddn.com/breed-mt7620-phicomm-psg1208.bin
不要按照原文章第五步的内容来执行 ,其他均相同
刷入 Padavan:
成功进入 Bree d后即可自由刷入固件,Padavan 我推荐使用这个固件 ,固件的内核版本是3.4
路由的管理页面是 192.168.2.1 ,默认用户名密码都是 admin,SSH 默认是不开启的,需要自己前往 Advanced Services > Administration > Services > Enable SSH Server 选择 Yes 开启,用户名密码与登录管理页面所使用的相同而不是 root ,毕竟 root 是拥有最高权限的,如果能使用的话不可写入便毫无意义
需要注意的是如果上级路由器的 IP 段为 192.168.2.0/24 需要先拔网线解决 IP 地址冲突才能正常使用路由器

交叉编译

由于受硬件性能所限制,在路由器上进行编译是不大现实的,而 Padavan 还去除了 Entware 的相关模块,所以要跑点其他东西只能进行交叉编译了。
K2 的 CPU(mt7620)的架构是 MIPS 中的
mipsel,通常使用的运行库为 uClibc ,最开始我参考 OpenWRT 的 wiki 使用 mipsel-linux-gnu-gcc 和 mips-openwrt-linux-gcc 两个参数来交叉编译,编译得到的二进制文件在路由器上不能正常运行。
偶然间发现 Padavan 项目上有关于 toolchain
(工具链)的介绍,如果要交叉编译的话需要使用专用的工具链,项目上只提供了源代码,没有已经编译好的工具链。
考虑到编译是一个费时间的过程我已经把内核为
3.4.x 的 toolchain 编译好了,丢在了 Github / Coding 上,需要可自取。
当然,你也可以自己编译。如果你需要内核 3.0 的
toolchain 你只能自己编译了,编译方法在
README 有进行说明。

文件系统

上面有提到 Padavan 的大部分目录都是只读的,其实只有少数目录会提示 Read only file system ,其他的目录是可写的,但是写入的内容并不会被保存,除 /etc/storage 目录以外的写入在重启之后就消失了。
查看文件系统的结构:
/ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    3584      3584         0 100% /
/dev/root                 3584      3584         0 100% /
tmpfs                        8         0         8   0% /dev
tmpfs                     4096      1776      2320  43% /etc
tmpfs                     1024         4      1020   0% /home
tmpfs                        8         0         8   0% /media
tmpfs                        8         0         8   0% /mnt
tmpfs                    24576        80     24496   0% /tmp
tmpfs                     4096        56      4040   1% /var
可以发现除系统的关键目录以外其他的目录均为 tmpfs ,这和 RamDisk 很像,都是把数据暂存在内存上,所以在大多数目录里所做的修改在没有执行保存脚本之前并没有真正的写入 Rom 里,如果没有保存重启之后数据便会丢失了。
系统提供了一个管理脚本用于管理暂存在内存的数据,脚本的绝对路径在 /sbin/mtd_storage.sh ,有
load|save|backup|restore|erase|reset|fill 等参数,各种参数我这里不多做介绍,翻译一下就能知道。
为了方便日常使用脚本做了别名的指定,只需要执行 mtd_storage.sh save 即可快速保存数据。

最后

在这一段时间的使用感觉还是不错的,不过受路由器硬件限制也做不了什么大事情,所以目前我只在上面弄了纸飞机
如果真的对嵌入式 Linux 感兴趣的话建议购入 ARM 板来折腾,比如树莓派之流,不管是硬件还是
wiki 文档还是可玩性都好很多
切记:在修改完 /etc/storage 下的文件后记得执行 mtd_storage.sh save 保存,否则所做的修改在重启或者断电后会丢失。
 from  https://blog.aofall.com/archives/13.html

No comments:

Post a Comment