每周分享第 20 期

写到了第 20 期了!最近几期总是在咕咕。 Rust 的科学计算库 https://github.com/rust-ndarray/ndarray https://github.com/jturner314/ndarray-stats Rust Crate 生态可视化 https://rfdonnelly.github.io/crate-galaxy/ 在地址栏里做动画 http://matthewrayfield.com/articles/animating-urls-with-javascript-and-emojis/#%F0%9F%8C%92 Ruby 3 也要加类型了 https://twitter.com/darkdimius/status/1119115657776209920 verilog 的 MAC + 简易网络栈 https://github.com/alexforencich/verilog-ethernet

Read More

每周分享第 19 期

忽然想起来忘了这件事情两天。。 Pock 在 Touchbar 中显示并控制 Dock https://pock.pigigaldi.com/ MacBook touchbar+keyboard+touchpad Linux 驱动 https://github.com/roadrunner2/macbook12-spi-driver Kendryte K210 上的 GBA 模拟器 https://github.com/44670/mgba-k210 Rust 生成 PDF 文件的库 https://github.com/J-F-Liu/lopdf 中科大用 Rust 编写 FreeRTOS 的实验 https://github.com/OSH-2019/x-rust-freertos Google 发布 Cloud Code 插件,直接在 k8s 上调试运行 https://cloud.google.com/blog/products/devops-sre/announcing-cloud-code-accelerating-cloud-native-application-development 通过 libusb 跨平台的 usbip server https://github.com/jwise/pyusbip Linux 下 BCM43602 Firmware 问题的不完美解决方法 https://bugzilla.kernel.org/show_bug.cgi?id=193121 给树莓派上电的新方法 https://youtu.be/X2vF9KAEJx8 Docker 里跑 Deepin Wechat 的镜像 https://github.com/bestwu/docker-wechat.git NS Switch 的包管理器 https://switchbrew.org/wiki/Main_Page

Read More

rCore 软路由实现

最近在研究软路由在 rCore 上的实现,但限于硬件限制,目前先在虚拟机里测试。软路由大概要做这些东西: 1. 抓包,解析包里的内容 2. 查路由表,找到下一跳在哪 3. 查ARP,知道下一跳的 MAC 地址 4. 减少TTL,更新 IP Checksum 5. 把包发出去 第一步直接拿 smoltcp 的 Raw Socket 即可,但是目前只能抓指定 IP Protocol 的包,我用的是 ICMP ,但其他的就还抓不了,需要继续改 Smoltcp 源代码。 第二步用的是之前刚修好的 treebitmap 库,它提供了路由表的查询功能,目前路由表还是写死的,之后会用已经部分实现好的 Netlink 接口读取出来。 第三步则是 ioctl 发请求,然后从 smoltcp 内部的 ARP cache 里读取。 第四步很简单,不用多说。 第五步则需要指定出端口,用了一个 index ,放在一个特定的 sockaddr 中。 最后的效果就是,能双向转发 ping 通。 网络拓扑: 可以,这很玄学。 后续在想在真机上实验,但是还缺一个网卡驱动,不然就可以用神奇的办法来做这个实验了。

Read More

每周分享第 18 期

不咕不咕 Alfred pwgen workflow https://github.com/deanishe/alfred-pwgen 魔改主板,在老主板上放 16GB 内存 https://readhacker.news/s/3Zty4 Mesalink TLS 库的 Rust 实现 https://github.com/mesalock-linux/mesalink 实测可用 Rust 写的 STM32 应用 https://github.com/lupyuen/stm32-blue-pill-rust 开源 PCIe 核 https://github.com/enjoy-digital/litepcie 欢迎投稿。

Read More

高云 FPGA 踩坑

最近拿到了高云 FPGA GW2A-18 开发版,想在这上面做一些小工程。不过首先要配置好环境什么的。官方提供了 Linux 和 Windows 的两套工具,自然是拥抱 Linux 咯,但是由于官方适配的是 Redhat 系的操作系统,所以用 Debian 系的时候出现了若干问题,后面会谈到怎么解决的。 首先是官网下载了它的软件,大概有IDE,综合器,布线器和Programmer四个工具,然后开始跑,发现缺少了 libcrypt.so.1.0.0 。上网搜了一下解决方案,需要重新编译 openssl-1.0.0 ,于是下载并且编译了 openssl-1.0.0t 并且把 .so 的路径调好了,这时候就可以打开 IDE 了。然后发现需要 License ,这个很简单,去官网申请一下,一天邮件就下来了。 接下来配置 License, IDE 很容易,直接选择邮件里发下来的 node-locked License 即可。不过 Synplify Pro 的 Linux 版本不支持直接单文件 node-locked 的 License ,只允许跑 SCL … 不过高云也提供了 SCL 的下载,和 IDE 的 License Server 放在一起,安装完以后,在得到的 License 里加上两行: SERVER ${hostname} ${hostid} ${port} VENDER snpslmd /path/to/scl/2018.06/linux64/bin/snpslmd 然后把 $LM_LICENSE_FILE 指向这个文件路径,就可以了。这一部分感谢 @Jackey-Huo。 随手写了一个简化版的点亮数字人生(没有数码管),得到了 bistream ,准备往板子里刷,然后问题出现了:

Read More

每周分享第 17 期

