咸鱼派的启动配置

最近刚拿到了一个咸鱼派的测试板子,准备自己把 U-Boot 和 Linux 内核这一套东西跑通,都用主线的东西,尽量减少魔改的部分。首先是编译 u-boot,我用的是现在的 master 分支的最新版 99431c1c: $ # Archlinux $ sudo pacman -Sy arm-none-eabi-gcc $ make LicheePi_Zero_defconfig $ make ARCH=arm CROSS_COMPILE=arm-none-eabi- -j24 这时候会得到一个 u-boot-sunxi-with-spl.bin 的文件。我们只要把它写到 SD 卡的 8192 偏移处,就可以把 U-Boot 跑起来了: $ diskutil unmountDisk /dev/disk4 $ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/disk4 bs=1024 seek=8 接着我们做一下分区。我采用的是 MBR 分区,这样保证不会和 U-Boot 冲突。使用 fdisk 进行分区,我从 1M 处开始分了一个 10M 的 FAT-32 分区作为启动分区,然后之后都是 EXT4 的系统盘分区。接着就是编译内核。 我用的是八月份时候的 4.18.2 内核,虽然不是很新但也足够新了。一番调整内核参数后,得到了一个可用的内核,然后把 zImage 和 sun8i-v3s-licheepi-zero.dtb 都复制到刚才创建的 FAT-32 启动分区,然后进入 U-Boot 进行启动:

Read More

使用 HomeBridge 把小米空气净化器加入到 HomeKit 中

受 @NSBlink 安利,自己部署了一下 HomeBridge ,然后在 iOS 的家庭上就可以看到它。然后,通过 homebrdige-mi-airpurifier 和 miio 按照教程进行配置。然后就可以在家庭里看到小米空气净化器,包括空气质量,湿度,睡眠模式,温度,打开状态。然后我就可以做一些配置,如离开宿舍的时候自动关闭空气净化器,回来的时候自动打开。不过由于自己没有一个一直放在宿舍的 iPad、Apple TV 或者 HomePod,失去了中枢,这个功能可能会打折扣。 后续想买一些智能的灯啊,然后就可以用 Siri 进行打开 / 关闭了。 此外,我又试了下,可以用 homebridge-camera-ffmpeg 把摄像头配置到 HomeKit 中。这样,就可以远程查看视频流了。

Read More

部署 adminMongo 的 Docker 镜像

之前在软工的平台上部署了一个 MongoDB,但是自然是仅内网访问,想要浏览内容只能通过网页上的 Console 进去看,体验特别不好。所以想着能不能找一个在线的 MongoDB 浏览器。由于软工平台只能部署 Docker 镜像,所以我找到了mongo-express和adicom/admin-mongo。但软工平台现在还没实现环境变量的配置,所以我选了后者。 首先本地创建一个 app.json,让它监听 0.0.0.0:80,通过 deployer 传到平台上的配置,然后再把配置 mount 到 /app/config 路径上。现在就可以成功地在网页上浏览 MongoDB 了。

Read More

OpenWRT 上配置 Gandi DDNS

一直想给自己的 OpenWRT 路由器添加 DDNS 功能,但 Gandi 不在官方的 ddns-scripts 列表中,自己在网上找了一些脚本,发现是 Python 写的,尝试把 Python 安装到路由器上又发现空间不够,虽然可以安装到 USB 上,但总归是麻烦。 最后找到了官方的一个脚本,非常适合我的需求。简单修改一下,然后安装一下支持 HTTPS 的 cURL: $ opkg update $ opkg install ca-bundle $ opkg install curl 然后把脚本添加到 crontab 即可。

Read More

ETC 比赛无线网络搭建小记

正好上着李贺武老师的《无线移动网络技术》课,然后今天又给 ETC 比赛搭建无线网络,于是周二的时候找老师咨询了一下意见。我们大概给老师讲了一下场地的样子和尺寸(当时估计的大了),然后老师给我们提供了一个可以供参考的部署方案,包括几个 AP 分别放在哪,这些 AP 的 2.4GHz 都用哪个 channel,然后都用多少功率。并且很友善地在周五的时候让助教来场地帮我们 survey 一下无线网络的状况。我们用 Fluke Networks 的 AirCheck Wi-Fi Tester 看了一下场地的各个频道的 AP 数量和信号强度,发现虽然 AP 挺多的,但是它们的信号都比我们的小不少,而且我们也都开到了 50mW,所以干扰不大。 然后昨天下午一点半钟来到场地,用板车把设备都运到计算机开放实验室,然后开始部署无线网络。我们提前来踩过几次点,这边的网络是没有 DHCP 服务器的,通过一个指定的网关出去。我们发现可以利用已有的这些交换机从地下连到各个电脑上的网线,来连接我们的 AP 和交换机,这样我们就免去了走线的麻烦。于是我们先定下放 AP 的位置,然后用寻线器找到网线插到了交换机的哪一个端口上,标记好后换成连接到我们自己的交换机的网线上,从而可以通过 PoE 把我们的 AP 给启动起来。然后用我自己的路由器,把 LAN 口插到交换机上,给 AP 分发 DHCP 地址,然后把下发的默认网关配置为真实的网关(DHCP Option 3) ,没做但是也可以顺带做的是把 WLC 的地址分发下去(DHCP Option 43 Type 241)。 当然,这个过程也遇到了一点小坑,就是交换机还保留了之前的配置,所以这次把新的几个端口划到了一个 VLAN 下,命令自然是记不住的要现查。然后起来以后还挺稳定的,也没出现什么问题,网络带宽也足够用,离千兆还有蛮多距离,一天也才跑了接近俩 TB 的流量。

