使用的是万象奥科维的RK3506G-EVM开发板

vanxoak@vanxoak:/work/rk3506_linux6.1_v1.2.0$ tree -L 1
.
├── app														# 存放上层应用 app,主要是 qcamera/qfm/qplayer/settings 等一些应用程序
├── buildroot												# buildroot文件系统目录
├── build.sh -> device/rockchip/common/scripts/build.sh		# 编译脚本
├── common -> device/rockchip/common						
├── device													# 存放各芯片板级配置和Parameter文件,以及一些编译与打包固件的脚本和预备文件
├── docs													# rockchip 参考文档 存放芯片模块开发指导文档、平台支持列表、芯片平台相关文档、Linux开发指南等
├── external												# 存放第三方相关仓库,包括音频、视频、网络、recovery 等
├── hal														# HAL目录,存放HAL源码以及Project工程
├── kernel -> kernel-6.1									 
├── kernel-6.1												# 存放 kernel 6.1的目录
├── Makefile -> device/rockchip/common/Makefile				# makefile 编译支持文件
├── prebuilts												# 存放交叉编译工具链
├── README.md -> device/rockchip/common/README.md			# README
├── rkbin													# 存放 Rockchip 相关的 Binary 和工具
├── rkflash.sh -> device/rockchip/common/scripts/rkflash.sh						
├── rtos													# RTOS对应目录
├── tools													# 存放 Linux 和 Windows 操作系统环境下常用工具
├── u-boot													# 存放u-boot源码
├── vanxoak													# 存放针对项目修改的补丁文件
└── yocto													# yocto目录

SDK解压后会得到以上文件夹,接下来我们对每一个文件夹以及子文件进行逐项的学习
首先注意到commen,build.sh,kernel等后面带有->是软连接,指向后续文件目录(之前一直没注意到,我还寻思为什么这么多重复文件。。。)

lipthon@Lipthon:~/rk3506/rk3506_linux6.1_v1.2.0/app$ tree -d
.
├── lvgl_demo
│   ├── amp_monitor
│   │   └── overlay
│   ├── cJSON
│   ├── common
│   ├── flexbus
│   │   └── overlay
│   ├── gallery
│   │   ├── anims
│   │   └── pics
│   ├── lv_demo
│   ├── lvgl8
│   ├── lvgl9
│   ├── motor_demo
│   │   ├── deprecated
│   │   │   └── res
│   │   └── resource
│   ├── rk_demo
│   │   ├── asr
│   │   │   └── pcm
│   │   ├── audio_algorithm
│   │   │   ├── configs
│   │   │   ├── include
│   │   │   └── lib
│   │   ├── furniture_control
│   │   ├── home
│   │   ├── include
│   │   ├── intercom_homepage
│   │   │   ├── intercom_call
│   │   │   └── video_monitor
│   │   ├── layout
│   │   ├── resource
│   │   ├── rockit
│   │   ├── setting
│   │   ├── smart_home
│   │   └── wifibt
│   ├── rk_demo_test
│   │   ├── asr
│   │   │   ├── lib
│   │   │   └── pcm
│   │   ├── board_test
│   │   ├── home
│   │   ├── include
│   │   ├── layout
│   │   ├── resource
│   │   ├── rockit
│   │   ├── setting
│   │   └── wifibt
│   ├── sys
│   └── tools
└── rkadk
    ├── cmake
    ├── docs
    ├── examples
    │   └── common
    │       ├── isp
    │       │   └── rv1103b
    │       └── mp3_header
    ├── include
    ├── inicfg
    │   ├── rk3576
    │   ├── rv1106_1103
    │   └── rv1126_1109
    ├── src
    │   ├── aov
    │   ├── audio
    │   │   ├── decoder
    │   │   └── encoder
    │   ├── common
    │   ├── demuxer
    │   ├── display
    │   ├── live
    │   │   ├── rtmp
    │   │   └── rtsp
    │   ├── muxer
    │   ├── osd
    │   ├── param
    │   ├── photo
    │   ├── player
    │   ├── record
    │   ├── storage
    │   ├── stream
    │   ├── third-party
    │   │   ├── cjson
    │   │   └── iniparser
    │   └── ui
    └── version

app文件夹中主要存放的为官方给出的应用层开发中间件,向上提供简单易用的 API,向下对接底层驱动和硬件,

本文件夹提供了LVGL,RKADK两个实例,LVGL常用于做屏幕显示界面设计,这个大家应该都熟悉,
RKADK则提供了大量的音视频处理的API,可以用于音频解码,视频录制等
image

buildroot文件夹存放buildroot源码,用于固件的编译构建,不做过多解释,会用图形化界面就行

image

common文件夹指向device/rockchip/common

