Alpine Linux Porting (1.99) ES LEBT !!!

惯例先上成果图XD
https://asciinema.org/a/439607
终於开机开到shell啦~

上篇说要比对Alpine Linux的rootfs bringup,於是这篇我们便来挖一次Alpine的rootfs是怎麽走的。

首先要勘误的是,我搞错了Alpine用OpenRC的方式,既上次作porting已经过了两年,中间经历硬碟爆掉、所以port完真的忘了。总之,Alpine是采用busyboxinittabOpenRC混搭的方式来使用,所以 /sbin/init 依旧是busybox的symbolic。

那麽,既然是inittab,我们就来看看Alpine on ARM那边成功开机时,/etc/inittab的长相:

# /etc/inittab

::sysinit:/sbin/openrc sysinit
::sysinit:/sbin/openrc boot
::wait:/sbin/openrc default

# Set up a couple of getty's
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6

# Put a getty on the serial port
#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100

# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot

# Stuff to do before rebooting
::shutdown:/sbin/openrc shutdown

# enable login on alternative console
ttyAMA0::respawn:/sbin/getty -L 0 ttyAMA0 vt100

按照inittab的书写惯例:
<id>:<runlevels>:<action>:<process>
他会在启动时,要openrc执行

/etc/runlevels/sysinit/
/etc/runlevels/boot/
/etc/runlevels/default/

底下的target files,从下一张开始,我将会开始作一些openrc的说明与最後的眉角修订。
但看这里,我比较关心的是相关的档案在不在,然而在emergency shell当中大致噜过一遍,发现其实openrc depends的东西都好好的活在那边。

此时回到之前认真看Alpine Init的知识储备,发现问题点卡在这个条件判断:

if [ ! -x "${sysroot}${KOPT_init}" ]; then

因为我目前是透过QEMU强灌 init=/init 进去,所以这边他会尝试去找 /sysroot/init而非/sysroot/sbin/init,导致他最後拐进emergency shell。

知道这个眉角後,其实最快的方式,就是在上面把它override掉:

KOPT_init="/sbin/init"

然後从包一次initramfs,结果就如开头所示,tada~~成功开机啦~


<<:  Dungeon Mizarka 021

>>:  Day21-D3 基础图表:散点图/散布图

Nvidia Docker安装说明(含WSL2)

订阅patreon即可看到更多文章 https://www.patreon.com/wade3c ...

[Day28] grid-row / grid-column + grid-area

如果你已经对上一篇 Day27 的属性熟悉,这篇很快就会懂,因为只是加以说明上一篇的缩写方式,一样都...

[Day5] Holt's Model 介绍

第四篇我们介绍了时间序列经典的统计预测方法 ARIMA,包含公式内的两大模型 AR model、MA...

02 自学的契机

由於想要完整将自己从小至今的学习历程完整叙述,容我从小一开始接触程序的故事说起: 从记忆中对实作的印...

Day 10-不专业介绍package.jason

今天要来补充Day08的package.json的部分。 指路--->https://ithe...