鲁班猫修改终端图案
鲁班猫修改终端图案
这是鲁班猫原本在开机后终端打印的图案日志

我们可以修改根文件系统,改成我们自己的图案
拉取SDK源文件
可以看我“Ubuntu在线下载鲁班猫SDK源文件”这篇文章
修改根文件系统
修改这个文件SDK/debian/overlay/etc/update-motd.d/00-header

#!/bin/sh
#
[ -r /etc/lsb-release ] && . /etc/lsb-release
printf "\n"
printf '\033[1;34m\n'
cat <<'EOF'
OO OO
OOOO OOOO
OOOOOO OOOOOO
OOOOOOOO OOOOOOOO
OOOOOOOOOO OOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOO=======================OOOO
OOO[ ████████ ████████ ]OOO
OOO[ ████████ ████████ ]OOO
OOOO=======================OOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOO\ OOOOOOOOOOO /OOOOOO
OOOOOOOOOOOOO\ /OOOOOOOOOOOOO
OOOOOOOOOOOOOO\_/OOOOOOOOOOOOOO /OOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO_/OOO
____ _ __ _____ _
/ __ \| |/ / | __ \(_)
| | | | ' / __ _ _ _ | |__) | |
| | | | < / _` | | | | | ___/| |
| |__| | . \| (_| | |_| | | | | |
\____/|_|\_\\__,_|\__, | |_| |_|
__/ |
|___/
EOF
printf '\033[0m\n'
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf "\n"
printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
编译根文件系统
# 选择SDK配置文件
./build.sh lunch
# 如果之前构建过要先删除
rm -f debian/linaro-gnome-rootfs.img
# 构建Debian
./build.sh debian
编译完成,是这个文件,记住它,后面需要用到

大小是4个G

下载工具
去鲁班猫网盘下载Linux_Pack_Firmware_v2.29.zip

下载完后解压传到Ubuntu或者先传到Ubuntu再解压,传的位置没要求

同时还要下载一个完整的镜像,把完整的镜像文件传到Linux_Pack_Firmware/rockdev目录下并重命名为update.img

#重命名镜像为update.img,第一个参数根据实际镜像名称而定
mv lubancat-rk3588-debian11-gnome-20260113_update.img update.img
#重命名镜像为update.img,第一个参数根据实际镜像名称而定 mv lubancat-rk3588-debian11-gnome-20260113_update.img update.img
解包镜像
# 先在rockdev目录下将所有文件的权限改成可执行,不然会显示权限不够
chmod +x *
# 解包
./unpack.sh

将前面编译出来的根文件系统镜像替换掉output里面的rootfs.img,命名要一致

镜像打包
#进入输出目录
cd Linux_Pack_Firmware/rockdev/output
#打包镜像,根据实际芯片名称而定
#如果有权限问题或者报错
sudo chown -R $USER:$USER ~/Documents/Linux/Tools/Linux_Pack_Firmware/rockdev/output
#rk3588/rk3588s打包执行,下面是两个命令
../afptool -pack ./ update_tmp.img || pause
../rkImageMaker -RK3588 MiniLoaderAll.bin update_tmp.img update.img -os_type:androidos || pause
烧录

成功

改成彩色
#!/bin/sh
#
[ -r /etc/lsb-release ] && . /etc/lsb-release
printf "\n"
printf '\033[1;34m\n'
cat <<'EOF'
OO OO
OOOO OOOO
OOOOOO OOOOOO
OOOOOOOO OOOOOOOO
OOOOOOOOOO OOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOO=======================OOOO
OOO[ ████████ ████████ ]OOO
OOO[ ████████ ████████ ]OOO
OOOO=======================OOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOO\ OOOOOOOOOOO /OOOOOO
OOOOOOOOOOOOO\ /OOOOOOOOOOOOO
OOOOOOOOOOOOOO\_/OOOOOOOOOOOOOO /OOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO_/OOO
EOF
# OKayPi banner gradient using your 5 colors (cyan → green → yellow → orange → magenta).
# Falls back to plain text if awk is unavailable.
if command -v awk >/dev/null 2>&1; then
cat <<'OKAYPI' | awk '
function lerp(a, b, t) { return int(a + (b - a) * t + 0.5) }
BEGIN {
n = 5
# Approximated from your reference image dots
r[1] = 0; g[1] = 185; b[1] = 255 # cyan
r[2] = 35; g[2] = 220; b[2] = 0 # green
r[3] = 235; g[3] = 235; b[3] = 0 # yellow
r[4] = 255; g[4] = 170; b[4] = 0 # orange
r[5] = 255; g[5] = 0; b[5] = 200 # magenta
}
{
L = length($0)
if (L < 2) { print; next }
for (i = 1; i <= L; i++) {
ch = substr($0, i, 1);
x = (i - 1) / (L - 1) # 0..1
p = x * (n - 1) + 1 # 1..n
k = int(p)
t = p - k
if (k >= n) { k = n - 1; t = 1 }
rr = lerp(r[k], r[k + 1], t)
gg = lerp(g[k], g[k + 1], t)
bb = lerp(b[k], b[k + 1], t)
printf "\033[38;2;%d;%d;%dm%s", rr, gg, bb, ch;
}
printf "\033[0m\n";
}
'
____ _ __ _____ _
/ __ \| |/ / | __ \(_)
| | | | ' / __ _ _ _ | |__) | |
| | | | < / _` | | | | | ___/| |
| |__| | . \| (_| | |_| | | | | |
\____/|_|\_\\__,_|\__, | |_| |_|
__/ |
|___/
OKAYPI
else
cat <<'OKAYPI'
____ _ __ _____ _
/ __ \| |/ / | __ \(_)
| | | | ' / __ _ _ _ | |__) | |
| | | | < / _` | | | | | ___/| |
| |__| | . \| (_| | |_| | | | | |
\____/|_|\_\\__,_|\__, | |_| |_|
__/ |
|___/
OKAYPI
fi
printf '\033[0m\n'
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf "\n"
printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

改成3D
#!/bin/sh
#
[ -r /etc/lsb-release ] && . /etc/lsb-release
printf "\n"
printf '\033[1;34m\n'
cat <<'EOF'
OO OO
OOOO OOOO
OOOOOO OOOOOO
OOOOOOOO OOOOOOOO
OOOOOOOOOO OOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOO=======================OOOO
OOO[ ████████ ████████ ]OOO
OOO[ ████████ ████████ ]OOO
OOOO=======================OOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOO\ OOOOOOOOOOO /OOOOOO
OOOOOOOOOOOOO\ /OOOOOOOOOOOOO
OOOOOOOOOOOOOO\_/OOOOOOOOOOOOOO /OOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO_/OOO
EOF
# Reset from the blue header before gradient text
printf '\033[0m\n'
# OKayPi banner gradient using your 5 colors (cyan → green → yellow → orange → magenta).
# IMPORTANT: your banner contains Unicode box/block characters; awk (mawk) may split UTF-8 bytes and break colors.
# So we prefer python3 for correct Unicode handling and aligned gradients.
mode=16
case "${COLORTERM-}" in *truecolor*|*24bit*) mode=rgb ;; esac
case "${TERM-}" in *256color*) [ "$mode" = "16" ] && mode=256 ;; esac
if command -v python3 >/dev/null 2>&1; then
python3 - "$mode" <<'PY'
import sys
mode = sys.argv[1] if len(sys.argv) > 1 else "16"
banner = """\
██████╗ ██╗ ██╗ ██████╗ ██╗
██╔═══██╗ ██║ ██╔╝ ██████╗ ██╗ ██╗ ██╔══██╗ ╚═╝
██║ ██║ █████╔╝ ╚═══██║ ╚██╗ ██║ ██████╔╝ ██╗
██║ ██║ ██╔═██╗ ███████║ ╚██╗ ██║ ██╔═══╝ ██║
╚██████╔╝ ██║ ██╗ ╚██████║ ╚████╔╝ ██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══██║ ╚═╝ ╚═╝
█████╔╝
╚════╝
"""
lines = banner.splitlines()
anchors = [
(0, 185, 255), # cyan
(35, 220, 0), # green
(235, 235, 0), # yellow
(255, 170, 0), # orange
(255, 0, 200), # magenta
]
def lerp(a, b, t):
return int(round(a + (b - a) * t))
def clamp(x, lo, hi):
return lo if x < lo else hi if x > hi else x
def rgb_to_xterm256(r, g, b):
r6 = clamp(int((r + 25) / 51), 0, 5)
g6 = clamp(int((g + 25) / 51), 0, 5)
b6 = clamp(int((b + 25) / 51), 0, 5)
cube = 16 + 36 * r6 + 6 * g6 + b6
gray = clamp(int((((r + g + b) / 3) - 8 + 5) / 10), 0, 23)
gray_idx = 232 + gray
def cube_rgb(v):
return 0 if v == 0 else 55 + v * 40
cr, cg, cb = cube_rgb(r6), cube_rgb(g6), cube_rgb(b6)
gv = 8 + gray * 10
d_cube = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2
d_gray = (r - gv) ** 2 + (g - gv) ** 2 + (b - gv) ** 2
return gray_idx if d_gray < d_cube else cube
maxL = max((len(s) for s in lines), default=1)
if maxL < 2:
print(banner)
raise SystemExit(0)
for s in lines:
if not s:
sys.stdout.write("\n")
continue
for i, ch in enumerate(s):
x = i / (maxL - 1)
p = x * (len(anchors) - 1)
k = int(p)
t = p - k
if k >= len(anchors) - 1:
k = len(anchors) - 2
t = 1.0
r = lerp(anchors[k][0], anchors[k + 1][0], t)
g = lerp(anchors[k][1], anchors[k + 1][1], t)
b = lerp(anchors[k][2], anchors[k + 1][2], t)
if mode == "rgb":
sys.stdout.write(f"\033[38;2;{r};{g};{b}m{ch}")
elif mode == "256":
sys.stdout.write(f"\033[38;5;{rgb_to_xterm256(r,g,b)}m{ch}")
else:
idx = clamp(int(round(x * (len(anchors) - 1))), 0, len(anchors) - 1)
c16 = [36, 32, 33, 33, 35][idx]
sys.stdout.write(f"\033[{c16}m{ch}")
sys.stdout.write("\033[0m\n")
PY
elif command -v awk >/dev/null 2>&1; then
# ASCII-safe fallback (may not render correctly with Unicode glyphs)
cat <<'OKAYPI'
██████╗ ██╗ ██╗ ██████╗ ██╗
██╔═══██╗ ██║ ██╔╝ ██████╗ ██╗ ██╗ ██╔══██╗ ╚═╝
██║ ██║ █████╔╝ ╚═══██║ ╚██╗ ██║ ██████╔╝ ██╗
██║ ██║ ██╔═██╗ ███████║ ╚██╗ ██║ ██╔═══╝ ██║
╚██████╔╝ ██║ ██╗ ╚██████║ ╚████╔╝ ██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══██║ ╚═╝ ╚═╝
█████╔╝
╚════╝
OKAYPI
fi
printf '\033[0m\n'
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf "\n"
printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

评论