跳转到内容

https://wiki.t-firefly.com/zh_CN/Firefly-Linux-Guide/first_use.html#docker-zhi-chi

RK 3506 调试日志(一) ​

更新: 10/23/2026 字数: 0 字 时长: 0 分钟

Dante 嵌入式平台 (DEP) 打包为 Open Containers Initiative (OCI) 容器,需要内核支持容器。

Firefly 发布的普通固件一般不满足 Docker 的运行要求,如果有需求,可以使用 SDK 打开内核的相关配置,重新编译烧录内核以支持 Docker。

内核配置 ​

在SDK默认配置修改需要添加以下配置

控制组(Cgroups) ​

必须启用以下 Linux 内核配置选项才能支持 cgroups。可以根据需要启用其他 cgroup 配置选项。

  • CONFIG_CGROUPS
  • CONFIG_CGROUP_DEVICE
  • CONFIG_CPUSETS
  • CONFIG_CGROUP_SCHED
  • CONFIG_MEMCG

此外,至少必须在 /sys/fs/cgroup/ 挂载以下 cgroup 子系统:

bash
 cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
 cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)
 cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
 cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
 cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)

可以在 buildroot 中添加 cgroupfs-mount 包实现

bash
->Targetpackages
    -> System tools
        cgroupfs-mount

命名空间(Namespaces) ​

必须启用以下 Linux 内核配置选项才能支持 Linux 命名空间。

  • CONFIG_NAMESPACES
  • CONFIG_UTS_NS
  • CONFIG_IPC_NS
  • CONFIG_USER_NS
  • CONFIG_PID_NS
  • CONFIG_NET_NS

启用 SquashFS 支持 ​

必须启用以下 Linux 内核配置选项才能在 Linux 中支持 SquashFS。可以根据需要启用与 SquashFS 相关的其他配置选项。

  • CONFIG_SQUASHFS
  • CONFIG_SQUASHFS_ZLIB:支持 SquashFS 压缩文件系统的 ZLIB 压缩。

Enable Loop Device 支持 ​

必须启用以下 Linux 内核配置选项才能支持挂载 SquashFS 文件。

  • CONFIG_BLK_DEV_LOOP:支持 loop 设备(用于挂载 .img 文件)。

多播网络 ​

CONFIG_IP_MULTICAST:支持 IP 多播网络通信

内核配置 ​

dep_check.sh会检查内核配置在/proc/config.gz 需要启用以下内核配置

shell
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y

硬件支持 ​

硬件时间戳(PHC) ​

某些网络接口卡 (NIC) 具有内置的硬件时间戳支持,采用 PTP 硬件时钟 (PHC) 的形式。NIC 可以使用此时钟在数据包打开或离开线路时对数据包进行时间戳,从而产生非常准确的时间戳。如果平台不支持硬件时间戳,则需要依赖 NIC 驱动程序来执行软件时间戳。硬件时间戳比软件时间戳准确得多。

bash
ethtool -T eth0

确认它是否支持:

  • hardware-transmit
  • hardware-receive
  • software-transmit
  • software-receive
  • phc 时钟设备(通常是 /dev/ptp0)

ALSA 声卡 ​

注册虚拟声卡

设备树 ​

rockchip 的SDK中有 dummy-codec ,确保被编译进内核或模块

/{
    ... 
    dummy_codec:dummy_codec{
        compatible = "rockchip,dummy-codec";
        #sound-dai-cells = <0>;
        status = "okay";

        clocks = <&mclkout_sai0>;           //主时钟由codec申请
		clock-names = "mclk";
		assigned-clocks = <&mclkout_sai0>;
		// assigned-clock-rates = <24576000>;
		pinctrl-names = "default";
		pinctrl-0 = <&rm_io28_sai0_mclk>;       
    };
};
/{
    ...
    sound{
        compatible = "simple-audio-card";
        simple-audio-card,name = "audio-card";
        status = "okay";

        simple-audio-card,dai-link@0 {
		    format = "left_j";          //i2s
            bitclock-master = <&cpu0_audio>;
            frame-master = <&cpu0_audio>;
            // convert-channels = <8>;
            mclk-fs = <512>;

		    cpu0_audio:cpu {
			    sound-dai = <&sai0>;
                // dai-tdm-slot-num = <8>;          //由驱动决定通道数量
                dai-tdm-slot-width = <32>;
		    };

		    codec0_audio:codec {
			    sound-dai = <&dummy_codec>;
		    };
	    };
    };
};
&sai0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&rm_io27_sai0_sclk
             &rm_io30_sai0_lrck
             &rm_io29_sai0_sdi0
             &rm_io31_sai0_sdo>; 
};