lipthon@Lipthon:~/rk3506/rk3506_linux6.1_v1.2.0/common$ tree -d
.
├── build-hooks
├── configs
│   └── post
├── data
├── extra-parts
│   ├── dtbo
│   ├── oem
│   │   ├── cvr
│   │   │   ├── cvr_res
│   │   │   │   ├── font
│   │   │   │   ├── sound
│   │   │   │   ├── string
│   │   │   │   └── ui_1280x720
│   │   │   └── etc
│   │   │       └── rkadk
│   │   │           ├── 5M
│   │   │           └── 8M
│   │   ├── facial_gate
│   │   ├── ipc
│   │   ├── normal
│   │   ├── nvr
│   │   ├── sample
│   │   └── uvcc
│   └── userdata
│       ├── normal
│       └── sl
├── fonts
├── kconfig
│   ├── lxdialog
│   └── patches
├── linux-kbuild
│   ├── aarch64
│   │   ├── linux-kbuild-4.19
│   │   │   ├── scripts
│   │   │   │   ├── basic
│   │   │   │   ├── genksyms
│   │   │   │   ├── kconfig
│   │   │   │   └── mod
│   │   │   └── tools
│   │   │       └── objtool
│   │   ├── linux-kbuild-4.4
│   │   │   └── scripts
│   │   │       ├── basic
│   │   │       ├── genksyms
│   │   │       ├── kconfig
│   │   │       └── mod
│   │   ├── linux-kbuild-5.10
│   │   │   ├── scripts
│   │   │   │   ├── basic
│   │   │   │   ├── genksyms
│   │   │   │   ├── kconfig
│   │   │   │   └── mod
│   │   │   └── tools
│   │   │       └── objtool
│   │   └── linux-kbuild-6.1
│   │       ├── scripts
│   │       │   ├── basic
│   │       │   ├── genksyms
│   │       │   ├── kconfig
│   │       │   └── mod
│   │       └── tools
│   │           └── objtool
│   └── armhf
│       ├── linux-kbuild-4.19
│       │   ├── scripts
│       │   │   ├── basic
│       │   │   ├── genksyms
│       │   │   ├── kconfig
│       │   │   └── mod
│       │   └── tools
│       │       └── objtool
│       ├── linux-kbuild-4.4
│       │   └── scripts
│       │       ├── basic
│       │       ├── genksyms
│       │       ├── kconfig
│       │       └── mod
│       ├── linux-kbuild-5.10
│       │   ├── scripts
│       │   │   ├── basic
│       │   │   ├── genksyms
│       │   │   ├── kconfig
│       │   │   └── mod
│       │   └── tools
│       │       └── objtool
│       └── linux-kbuild-6.1
│           ├── scripts
│           │   ├── basic
│           │   ├── genksyms
│           │   ├── kconfig
│           │   └── mod
│           └── tools
│               └── objtool
├── overlays
│   ├── buildroot
│   ├── debian
│   ├── recovery
│   ├── rootfs
│   │   ├── bootanim
│   │   │   └── etc
│   │   │       └── bootanim.d
│   │   ├── chromium
│   │   ├── default
│   │   ├── fonts -> ../../fonts/
│   │   ├── frecon
│   │   │   ├── etc
│   │   │   │   └── frecon
│   │   │   │       └── term-switch.d
│   │   │   └── usr
│   │   │       └── bin
│   │   ├── fstrim
│   │   ├── generate-logs
│   │   │   ├── etc
│   │   │   │   └── generate_logs.d
│   │   │   └── usr
│   │   │       └── bin
│   │   ├── input-event-daemon
│   │   │   ├── etc
│   │   │   │   └── input-event-daemon.conf.d
│   │   │   └── usr
│   │   │       └── bin
│   │   ├── irqbalance
│   │   │   ├── etc
│   │   │   │   └── irqbalance.d
│   │   │   └── usr
│   │   │       ├── sbin
│   │   │       └── share
│   │   │           └── man
│   │   │               └── man1
│   │   ├── tools -> ../../tools/
│   │   └── usb-gadget
│   └── yocto
│       ├── pulseaudio
│       │   └── etc
│       │       ├── pulse
│       │       └── rcS.d
│       └── weston
│           ├── etc
│           │   ├── default
│           │   ├── profile.d
│           │   └── xdg
│           │       └── weston
│           │           └── weston.ini.d
│           └── usr
│               └── share
│                   ├── backgrounds
│                   └── icons
├── post-hooks
├── scripts
├── tests
│   └── debian
│       ├── bookworm
│       │   ├── aarch64
│       │   └── armhf
│       ├── bullseye
│       │   ├── aarch64
│       │   └── armhf
│       └── buster
│           ├── aarch64
│           └── armhf
└── tools
    ├── aarch64
    ├── armhf
    └── x86_64

首先我们来看build.sh文件,该文件帮我们完成了环境的配置,声明了调用的配置文件,输出文件位置,我们只需要简单调用该脚本就可以轻松完成整个系统的构建
image
除了build.sh脚本,scripts文件夹还提供了其他的脚本
image

kconfig文件,buildroot根据kconfig提供的配置生成图形化界面,给出所有选项类似于菜单,然后我经过图形化配置之后生成.config文件来进行编译我的固件,也就是点菜

device文件夹,存放各芯片板级配置和Parameter文件,以及一些编译与打包固件的脚本和预备文件

lipthon@Lipthon:~/rk3506/rk3506_linux6.1_v1.2.0/device/rockchip$ ls -a -l
total 24
drwxr-xr-x  5 lipthon lipthon 4096 Nov 13 22:14 .
drwxr-xr-x  3 lipthon lipthon 4096 Oct 12  2024 ..
lrwxrwxrwx  1 lipthon lipthon   13 Nov 13 14:49 .chip -> .chips/rk3506
drwxr-xr-x  3 lipthon lipthon 4096 Oct 12  2024 .chips
drwxr-xr-x  2 lipthon lipthon 4096 Nov  4 13:36 .git
-rw-r--r--  1 lipthon lipthon   24 Oct 12  2024 .gitignore
drwxr-xr-x 14 lipthon lipthon 4096 Jun  4 16:59 common
lrwxrwxrwx  1 lipthon lipthon   13 Nov 13 22:14 rk3506 -> .chips/rk3506

.chip,rk3506同时都指向.chips下的rk3506文件夹(到底为什么要在这里面放一只蛋蛋下巴的大兔子啊!!!油饼啊!!!)
image
image
rk3506_linux6.1_v1.2.0/device/rockchip/rk3506/rockchip_rk3506_evm_nand_defconfig 是我们使用的默认配置文件