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
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 调用) |
| 其他 | 不会被自动执行 |
数字越小越早执行,建议:
| 脚本 | 用途 | 理由 |
|---|---|---|
S10udev | udev 设备管理 | 必须先启动,否则没有 /dev/video0 |
S20urandom | 随机数种子 | 系统基础 |
S50usbdevice | USB 配置 | 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);