search
arrow_back 返回
Forlinx用鲁班猫桌面系统

Forlinx用鲁班猫桌面系统

我觉得鲁班猫的根文件系统和debain桌面镜像做得很好,飞凌的有点丑,我就想能不能把鲁班猫的桌面放到飞凌的板卡上面,今天试了一下,发现居然可以,而且是直接就能用,什么都不用改

因为在Linux中,Kernel、U-Boot、rootfs是分开的,内核主要是驱动和设备树,U-Boot主要是开机时引导进入内核和系统的一段程序,根文件系统则是在系统中运行的,跟底层硬件无关,所以还真能直接替换

首先我们要下载OK3576和鲁班猫3的SDK,然后都编译 OK3576SDK下载 鲁班猫3SDK下载

image

编译完后,什么东西都不用改,先把飞凌的镜像烧录进OK3576中,然后再单独把鲁班猫的根文件系统镜像烧录进OK3576就可以了,等待烧录完正常开机,你就会发现OK3576上运行的是鲁班猫的桌面系统,有意思

image

但是,我按reset键重新进入系统后就有点问题了

现在能进入系统,能拿到 root@lubancat 的 shell,并且 systemctl 能跑,说明 U-Boot -> Kernel -> rootfs 主链路已经起来了

用下面的命令能临时把系统拉起来

这样做的作用: 不再强制挂载 /oem 不再强制挂载 /userdata 系统大概率会正常进入默认目标,不再掉 emergency mode

为什么会这样: OK3576 原厂系统会在 rootfs 后处理阶段给 oem、userdata 加挂载规则 你现在刷的是鲁班猫 rootfs,本身没有带好 Forlinx 这两个附加分区的适配 所以启动链没问题,问题出在附加分区自动挂载

mount -o remount,rw /
systemctl mask oem.mount userdata.mount
reboot

问题的根本原因 /etc/fstab 把 oem、userdata 写成了 ext2,而板子上这两个分区实际是 ext4,鲁班猫的根文件系统rootfs 里的挂载配置和首启逻辑不适配 OK3576,问题就是 rootfs 里的运行时配置写错了文件系统类型

解决方法 对“OK3576 + LubanCat rootfs”这个场景,最稳方案就是:预置正确 fstab + 改首启脚本 + 预置 boot_init 标记

1.修改鲁班猫 rootfs 里的 /etc/fstab

把这两行改成 ext4

这样做的目的: 先把默认挂载配置改对 nofail 可以避免将来这两个附加分区异常时把系统直接拖进 emergency mode

PARTLABEL=oem       /oem       ext4    defaults,nofail    0 2
PARTLABEL=userdata  /userdata  ext4    defaults,nofail    0 2

这里没有对齐的要求,关键是字段之间要有空白分隔 image

2.改掉 boot_init.sh 里硬编码的 ext2

ensure_fstab_entry()
{
    PARTLABEL_NAME="$1"
    MOUNTPOINT="$2"
    DEFAULT_FSTYPE="${3:-ext4}"
    MOUNT_OPTS="${4:-defaults,nofail}"
    DEV="/dev/disk/by-partlabel/${PARTLABEL_NAME}"
    FSTYPE=""

    mkdir -p "$MOUNTPOINT"
    sed -i "\|[[:space:]]${MOUNTPOINT}[[:space:]]|d" /etc/fstab
    sed -i "\|^PARTLABEL=${PARTLABEL_NAME}[[:space:]]|d" /etc/fstab

    if [ -e "$DEV" ]; then
        FSTYPE="$(blkid -o value -s TYPE "$DEV" 2>/dev/null || true)"
    fi
    FSTYPE="${FSTYPE:-$DEFAULT_FSTYPE}"

    echo "PARTLABEL=${PARTLABEL_NAME}  ${MOUNTPOINT}  ${FSTYPE}  ${MOUNT_OPTS}  0 2" >> /etc/fstab
}

加在这里

image

然后原来的两行硬编码替换成: 这样即使以后 oem、userdata 的文件系统不是 ext4,它也会先用 blkid 识别,而不是继续写死成 ext2。

ensure_fstab_entry oem /oem
ensure_fstab_entry userdata /userdata

image

3.预置 /boot/boot_init

在 rootfs 里预置一个空的 /boot/boot_init 标记文件,也就是: 新建目录:Lubancat_SDK/Lubancat3/debian12/overlay/boot 新建空文件:Lubancat_SDK/Lubancat3/debian12/overlay/boot/boot_init

原因: 现在的目标是 保留 OK3576 原有 boot 分区、内核和启动链 LubanCat 的 boot_init.sh 首启逻辑本来是给 LubanCat 自己板型准备的 在 OK3576 这种“只替 rootfs”的场景里,这段首启逻辑并不是必须执行 预置这个标记后,可以直接跳过不必要的 LubanCat 首启路径,减少再次改坏 fstab 的概率

image image

image

重新烧录新的根文件系统镜像后能正常开机且进入鲁班猫的系统,重启也不会有变化

顺便改了hostname、banner和桌面背景

image image

评论

Cover
晴天 周杰伦
OKayFlow 正在共享键鼠中... 将鼠标向左大跨度甩回,或在主电脑上按 Scroll Lock 键强制退出
OKayFlow
工具箱

工具箱