对不起咕咕了两天。。 关于 rel=“noopener” 的一些细节 https://mathiasbynens.github.io/rel-noopener Microsft Defender 推出 macOS 版 https://arstechnica.com/gadgets/2019/03/microsoft-ships-anti-virus-for-macos-as-windows-defender-becomes-microsoft-defender/ 基于 Docker 的快速启动在线 Linux box https://github.com/instantbox/instantbox rust 在窗口中显示 fb 的库 https://github.com/emoon/rust_minifb Vue 列表空间,为大量数据设计 https://github.com/tangbc/vue-virtual-scroll-list musl 各平台的交叉编译工具链 https://musl.cc/ 在线的 markdown 转 pdf https://md2pdf.netlify.com/ 一本关于 C64 的书 http://10print.org/ 转自 dram “haskutil tql,自动更新 import,自动 {-# LANGUAGE #-} ,自动填 hole” https://github.com/EduardSergeev/vscode-haskutil ZFS on Linux 加入 TRIM 支持 http://www.phoronix.com/scan.php?page=news_item&px=ZFS-On-Linux-TRIM-Lands 又一个体现 JS 玄学之处的网站 https://getify.github.io/coercions-grid/

Read More

静态编译 sqlite3

最近 rCore 支持了动态链接库,于是想着在测试 sqlite 的时候直接用动态的,不过出现了玄学的问题,它会访问一个不存在的地址,看代码也没看出个所以然来。所以研究了一下 sqlite 的静态编译。首先在 configure 的时候尝试了一下: $ ./configure CC=x86_64-linux-musl-gcc --disable-shared --enabled-static 发现 libsqlite 确实是静态了,但是 sqlite3 并不是。一番研究以后,发现是 libtool 的原因,只要这样编译: $ make LTLINK_EXTRAS=-all-static 就可以编译出静态的 sqlite3 : sqlite3: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, with debug_info, not stripped

Read More

每周分享第 16 期

继续沉迷写 OS +1 C++ 的一个比较 fancy 的 format 库 https://github.com/fmtlib/fmt Rust 的 rsync 替代品 https://github.com/wchang22/lumins VirtIO 1.1 要发布了 https://github.com/oasis-tcs/virtio-docs/commit/3b4130f3a8910dad89b8166e06e58806b9c60943 向二维码嵌入图片的工具 http://cgv.cs.nthu.edu.tw/Projects/Recreational_Graphics/Halftone_QRCodes/ Google Chrome 发出奇怪的 DNS 请求的原因 https://unix.stackexchange.com/questions/363512/chrome-dns-requests-with-random-dns-names-malware 转换 .HEIC 到 .jpg 的批量方案:alias heic="magick mogrify -monitor -format jpg *.HEIC" ref: Apple SE 以打代码来练打字的网站 https://typing.io/ VSCode 网页 server https://github.com/codercom/code-server 奇特的 Rust 网页栈实现 https://japaric.github.io/jnet/jnet/index.html H265 解析 gui https://github.com/virinext/hevcesbrowser 之前介绍过 H264 的 Awesome Rust Embedded https://github.com/rust-embedded/awesome-embedded-rust 新的 SiFive 产品 https://www.crowdsupply.com/sifive/hifive1-rev-b Wireshark 3.0.0 发布 https://www.

Read More

交叉编译 Nginx 1.14.2 到 RISC-V

最近又把一定的精力放到了 RISC-V 64 上的 rCore 用户态程序的支持上,同时也借到了 HiFive Unleashed 板子,所以有真实硬件可以拿来跑了。在这之前先在 QEMU 上把能跑的都跑起来。 由于 rCore 对 glibc 的支持一直有问题,RISC-V 也不例外,所以还是选择用 musl 来做这件事情。一般搜索,终于找到了 Linux 下能用的 musl-riscv-toolchain 。编译好工具链以后,很多需要 libc 的用户态都能跑了,于是想着试一下 nginx 的编译。试着编译了一下,遇到了各种问题,最后搜到了交叉编译Hi3536上面使用的nginx,里面的方法解决了这个问题。最后总结出了这样的 patch : diff --git a/nginx-1.14.2/auto/cc/name b/nginx-1.14.2/auto/cc/name index ded93f5..d6ab27a 100644 --- a/nginx-1.14.2/auto/cc/name +++ b/nginx-1.14.2/auto/cc/name @@ -7,7 +7,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then ngx_feature="C compiler" ngx_feature_name= - ngx_feature_run=yes + ngx_feature_run=no ngx_feature_incs= ngx_feature_path= ngx_feature_libs= diff --git a/nginx-1.14.2/auto/lib/openssl/make b/nginx-1.14.2/auto/lib/openssl/make index 126a238..7a0e768 100644 --- a/nginx-1.14.2/auto/lib/openssl/make +++ b/nginx-1.

Read More

在古老的 OS 上运行一个干净的新的环境

由于某些课程的原因,需要在一个 CentOS 7 上跑一些编译和运行代码。看到这么古老的软件,我心想不行,肯定要找新一些的软件来用。首先想到的是 tmux ,于是按照网上的脚本 很快装了一个 tmux 2.8 版本,果然好了很多。但是常用的很多软件依然是个问题。试了一下最近比较新的 code-server ,因为ABI问题跑不起来。 于是开始想玩骚操作。首先想到的是 Gentoo Prefix ,不过既然是别人的机器,还是算了。又找了 fakeroot 配合 alpine rootfs 的方案,但编译不过,估计是内核版本问题。又试了一下 fakechroot ,但它需要配合 fakeroot 使用,这就凉了。 然后又找了一些替代方案。一是 uchroot ,但由于 CMake 版本太老也编译不过。最后发现了 PRoot ,直接提供 prebuilt 然后很容易就可以跑起来: $ ./proot -b /proc -b /dev -r $CHROOT /bin/busybox sh 于是就进到了 alpine 的 rootfs 中,下载地址。进去以后发现没有编辑器,于是出来把 apk 的源改了,加了 resolv.conf ,就成功地安装了很多很新的软件了。

Read More