书接上回。
经过上次的失败尝试之后,我反思良久,终于发现是因为我没有安装交叉编译用的 header files,才导致了编译器报错,属于是错怪 clang 了。
于是这周的概率论课上临时起意,重新 fork 了一份思源,写了一个 CI。构建两次通过,一切都很美好。下载产物下来一看,好家伙,内核启动时就寄了。
而且没有错误报告。
仔细观察,发现内核启动的时候是在初始化数据库的时候崩溃。更令人匪夷所思的是,当我手动重复启动多次内核之后,之前一次次崩溃的内核竟然偶尔有常驻的时候。
多方寻找之后,我将目标锁定在了数据库的依赖:github.com/mattn/go-sqlite3
为什么这么说呢?
-
这个依赖是编译期间唯一报警告的 CGO 依赖。
-
注意到 temp 文件夹下,原本应有三个启用 WAL 的 .db 文件,但实际每次启动均创建一套 .db 文件就立刻闪退。下图为目录结构 be like:
-
成功启动之后,日志比较狂暴。
因为这一问题,思源 kernel on ARM Windows 的计划就暂时搁置了。我暂时没有能力,也没有心思,去向上游反馈这一问题。上游倒好,整个 README 里面连 ARM Windows 提都没提过。希望明年骁龙 X Elite 出来之后,ARM Windows 能够得到更多重视。
但是,Electron 前端的构建并没有任何问题。而众所周知,浏览器对 CPU 的开销是很大的。于是,下一步的目标也很清楚:ARM Native Electron + x64 转译 kernel。
下一集:半个 ARM 应用,堂堂连载!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于