泰山派移植Ubuntu22.04

前言

之前我已经初步移植了泰山派Linux5.10.160的内核,接下来打算尝试移植Ubuntu 22.04,并解决一些驱动问题。由于目标是Ubuntu 22,因此我的移植环境也已经切换到了Ubuntu 22。

移植步骤

准备基于base镜像移植,下载base镜像

1
wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04.4/release/ubuntu-base-22.04-base-arm64.tar.gz

由于系统文件owner和group都是root,还是用root解压好一点,不然passwd可能会碰到下面的问题

1
2
passwd: Authentication token manipulation error
passwd: password unchanged
阅读更多

泰山派移植Linux5.10.x内核

前言

泰山派官方的内核是4.19.x,运行Ubuntu chrome硬解好像有点问题,新版的内核据说有panfrost驱动。
GitHub上找到了个给rockchip用的新内核(https://github.com/Joshua-Riek/linux-rockchip/) 与之配套的还有Ubuntu 22或者ubuntu 24

基于https://github.com/Joshua-Riek/linux-rockchip/tree/5.10.160-34 开始移植

初步移植过程

进入泰山派官方sdk,mv一下官方的内核

阅读更多

micropython红外接收与发送

前言

最近回南天,想给以前买的小除湿机加个远程遥控功能。之前买的小除湿机已经配了红外遥控,于是在淘宝上买了个红外接收模块跟发送模块。参考了一下pico_ir的库(https://github.com/bartoszadamczyk/pico-ir)。

nec编码分析

大部分遥控器用的都是nec编码。nec编码的每个数据帧由32位组成。起始标志是一个9ms的Leader脉冲和一个4.5ms的Space脉冲。我们只要在收到脉冲后等待数据帧,对接收到的信号进行采样,分析低电平信号的长度就能进行解码。

折腾

录制红外信号

阅读更多

esp32安装micropython

前言

前段时间入手了raspberry pico,搞了个电纸钟,奈何pico内存太小,写起python束手束脚。于是入手了个esp32 wrover,带有4m的spram,可用ram一下子翻了十几倍。

阅读更多

记升级至golang 1.18以上项目无法启动

前言

在升级至新版goland后,debug旧版golang编译的可执行文件有点问题。于是就打算升级一下本地golang的版本。在升级到golang 1.18以上后,项目启动过程中就奔溃了。也没有具体的报错行数,倒是把所有的协程堆栈都打印出来了,实在难以排查。
崩溃的部分控制台输出

1
2
unexpected fault address 0xffffffffffffffff
fatal error: fault

探索

经过实验,装了n多个版本,1.18到1.22全都是这样,一旦降级到1.17就可以正常启动。看着1.18的release notes说As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.不禁陷入沉思。
又进行了一波排查,似乎是在打日志的时候崩溃的。项目为了优化序列化与反序列化的性能用了json-iterator,怀疑可能是json-iterator的骚操作导致的崩溃。
于是去github上看了一下,果然看到了相关的issue https://github.com/json-iterator/go/issues/608。
看了一下相关的提交后,所谓的修复方式是将reflect2升级至v1.0.2这个版本。
json-iterator使用了reflect2这个包对map进行了一些unsafe的操作,导致了整个程序崩溃。
在golang1.18以前reflect/value.go中的某个函数定义是这样的

阅读更多