Read More

Unicode En Dash 小坑

今天有同学问到我这个问题: $ gcc -o ph ph.c –lpthread 为啥不工作。我怎么看都觉得没啥问题,一开始以为是找不到 pthread,但马上又排除了。想了下会不会是有隐藏的字符,于是让同学 pbpaste | xxd 一下,果然发现这里的 – 是 \xe2\x80\x93 ,查了下是 Unicode 里的 En Dash。由于这是从 PDF 里直接拷贝出来的,所以凉了。改成正常的短横杠即可。

Read More

软工平台踩坑记

老师要求我们搞 CI/CD,CI 自然是很快就搞好了,不过 CD 还得配一下。今天研究了一下它的 Deployer 架构,发现了若干易用性问题: 缺乏文档 只有样例配置没有讲解 已有的文档 语焉不详 官方对此回复:功能太多,还没忙过来写文档 于是只好经常戳助教然后尝试理解这个东西。。然后遇到了很多的 BUG: 容器没有重启功能。。。 容器死了还是活着看一个图的颜色。。。毫无说明 容器虽然有 Console,但是输入过长后直接回到行首没有换行。。。 容器对外的域名里有下划线。。。Django 上来就一句 Invalid HTTP_HOST header: 'xxxx_xxx.app.secoder.net'. The domain name provided is not valid according to RFC 1034/1035. Express 直接就 Invalid Host header 放弃治疗。。。 助教对上一条的回复是,等我忙完 DDL 有空再做吧。。。也就是说现在要做只能自己再开一个 Nginx 容器然后自己在 proxy_set_header 上做手脚。。。

Read More

在荔枝糖(Lichee Tang)上初次体验 FPGA

今天从张宇翔学长那拿到了 荔枝糖(Lichee Tang) 的 FPGA 板子,于是立即开始把前段时间学到的 Verilog 应用上来。不过想到现在我手上没有多少外设,然后又必须远程到 Windows 电脑上去操作,于是先实现了一下 UART 通信。 在网上找到了 ben-marshall/uart 一个简易的实现,很快做到了一直在串口上打印 A 字符。接着我开始尝试实现一个简单的串口回显。一开始,我直接把 UART 读到的数据直接输出,果然可以了,但是一旦传输速率跟不上了,就会丢失数据。于是我添加了 FIFO IP 核,然后把读入的数据存入 FIFO,又从 FIFO 中读取数据写入到 UART 中去。不过发现了一个小 BUG:每次打印的是倒数第二次输入的字符,即丢失了第一个字符。在张宇翔学长的帮助下找到了问题:当 FIFO 的读使能信号为高时,其数据在下一个时钟周期才来,于是解决方案就是等到数据来的时候再向 UART 中写数据: always @ (posedge clk_in) begin uart_tx_en <= uart_fifo_re; end 这样就解决了这个问题。完整代码在 jiegec/learn_licheetang 中。

Read More

使用 veth 实现 IPv6-only 的 Brouter 功能

最近从 @shankerwangmiao 学到了一个方法:通过 veth 把两个 bridge 的 IPv6 桥接起来。方法如下: $ ip link add veth-v6-in type veth peer name veth-v6-out $ brctl addif br-in veth-v6-in $ brctl addif br-out veth-v6-out $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-in -j DROP $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-out -j DROP 这样就可以看到 veth 上仅有 IPv6 的流量了。

Read More

在 Android 上打开 LTE 的 IPv6

听闻北京移动给 LTE 配置了 SLAAC,但现在需要手动打开,方法如下: Settings -> Network & Internet -> Mobile Network -> Advanced -> Access Point Names -> 中国移动 GPRS (China Mobile) -> 把 APN procotol 和 APN roaming protocol 两项都改成 IPv4/IPv6 然后在 test-ipv6.com 上可以看到确实分配了 IPv6 地址,不过目前评分只有 1/10。也就是说可用性还不佳。 而在 iOS 上,通过 HE 的 Network Tools 能看到,确实拿到了 IPv6 的地址,但是出不去,怀疑是运营商没有下发相关配置,所以还不能使用,只能继续等。 2018-11-06 更新:现在 iOS 用户也有 LTE 的 v6 了。评分是 9/10。目前可用性已经可以了,就是国内互联还不大好。

Read More