-
Notifications
You must be signed in to change notification settings - Fork 0
/
content.json
1 lines (1 loc) · 46.2 KB
/
content.json
1
{"posts":[{"title":"第一次随记","text":"不知道怎么写第一篇文章的标题 算是纪念一下2020.03.06这个日子吧。 我越在环工,就越感觉环工是有极限的。除非超越环工。 你在说什么啊,红雨。 我不做环工啦!kono电子哒! /2020.03.06,转专业成功。/ /2020.03.06,第一台ITX主机拼装完成成功开机。虽然硬件还很落后。/ 就是纪念一下这一天。算是个转折点吧。 /Author:Skrshadow/ /日期懒得写了,看上面/","link":"/2020/03/06/x1/"},{"title":"随记x2","text":"其实这一篇早就想写了。一直忙于各种东西没抽出时间。 今天是8.26号了。距离我1.10号那天晚上7点40左右拎着15kg沉的不锈钢机箱走上Z186次深圳开往沈阳的列车已经过了229天了。这场全程230天的假期终于要结束了。 想结束又不想结束。2333。矛盾的家伙。 不想结束是因为我这个地方,有烧烤,有我的好兄弟,有我鼓捣一晚上滴滴作响的仪器,有从早开到晚16度不怕冷不用担心电费的空调,有从下午3点睡到11点起床不会后背抽筋的床,也有我在家的那种奇怪的安心感。 想结束,是因为时间这个东西还在走。我不可能永远呆在这里的。就像今晚外面的雨一样,新鲜的空气,沙沙的声音和轻轻敲窗户的声音,几盏昏黄的路灯倒映在崎岖不平的公路上的水洼里面,时不时被夜里披着雨衣骑着自行车的行人溅起来化作悬浮在空中亮晶晶的水雾。风吹过窗户呼呼的响声,雨点打在玻璃上随着风向变成一条一条的水痕,路灯逐渐从亮点变成了玻璃上模糊不平的亮线。没有动漫里夜晚的漫天繁星,也没有电视里挂在天空中那轮皎洁的明月。只有时隐时现的积雨云云层和黄豆一样大小的水滴。如此这般,两小时之后,一切也会归于寂静。 人也是这样吧。80年风风雨雨,时而晴空万里。不管是什么,迟早都会消逝的。就像这场还没有停的雨。明天清晨,路面上的倒影会慢慢变浅,玻璃上的雨滴会一点一点挥发,甚至会有人不知道这场雨的存在。时间真的好快啊。特别是当你回头看你那些存在或者“不存在”的东西的时候。比如明年期末考试最后一科考完的我,兴奋的的打开电脑突然翻到半年前自己大晚上抽风写下的这篇文章的时候,大概也会向我现在想到我坐火车刚回家那阵的样子吧。等我毕业了想起大一那个考完试每晚都要出去看向北方的我,会怎么想呢2333,有点好奇。 翻一位大佬的随记,其中有句话说的就是我现在这个样子233,“你想一件事失败,就拖,拖着拖着,就凉了。”现在想想自己有多少是已经拖凉了的,有哪些是正在拖的马上要凉的。为什么要拖,说白了还是没对上兴致。懒倒是不存在,还不至于懒到27小时高强度设计PCB到趴电脑睡着(心疼键盘dnmd)。对啊,什么时候能改掉拖延症呢。是个好问题,建议明年自己再来考古一下看看自己改没改掉,没有就当当众处刑了wwwwww。 “不要回头。”一句听过别人和自己说过无数次的话。最后每次都忍不住还是回头看了几眼。看来这句话八成也只能说说了。因为自己没有能力做到的,因为自己蠢蛋没有做到的,因为不可抗因素无法实现的。比比皆是。每次都要试图看几眼,就像当初打开一个盒子看见的一句话:“当你读完这个盒子里的内容的时候,你就会明白当初的我为什么要把这个东西锁起来。”是啊。我现在明白了,但是盒子似乎已经锁不上了。不如把它藏起来吧,就像我从没发现过它一样。知道的越多负担越重。不如假装不知道,这样还可以轻松一点,仿佛压在自己上面的那座山消失了一样。不如珍惜现在眼前的,对对你好的人好。对对你不好的人也别给以后的自己留越想越气的回忆。就像我为什么当初选择了Hexo。我不想看见的从前,我是看不到的。我不想再看见那个无能为力的我。于是学习各种能找到的东西。不管是什么。结果到头来发现还是无能为力。真是个Loser。最美好的事情是虚惊一场。最糟糕的事情,不仅仅是失去,而是你就在注视着这个东西一点点消失掉,而你只能看着。回头看看,自己回头看看自己已经少了多少东西了。因为你的无能wwwwww。总是试图一个人解决掉。最后不仅没解决掉,后果hhhhhh。 看见一些群我一冒泡就喊我大佬2333,我是个锤子的大佬。只不过比你们都喜欢深究一个东西的原理而已。不研究透睡不着觉那种。并没比你们多什么。你们羡慕我能搞事情,我还羡慕你们有一个快乐的童年呢。你们没有盒子带来的困扰,只需要好好学习天天向上快乐玩耍。毕竟谁没有过好奇心呢。我这种所谓的“dalao”就是在你们不熟练的领域比你们熟练一点点的家伙而已。我又不是无敌的白金之星,没有无敌的5A面板。甚至多数情况下还是个憨憨。叫我大佬没必要的hhh,不如去这么叫真正NB的人。 大概SkyPE还会再放出来两个版本吧之后。有心情的话。封装之后会放一个LTSC版代替这个1803。要比它好用得多。不过目前还在测试中2333。 看见现在5775C大船来了,要不要找时间写个教程B85如何修改可以使用呢。算了反正写了也没人看hhh。不如直接联系我给你改算了。(有时间的话。) 等我新本子研究明白了大概会在这里提供一个思路吧。比如怎么把X299芯片组塞进笔记本。 似乎好像有人对我的固态U盘感兴趣?做第二个的时候录个视频给你们满足下好奇心好了hhh。理解为一个SSD硬盘盒的缩小版就行,没什么高级的东西。 溜了溜了。写这么多吧。写的乱七八糟的,不过倒是把我现在的心情说出来了hhh。 /Author:Skrshadow,”S.T.R”/ /2020.08.26,04.22.06 A.M/","link":"/2020/08/26/x2/"},{"title":"随记x3","text":"说实话这篇文章写了删删了写已经不知道多久了。 现在已经凌晨2.03分了,是学校的断网时间。暂且离线状态把文章打出来丢在这里。 终究还是没忍住,被电脑社那几个家伙气崩了。 说句不好听的,这特么哪里是电脑社,这怕是个宫斗社吧?全特么内部勾心斗角的,电脑社不讨论电脑,技术部没有技术。都是些什么东西?我还记得我三次退社行为的原因,第一次是不想掺和,第二次是看不惯内斗,现在是第三次。 今天谁也拦不住我,耶稣都不好使。我说的。 义修翻车擦屁股想到我们这些大二的了,去年义修翻车擦屁股的时候,你这个提议大二去擦屁股的人干什么去了? 啊,我给你翻译翻译,谁NB谁上,赶紧搞定,别烦我就对了。 真有你的啊。 决定换一换自己关于的目标,以前是决定毕业之前盘活这个社团。现在不一样了。 我要在我毕业之前,看着这个粪坑解散。哪怕是我下手做点催化作用。 无论曾经,还是现在,在我这里让我闹心的东西,都只有死路一条。 大概就像治疗肿瘤一样,物理阻断,靶向药物。 不说这个,来气。说点有点对我正向导向的。 如果真的像我那么计划的,2021.01.13应该是最后一科。 墙上校历的小斜杠画的是一条又一条,回家的日子也近了一天又一天。有点期待。 迄今为止,我还差一张自己的显卡,和一套电源。 攒钱不打算计划了。越来越乱。 不出意外的话,这周大概,就可以拿到校考安排表了。 这周马原,制图,Matlab。 难点在于Matlab。 下周体育,看运气。 再下周大物,复习时间略充足,威胁目前还没那么大。 剩下都是17.18的事情了。16开始也不迟。 再长远一点的考虑,就是考研了。 加油啊。 话说个人网站准备换服务器了。流浪主页计划hhh /2020.12.02,2.27.40 AM/ /By Skrshadow/","link":"/2020/12/02/x3/"},{"title":"Github常用的API","text":"记录一下Github的API,说不定后续的活能用上。 功能 api地址 请求方式 请求参数 返回参数 获取用户信息 https://api.github.com/users/{用户名} get path路径: 用户名 一个用户对象 获取用户所有仓库 https://api.github.com/users/{用户名}/repos get path路径: 用户名 返回一个数组 获取某个仓库的详细信息 https://api.github.com/repos/{用户名}/{仓库名} get path路径: 用户名 和 仓库名 返回一个仓库对象 获取某个仓库里根目录文件或文件夹数组 https://api.github.com/repos//{用户名}/{仓库名}/contents get path路径: 用户名 和 仓库名 返回一个首层文件或文件夹数组 获取某个仓库里子目录文件或文件夹数组 https://api.github.com/repos//{用户名}/{仓库名}/contents/{文件名或文件夹名} get path路径: 用户名 和 仓库名和文件名或文件夹名 返回一个文件数组 获取某文件的原始内容(Raw) 1. 通过上面的文件信息中提取download_url这条链接,就能获取它的原始内容了。2. 或者直接访问:https://raw.githubusercontent.com/{用户名}/{仓库名}/{分支名}/{文件路径} get path路径: 用户名 和 仓库名和文件l路径 返回一个文件内容的字符串 获取某个用户的跟随者列表 https://api.github.com/users/{用户名}/followers get path路径: 用户名 返回一个数组 获取某个用户正在关注谁列表 https://api.github.com/users/{用户名}}/following get path路径: 用户名 返回一个数组 获取某个用户加入的组织列表 https://api.github.com/users/{用户名}/orgs get path路径: 用户名 返回一个数组 repo中所有的commits列表 https://api.github.com/repos/{用户名}/{仓库名}/commits get - - 某一条commit详情 https://api.github.com/repos/{用户名}/{仓库名}/commits/{某一条commit的SHA} get - - issues列表 https://api.github.com/repos/{用户名}/{仓库名}/issues get - - 某条issue详情 https://api.github.com/repos/{用户名}/{仓库名}/issues/{序号} get issues都是以1,2,3这样的序列排号的 - 某issue中的comments列表 https://api.github.com/repos/{用户名}/{仓库名}/issues/{序号}/comments get - - 某comment详情 https://api.github.com/repos/{用户名}/{仓库名}/issues/comments/{评论详情的ID} get 评论ID是从issues列表中获得的 -","link":"/2021/08/15/gitapi/"},{"title":"随记x4","text":"事实证明我就不应该把任何“关键”的东西交给别人来完成。 从一个固件,到一个项目,再到一个显示器。 说到底,还是总是对奇怪的东西保持信任。 感谢你啊,让我对这个世界的信任又少了一分。 好像我从最初就是为了摆脱什么东西,最后什么都没有摆脱掉。 从那个不想去补课就是不学好,看心情被冷暴力,到现在的随便吵架并且听见不能回复。 是啊,总有人认为,做错了什么,只要过去了,你再提就是你不对。你不被允许有任何负面情绪。甚至曾经为了自己那点“脸皮”还需要别人早5晚11每天昏天黑地。以至于你累了,没状态了,还要质问你,“我可是花了钱的。” 更令人心烦的是,现在这种人居然还卡住了我的主要补给来源。 可笑,可悲。 “人一旦有了依赖,就像幼儿园等人来接的小朋友,会变得期待,害怕,最后甚至是绝望。所以啊,在这个世界上别太依赖任何人,因为你在黑暗中挣扎的时候,连你的影子也会离开你。” 好像算这次,想重开已经很多次了吧。各种各样的方式都有。要么失败了,要么怕被人看见之后引发心理阴影。 或许,从最开始我就该明白,这些人的“思维”从来都不会变。 太阳总会照常升起,而我却在阴影里,一遍一遍找着出去的路,最后只能坐在阴影里,希望阳光能照在别人那里。 ”天空阴云密布,风越来越大,本就没有几片树叶的树枝撕裂着风,发出刺耳的尖啸声。不知道什么时候下起了雪,迷途的家伙不得不裹紧自己的单衣,在白茫茫一片之中向着大致的方向走着。天黑了,这个迷路的家伙也用光了最后一根火柴,从此迷失在了这片无边无际的森林,和这永远不会停止的大雪里。“ 明明之前最喜欢雪的。 /Author:Skrshadow “901A”/","link":"/2021/08/22/x4/"},{"title":"随记x5","text":"年更(1/1) 每半年总结一下自己还是不错的。 转眼2021要过去了,时间过得真快啊。仿佛2020那个疫情假期还在上个月。 虽然时间过的确实快但是还是希望更快点,想回家想疯了(x) 划水摸鱼的半年基本确定了航向,之后就是规划一下自己的目标了。 总目标估计就是想办法赚钱了。虽然看起来会像是钻钱眼里了一样,但是现在想想,自己面对的困难,都是这个东西不足导致的。 终究变成了自己最讨厌的样子。 虽然一直秉承着“钱,够用就行”的理念,现在才发现“够用”这个目标究竟有多高。 不过,只要没有丢掉信仰,应该不会太困难的。 心中有信仰,万里不迷航。 大体计划就不在公网放了,这东西怎么脱敏都会暴露东西的。 想了想,只要自己的能力,配得上自己的收入,拿的钱能心安理得,就好了。 虽然存在看别人赚钱比自己丢钱都难受的人,但是我想,大多数人“仇富”的原因,应该是“我明明看起来比这家伙强,但是为什么这家伙就比我富”或者是“那资源给我,我上我也行,凭什么要是你”。虽然目前并没有出现这种思维,但是柠檬还是会柠檬的。 不过,相信自己。5岁的时候,我羡慕别人的自行车。10岁的时候,我对着别人的Core duo流口水。12岁的时候,我眼巴巴的看着别人的三星note3。17岁的时候,我羡慕别人家里的焊台风枪一应俱全。而现在,我都有了。“面包会有的,牛奶也会有的。”定一个目标去追求,总比无目的的盲飞要强。下一个10年计划,估计就是拥有自己的一亩三分地,能放下自己的设备,网络环境好,离工作的地方近的地方。这可不是个小项目hhh。 希望10年后的我,能坐在属于自己的房间里面悠哉悠哉的刷着自己的个人主页,计划着下个项目应该怎么规划,边想着,你看,10年前的自己真的是幼稚,就这点梦想能天天睡不着觉的想233。 希望自己能完成自己的这点小目标吧。战机要接敌了,准备抛掉副油箱了。未来是什么样子,我也不清楚,就像十年前的自己给现在的自己想了无数种可能一样。既害怕又期待。按照自己的方案按部就班的做下去就好了。没什么好焦虑的。 太阳终究会升起,而黎明前的阴影再次消失不见。虽然阴影依旧会到来,但是永远记住,光明和阴影一样,也是会出现的。 “迷途的笨蛋在森林里走着走着,终于看到了森林的尽头。雪停了,月光穿过乌云,照在覆盖大地的白茫茫一片上,反射着晶莹的光。那个家伙知道,自己再也回不去了。不如就这样,一直走下去好了。” “虽然周围满是绝望,但是请不要放弃心底的那一丝希望。” “请勇敢的,活下去。” /Author:Skrshadow “901A”/","link":"/2021/12/05/x5/"},{"title":"OpenWRT编译笔记","text":"这几天有群友问红雨的OpenWRT固件都是哪里来的,怎么才能找到一个能完美使用自己BCM57810网卡的固件,正巧内网主页有篇两年前写的文章,最开始觉得写的挺水的,就没发出来。修改一下发出来给大家参考一下吧。 怎么改都会很水的吧,为什么不去Google一下然后看看仓库Readme啊 时间: 2020.1.17 系统环境:Ubuntu LTS 源码Git仓库:https://github.com/coolsnowwolf/lede 1.配置环境123456789# 安装依赖sudo apt update -ysudo apt full-upgrade -ysudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \\bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \\git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \\libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \\mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \\rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev 2.下载源码包123# 下载源码包git clone https://github.com/coolsnowwolf/lede.gitcd lede 3.调整 feeds 源因为要使用JerryKuKu大佬的Argon主题,以及kenzok98大佬的一些软件包,方便起见直接添加二位大佬的仓库。 123456# 查看文件feeds.conf.default src-git packages https://github.com/coolsnowwolf/packagessrc-git luci https://github.com/coolsnowwolf/lucisrc-git routing https://github.com/coolsnowwolf/routingsrc-git smpackage https://github.com/kenzok78/small-packagesrc-git jerry https://github.com/jerrykuku/openwrt-package 4.更新 Feeds123# Updating Feeds./scripts/feeds update -a./scripts/feeds install -a 如果之前已经执行过这一步骤,建议在update之前先clean一下,以防出现一些奇怪的问题。 5.编译配置12345678910111213# 检查编译依赖make defconfig# 编译选项配置界面make menuconfig # 仔细看界面上面的帮助# 设置目标编译平台(Target System)->x86 # x86 应该是最后一个(Subtarget)->Generic(Target Profile)->Generic(Target Images) # 这里面是配置镜像参数的、包括生成的镜像类型、Kernel与Root分区的大小# 这里选择什么按照需求而定,比如我自己的软路由需要5G wwan支持,就需要按照华为模块的Linux内核集成手册来进行驱动集成,需要使用2.5G光猫猫棒,就需要启用bnx2x的相关支持。总之都是需求而定。用什么选什么,不要贪多编译一堆自己用不上的东西。# 以前启用BCM57810还要手动patch源码的,不过现在已经合入主线了,就不需要patch了。 6.开始编译12345678910111213# 下载编译所需文件make download -j8 # 因国内众所周知的网络环境,所以这个过程会很漫长,自己有科技这时候就打开用吧。# 第一次编译make -j1 V=s # 完成编译 结束。# 非第一次make V=s -j$(nproc) # 等待编译结束。# 编译时间视个人情况而定,红雨使用9900ks编译第一次进行了5小时,后续满速编译速度快了很多,只有不到半小时。建议打开ccache进行编译,这样速度会有不小的提升。启用方法是执行make相关命令之前在lede源码根目录下执行,执行一次即可,不需要每次编译之前都执行。echo -e 'CONFIG_DEVEL=y\\nCONFIG_CCACHE=y' >> .config; make defconfig#或者在make menuconfig时手动开启。# 编译生成的文件在bin/架构/ 下面 (例如./bin/x86/64) 7.测试测试自己的编译结果可以在VMWare建立一个配置近似于你软路由的虚拟机,系统选择其他Linux 5.x即可,硬盘大小随便填写,网络模式使用NAT。 建立完成后编辑虚拟机硬件,删除你最开始的磁盘,新建驱动器的时候从你编译出的vhdx文件建立即可。 如果不会如上操作的话。可以直接重命名原来的VHDX文件然后替换掉原来的硬盘文件。 开机后等待屏幕上的日志静止下来之后按任意键呼出shell,执行如下命令: 123456uci set network.lan.proto=dhcp # 因为op默认LAN设置是静态IP,如果想在虚拟机启动后用自己的主机访问到的话,就要把静态IP修改为DHCP(自动获取IP)。uci commit # 提交修改uci show network # 可以使用这条命令检查自己的修改是否生效/etc/init.d/network restart # 重启网络模块,应用上面的更改# 网络模块重新加载之后执行:ip addr #获取当前IP 然后把获取到的IP输入浏览器即可验证自己的编译结果。 8.写入磁盘我的软路由使用一个msata硬盘作为启动磁盘。 方案是2246EN双贴 Sandisk 15177 64GB 安装到硬盘直接使用win32diskmanager,PhysicalDiskWrite这类写盘工具写入磁盘即可,此处不做过多说明。 然后就可以使用自己的固件了。 /Create on 2020.1.19/ 9.后记又氵了一篇文章 其实在上面调试配置好自己的config和feeds之后就可以把编译工作交给Github Action了。无人值守,定期检测上游源码更新,编译完成自动上传到Release,简直不要太方便。 食用方法如下,也不做过多说明,大佬的教程基本上已经是傻瓜式的了。 https://p3terx.com/archives/build-openwrt-with-github-actions.html /Latest Update :2022.08.21/","link":"/2022/08/21/op/"},{"title":"随记x6","text":"年更(1/1) 这下真年更了 到2023年的5月中了,除了毕业的重修科目之外,本科阶段已经没有战斗了。去年寒假在车站挤着准备上火车,年底跑路宝安机场外面的引擎轰鸣声,家里窗户上的冰花,干燥寒冷的空气似乎都还历历在目,甚至今年的跑路也近在眼前了。 去年又是啥也没做成的一年。虽然说注重过程淡化结果,大不了当技术积累,但是心理上还是挺难受的。 去年最大的遗憾大概就是今年的考研了。无论是因为模拟分数远未达到目标所需分数,或者为了跑毒,还是因为还憋着一口被迫换学校的气,总之都是放弃了。不过也不能说是完全放弃了吧,只不过打了个365天的加时赛而已。毕竟,我自己的字典里从来没有“什么年纪就该去做什么事”这一说,就算有,也绝不是为了某些人的指标、好看的数据或者提成,放弃应届生身份签所谓的三方协议,用自己的未来换你的奖励。我需要做的,就是朝着自己已经既定的目标,加满油,挂上该挂的挂载,把节流阀开到最大,不遗余力,合规合法的情况下不择手段的前行,就足够了。 有时战术上的撤退才能带来战略上的胜利。 当然,某些人尽可以打着为了我们好的旗号,在每个人的宿舍用你那两张漂亮的嘴皮子和每位同学都说一遍“有的同学在该考研的时候没去,不该考研的时候去考研”。而我会按照自己的需求,来决定我什么时候该去做什么样的事。 搁哪宣传台风天上班是因为快乐的逆天言论也就算了,来了句父亲节最好的陪伴是加班我是理解不了了,人家父亲节都在陪自己的父亲游山玩水,没出去也起码陪陪自己的爹,合着你爹养你快三十年你反手认自己老板当亲爹了是吧23333 倒是度过了除了2020年那次一学期的寒假之外过的最长的一个假期。 下半年的工作,大概就是为了研究生招生考试而奋斗了吧。 “学习”从来就不是一个独立的概念,12年小初高似乎一直在割裂“学习”和“实践”这两件事,在大学也并没有把这两项东西缝合在一起,多数还是学了,但是不知道有什么用。不过这种情况大概也不是我这样的家伙能改变的吧。严于律己,宽以待人。自己做好,能享受自己的成果就够了。有些人是带不动的。 放下助人情节,尊重他人命运。 这个网站似乎当初上线的时候我还刚来大学半年,转眼我马上就要毕业了,挺感叹的。 “我已经很努力了啊,但是我还是失败了。” “那就再努力一点,你还有机会啊。” “但是我不想失败,我能做好的都没做好,唯一没出的意外就是总是出意外,我真的还要再尝试下去吗?” “如果成功率不等于0,且不会导致什么大于结果的副作用,那为什么不继续做下去呢。毕竟,你现在放弃了,之前的努力,可就都白费了啊。” 是啊,天亮前的夜,可最难熬了。时间可不会在这里停下等待啊。 /Author:Skrshadow “901A”/","link":"/2023/05/16/x6/"},{"title":"记一次红米AX6的解锁刷机扩容过程。","text":"前情提要月初搬家了,为了保证网络设备最高控制权掌握在自己手里,于是在新房子拉了两条宽带,自己加钱独占一条,两个舍友合租一条。但是因为分家的时候,原来的AX3000分给了我的舍友,自己只剩一个远古时代的AC2100勉强使用。然而MT7621确实已经老了,再加上机器本身因硬件问题并不稳定,半小时一掉线两小时一重启,最后忍无可忍上了这台AX6,以RA69之名62块钱(含邮费)到手,但是原装固件懂得都懂,于是有了这篇文章。 说明本篇文章适用于 红米 AX6,以及后出的小米 AX3000 / AX6000机型。对于猴米新 AX3000 产品,推荐立即退货。 因红雨在自己折腾的时候并没有截图记录,所以本文图源网络,侵删。 Warning!本文采取的方式将会使你刷回官方固件的难度大大增加!执行过程中请若未提到请尽量采用有线方式连接你的AX6!否则可能出现包括但不限于路由器变砖,心态爆炸,键盘,鼠标等外设被砸坏,血压升高,眼前一黑等症状。为了您的健康和您的路由器正常工作,请不要采取任何冒险的操作!除非你知道你在做什么并且准备为此承担其可能的后果! 准备 一台搭载了 OpenWrt 系统的无线路由器(下称辅助路由器) 红米 AX6(Redmi RA69) 一台支持网线连接的电脑(下称电脑) 解锁SSH登入 AX6 后台,检查固件版本。 推荐的版本号为:MiWiFi 稳定版 1.0.16(点此下载),本教程仅保证在该版本下有效 若版本号不匹配,请先升级 / 降级固件。 将电脑与辅助路由器通过有线连接 进入源码目录,假设辅助路由器地址为 192.168.1.1,则: 在这里下载wireless.sh,你也可以直接wget到路由器里执行脚本。 使用WinSCP将wireless.sh上传到辅助路由器的root目录下。 然后通过 SSH 连接,执行下面的命令(按回车确认) 警告: 执行本脚本会更改您的网络和无线设定,执行之前请务必备份相关数据 1sh /root/wireless.sh 将电脑与辅助路由器的有线连接断开,连接到你的AX6上。 登入路由器后台,获取 STOK(http://192.168.31.1/cgi-bin/luci/;stok=xxx 其中的 xxx 即为 STOK) 然后访问下面的 URL(STOK,ssid和pwd替换后均不含尖括号): 1http://192.168.31.1/cgi-bin/luci/;stok=<stok>/api/xqsystem/extendwifi_connect_inited_router?ssid=<ssid>&password=<pwd>&admin_username=root&admin_password=admin&admin_nonce=xxx 其中 为上一步获得到stok值, 为辅助路由器的wifi名 为辅助路由器的wifi密码 ,请根据实际情况填写。 等待一会,当浏览器显示 code 0 则表示 破解SSH成功, root密码查看5GHz频段WiFi密码即可得到。 SSH解锁后不要重启!重启就白解锁了! 扩容刷机解锁ssh后,如果我们想刷入OpenWRT固件,那么可以选择不扩容,将A/B分区其中一个刷为OpenWRT,或者合并mtd13和mtd14(RootFS_1和OverLay)以获得60MB的空间写入固件,或者采取本文所记载的方式,合并mtd12(RootFS),mtd13(RootFS_1),mtd14(OverLay),以获取100+MB的空间写入固件。 下文提到的“路由器”均为你的AX6,辅助路由器解锁完成SSH之后就完成了它的使命了,可以丢在一边了。 使用ssh连接你的路由器,逐一执行如下命令: 12345678910nvram set flag_last_success=0nvram set flag_boot_rootfs=0nvram set flag_boot_success=1nvram set flag_try_sys1_failed=0nvram set flag_try_sys2_failed=0nvram set boot_wait=onnvram set uart_en=1nvram set telnet_en=1nvram set ssh_en=1nvram commit 使用WinSCP将QSDK底包上传到/tmp目录。 底包下载地址 : openwrt-redmi_ax6-squashfs-nand-factory.ubi 然后执行以下命令: 12345ubiformat /dev/mtd12 -y -f /tmp/openwrt-redmi_ax6-squashfs-nand-factory.ubinvram set flag_last_success=0nvram set flag_boot_rootfs=0nvram commitreboot 若在执行ubiformat命令时,出现 “please, first detach mtd12 (/dev/mtd12) from ubi0”,则将mtd12改成mtd13,后面命令里的0改为1。 修改完成的命令如下: 12345ubiformat /dev/mtd13 -y -f /tmp/openwrt-redmi_ax6-squashfs-nand-factory.ubinvram set flag_last_success=1nvram set flag_boot_rootfs=1nvram commitreboot 等待AX6重启后浏览器输入 10.0.0.1 即可进入openwrt底包后台(用户名密码均为root)。 使用WinSCP登录路由器,将ax6-uboot.bin 和 ax6-uboot-mibib.bin 上传至 /tmp 目录。 这两个文件可以在这里获得 执行以下命令: 1234mtd erase /dev/mtd1mtd write /tmp/ax6-uboot-mibib.bin /dev/mtd1mtd erase /dev/mtd7mtd write /tmp/ax6-uboot.bin /dev/mtd7 命令执行完成后直接拔掉电源!否则会变砖头! 将电脑IP手动设置为 192.168.1.100,连接路由器的LAN口到电脑的RJ45接口上, 按住Reset重置孔的同时插入电源, 等待System LED变成黄灯后松开 Reset, 浏览器打开 192.168.1.1 即可进入 U-Boot。 (可以在浏览器提前打开192.168.1.1,再按住Reset插入电源,Uboot的Web界面出现后立刻松手,TTL可以发现这个Uboot是利用Reset连续被按下五秒钟触发中断的,所以其实不一定非要等到LED变黄,自己多把握几次就知道差不多是多久了。) 界面如图: 选择上面刷过一次的QSDK底包再次刷入即可。 如果正确执行以上步骤仍无法进入Uboot的Web界面,则可以检查一下路由器网口上的网线是否有且只有路由器到你的电脑的这一根网线。如果有其它的线,请不要图省事,全部拔掉,只留下路由器到你电脑的这一根网线! 将电脑网络设置还原为自动获取IP和DNS, 等路由蓝灯常亮后 浏览器 输入 10.0.0.1 进入OpenWrt底包后台,利用Web界面刷入你准备好的sysupgrade固件即可,等待开机即可正常使用。 内存扩容以上命令执行完成后,你应该可以获得一个运行OpenWRT的AX6。但是众所周知,OpenWRT的灵魂之一就是可以安装并扩展插件。为了保证这些插件可以流畅运行,所以对我的AX6进行内存扩容操作。 注意:这步操作风险很高!对硬件进行修改很有可能导致你的路由器发生不可修复的损坏!非专业人士请勿操作! 准备工作你需要以下物品可完成此项操作。 元器件:MT41K512M16HA-125(D9STQ) 软件:Xshell等支持ssh的终端工具,WinSCP等SCP协议文件传输工具,AX6的1GB CDT文件(点此下载) 工具:焊台,热风枪,镊子,助焊剂等贴片焊接工具。 确保你的路由器没有还没用的保修。 更换颗粒参考ACWIFI的拆机教程拆开外壳。 需要注意的是,该教程没有提到底部的贴纸下面还有两颗螺丝!一定要拆掉否则大力会掰断上盖! 放心,我自己的没掰断 拆开之后大概长这个样子 拧掉四个螺丝,移除铝制散热片。 如果在这一步很难移除散热片,可以尝试用镊子的尾巴去捅散热片和屏蔽罩之间的导热垫。捅两下就开。但是不要刮到下面的PCB,刮断了就寄了。 移除左下角空焊的TTL旁边的屏蔽罩。(是这个板子上最大的那个金属壳) 如果用镊子从下面撬不动的话,可以试试用硬质的东西伸到转角处的夹缝位置掰到微微翘起再撬,撬开一个角就不要上镊子了,直接上手扣就行。指甲可比镊子尖要安全得多。 撬开之后如图(此处引用ACWIFI的图片,侵删。): 我们需要更换的就是途中的EM6HE16EWAKG-10H那个芯片。 侧边加少量焊油(助焊剂),2008D风枪360度50风速转圈加热,用镊子轻轻推动芯片,发现芯片活动即可将其取下。 加一点焊油润滑,使用吸锡带清理干净焊盘,使用洗板水把焊盘擦干净。 在干净的焊盘上抹薄薄一层焊油,把植锡后的D9STQ放上去,尽量对准主板上的焊盘。 风枪360度40-60风均匀预热后集中加热芯片,看到芯片自动归位动作后可以停止加热。 更换完成后效果如图所示: 等待温度降到室温后则可以插电测试。 刷写CDT如果以上步骤没有出意外,则此时应该已经可以开进进入OpenWRT,概览界面此时应该还显示是512MB可用,因为还没刷CDT,系统只能用到其中原来那部分的内存空间。通过刷新CDT分区就可以解决这个问题。 使用WinSCP连接路由器,将cdt文件放入tmp分区下,执行以下命令。 12mtd write /tmp/cdt-AX6_1G.bin /dev/mtd5reboot 重启后应该就会认到900多MB的可用内存了。 Q/AQ:为什么要刷两遍QSDK? A:因为小米官方固件采用的是A/B系统方案,RootFS和RootFS_1对应着A系统和B系统,每次更新会刷新另一个分区的数据,比如在A分区系统更新就会把固件写入到B分区,更新结束之后会自动重启到另一个分区。第一次刷写的QSDK就是把QSDK底包刷写到了非活动状态的另一个分区中,再通过命令把启动分区切换到被刷入QSDK的分区中实现底包刷写的。刷这一遍是因为在小米官方固件下,mtd相关的命令(刷写Uboot时使用的mtd write/erase)是无法使用的。所以需要刷一遍这个底包来让这两条命令可用。 在Uboot下刷的第二遍QSDK底包是因为在刷Uboot过程中,刷入的位于mtd1的mibib文件修改了设备本身的分区表,将原来的RootFS,RootFS_1,OverLay三个小分区合并成了一个大的RootFS。原来刷入的QSDK因为分区表改变了自然无法正常启动。这次刷入是为了把这个底包刷入到这个大的RootFS分区中,之后刷sysupgrade固件的时候就会直接把固件写入QSDK所在的大分区中了。就是“扩容刷机”中的“扩容”。 总结一下就是第一次刷是解锁一些命令的使用权,第二次是为了向扩容后的分区写入OpenWRT。 Q:AX3600解锁的时候不是一条链接就搞定了吗?为什么AX6这么费劲? A:小米全系列Wifi6除了最先出的AX3600之外固件都对原来的方式做了修复,原来的方式已经失效了。不信你可以自己去试试。 Q:我解锁完SSH之后5G密码并没有改变,我该去哪里获取我的SSH密码? A:https://www.oxygen7.cn/miwifi/,点击链接进入网页。 以上网站似乎失效了,索性在这里丢一个算号器得了,直接把SN输入到下面的框框里就能算出默认SSH密码了。 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases. */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = \"\"; /* base-64 pad character. \"=\" for strict RFC compliance */ var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); } /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\"; } /* * Calculate the MD5 of an array of little-endian words, and a bit length */ function core_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 < ((len) % 32); x[(((len + 64) >>> 9) < 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Calculate the HMAC-MD5, of a key and some data */ function core_hmac_md5(key, data) { var bkey = str2binl(key); if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); return core_md5(opad.concat(hash), 512 + 128); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw < 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num < cnt) | (num >>> (32 - cnt)); } /* * Convert a string to an array of little-endian words * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. */ function str2binl(str) { var bin = Array(); var mask = (1 < chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) < (i%32); return bin; } /* * Convert an array of little-endian words to a string */ function binl2str(bin) { var str = \"\"; var mask = (1 < chrsz) - 1; for(var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); return str; } /* * Convert an array of little-endian words to a hex string. */ function binl2hex(binarray) { var hex_tab = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\"; var str = \"\"; for(var i = 0; i < binarray.length * 4; i++) { str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); } return str; } /* * Convert an array of little-endian words to a base-64 string */ function binl2b64(binarray) { var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"; var str = \"\"; for(var i = 0; i < binarray.length * 4; i += 3) { var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) < 16) | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) < 8 ) | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); } } return str; }","link":"/2022/09/17/ax6/"}],"tags":[{"name":"随笔","slug":"随笔","link":"/tags/%E9%9A%8F%E7%AC%94/"},{"name":"一点小芝士","slug":"一点小芝士","link":"/tags/%E4%B8%80%E7%82%B9%E5%B0%8F%E8%8A%9D%E5%A3%AB/"},{"name":"Git","slug":"Git","link":"/tags/Git/"},{"name":"OpenWRT","slug":"OpenWRT","link":"/tags/OpenWRT/"},{"name":"Router","slug":"Router","link":"/tags/Router/"}],"categories":[{"name":"一点小芝士","slug":"一点小芝士","link":"/categories/%E4%B8%80%E7%82%B9%E5%B0%8F%E8%8A%9D%E5%A3%AB/"},{"name":"随笔","slug":"随笔","link":"/categories/%E9%9A%8F%E7%AC%94/"}],"pages":[{"title":"About","text":"关于网站该网站2017年在内网的全志H3上首次开启服务,主要用来记录日常和用作笔记本。 现在Blog基本只用来写写教程发发电了,笔记拆出来使用Focalboard依旧存储在内网中。 网站原定位是内网Blog放出,进行了一些删减。这里只展示自己愿意展示的内容。 因为3月1日晚迁移时的误操作导致原来评论区数据丢失,直接拿这个当借口迁回Hexo了。 文章只保留了发的牢骚和一些看起来有用的教程,其他的话,就当这个站重新来过好了。 关于我一只普通的毕业大学生,正在绝赞再次考研中。 嵌入式软件编码苦手,硬件就一玩连连看的。 焊接技术赛博庸医,不点亮单片机或释放魔法烟雾就算胜利。 在去年年底深刻体验了基础不牢地动山摇后,正在恶补需要的基础知识。 正在进行的项目有一个正在仿制Un5.2的焊台,软件上在炼一个能进行简单PCB设计的丹。 进度为新建文件夹) /Author:Skrshadow/","link":"/about/index.html"},{"title":"Links","text":"1234名称:红雨的小本本地址:https://blog.sumika.icu/图标:https://blog.sumika.icu/img/avatar.jpg描述:Press Forward With Indomitable Will. 以上是本站信息,如果想互换友链请在下面留言~会不定期处理哒 w如果友链挂了并且红雨没手动找到备用的地址的话是会被移除的哦~ .friends { display: flex; align-items: stretch; justify-content: space-between; flex-wrap: wrap; margin: -6px; } .friends .friend { margin: 6px; min-width: 240px; flex: 1; display: flex; align-items: center; justify-content: center; border-radius: 10px; border: 1px solid rgba(200, 200, 200, 0.2); background-color: rgba(200, 200, 200, 0.1); position: relative; } .friends .friend.friend-empty { border: none; background: none; } .friends .friend .friend-avatar { flex-shrink: 0; margin: 8px; width: 60px; height: 60px; line-height: 60px; border-radius: 30px; background-color: rgba(200, 200, 200, 0.2); background-size: cover; background-position: center; font-size: 24px; text-align: center; } .friends .friend .friend-detail { flex: 1; width: 0; display: flex; flex-direction: column; margin: 8px 8px 8px 0; } .friends .friend .friend-pop { position: absolute; width: 100%; left: 0; bottom: 0; } .friends .friend .friend-pop div { position: absolute; width: 100%; top: 8px; left: 0; padding: 8px; color: rgba(255, 255, 255, 0.9); border-radius: 10px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.6); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); z-index: 10; user-select: none; pointer-events: none; transition: opacity 0.5s; opacity: 0; } .friends .friend:hover .friend-pop div { opacity: 1; } 186酱的个人主页 186526.xyz 186酱prprprpr 三线大佬的Wiki wiki.sanxian.tech 三线N*(被堵嘴拖出去 Dmcimi的个人主页 blog.dmcimi.top Dmcimi 自留地 欧阳淇淇的小屋 ouyangqiqi.cn 只是个会玩脚本不会写的傻白甜. Atmosphere blog.awa.moe IN PURSUIT OF FREEDOM 清羽博客 blog.chingjyu.cyou The heart beating for freedom will never stop 铃萤-RinLin's Blog rinlin-nya.github.io 风过回廊,铃萤有声 康康的个人主页 whatk.me 是强大的康康 LcHnAn的个人主页 blog.lchnan.cn 致世界上所有的美好","link":"/friends/index.html"}]}