SDK 自带了文件系统覆盖机制

build_firmware 最后会调用 post_overlay()build.sh 第 1922-1932 行):

function post_overlay() {
    # 读取 RK_POST_OVERLAY 变量
    # 把 project/cfg/overlay/<RK_POST_OVERLAY>/* rsync 到根文件系统
    rsync -a ... $tmp_path/overlay/$RK_POST_OVERLAY/* $RK_PROJECT_PACKAGE_ROOTFS_DIR/
}

1.在根目录下创overlay文件夹

  • 创建my_rootfs
7.png

2.配置.BoardConfig.mk

#新增
export RK_POST_OVERLAY=my_rootfs #my_rootfs必须与前面创建的对应

3.直接把文件丢进去overlay就好

4.开机自启脚本

  • overlay/my_rootfs/etc/init.d文件夹下存放Sxxx

  • 直接在 overlay 文件夹里用 chmod 设置就行,rsync 会保留权限。

  • 嵌入式 Linux 的 BusyBox init 系统(包括 RV1106 这种方案)中,/etc/init.d/ 目录下 S 开头的脚本都会在开机时自启

命名规则

前缀含义
S + 数字 + 名称开机自启,数字小 → 先执行(rcS调用)
K + 数字 + 名称关机/重启时执行(rcK 调用)
其他不会被自动执行

数字越小越早执行,建议:

脚本用途理由
S10udevudev 设备管理必须先启动,否则没有 /dev/video0
S20urandom随机数种子系统基础
S50usbdeviceUSB 配置gadget 相关
S99myapp自己 app等所有服务就绪再启动

原来的脚本

看构建流程:

sysdrv/tools/board/eudev/
├── S10udev                    ──► 复制到 /etc/init.d/S10udev
├── rules/
│   ├── 61-sd-cards-auto-mount.rules  ──► 复制到 /lib/udev/rules.d/
│   └── 61-usbdevice.rules            ──► 复制到 /lib/udev/rules.d/
└── eudev-3.2.7/  (源码)

SDK 的构建脚本在编译 rootfs 时,通过某个 Makefile 把这些文件拷贝到 rootfs 目录下(output/out/rootfs_uclibc_rv1106/),然后打包成文件系统镜像。

DRM驱动导致的加载慢

在 VOP bridge bind 时立即触发 modeset
drivers/gpu/drm/rockchip/rockchip_drm_drv.c 的 rockchip_drm_bind() 末尾主动调用一次 drm_atomic_helper_connector_hotplug():
	/*
	 * ★ 立即触发一次 hotplug → modeset,避免等待默认 ~10s 的 poll interval。
	 * 用户态 app(lvgl_demo)在 ~4s 时会通过 SET_MASTER 夺走 DRM 主控权,
	 * 此后 poll worker 被阻塞无法完成 modeset → CRTC 永不激活 → 黑屏。
	 * drm_fb_helper_hotplug_event() 会同步 probe connector +
	 * 执行 drm_client_modeset_commit() → vop_crtc_atomic_enable()
	 */
	drm_fb_helper_hotplug_event(private->fbdev_helper);