Alpine Linux Porting (2.1) clock is _not_ ticking

这篇开始基本上是进入持续分析有哪些未完善的部份需要进行补足。
依照这几次的bootlog的部份分析,Alpine OpenRC-init的modloop以及hwclock/swclock两个target是起不来的,且有错误显示settimeofday是坏的。
modloop如名称所示,是Alpine自己的世界观中,如果有module需要runtime启动、则从一个loopback去mount起来寻找,对於我目前的porting而言,我不太介意,但说後者会是我比较在意的部份。

简单来说,syslog要启动时,需要有正确的wall clock才有意义,OpenRC这边给的第一条路是去呼叫userspace程序: hwclock来作wall clock设定;如果fail的时候,会启动OpenRC自己的builtin:
https://github.com/OpenRC/openrc/blob/master/src/rc/swclock.c
其实也很简单、就透过settimeofday这个POSIX规定的user API去设时间。

快速看过後,发现躺着这组东西在busybox的mailing list上:
http://lists.busybox.net/pipermail/busybox/2021-March/088583.html

笼统说来,这是一个musl-libc跟busybox造成的共同惨案。对於RISC-V32这种新世代的32平台来说,time_64t是基础人权状态,所以很多以前相关32/64相容的过渡性syscall直接是不存在的。但是目前musl-libc的compat32机制,是直接把settimeofday强制导向32版本:

int __settimeofday_time32() __asm__("settimeofday");

所以我的确有两件事情要修正,第一件是要去修正musl的 arch/riscv32/bits/syscall.h.in,把 170 号的legacy settimeofday 杠掉、加上404号的 clock_settime64,但是这样改完并不够,因为目前整个使用逻辑是错的,修正方向有两条、一条是要去把compat32修好,另一条是apply那条patch、要busybox自己去call 404号syscall就好。

因为hwclock、也就是去找busybox做事是OpenRC的优先选择,我决定这边先apply busybox的部份。等下一篇开始验证这套打通後,Alpine的OpenRC hwclock会不会正常运作起来。


<<:  Nutrition Helper

>>:  LeetCode 双刀流:53. Maximum Subarray

未完!待续?-金鱼都能懂的Bootstrap5网页框架开发

Bootstrap已是目前全球被大量网页开发者使用的一个网页UI框架了,其特色在於使用简单,开发快速...

[iT铁人赛Day12]JAVA回圈范例

今天来练习回圈的范例,利用范例说明for回圈以及while回圈 for回圈范例程序码如下: impo...

KNN VS. K-means

有一阵子常常把KNN和K-means搞混,今天来聊聊两者的区别~ KNN(k-nearest nei...

IOS、Python自学心得30天 Day-9 模组训练改善-1

前言: 之前都是一次性训练好模型,但是一旦资料太多要训练,动辄就是数小时,甚至几天 所以我打算改善训...

第06天 - 一些些的 MySQL(上)

今天来看看 MySQL 该怎麽用 第1部分 - 进到 MySQL 画面 1.先打开 XAMPP 2....