1、主板概览
Radxa 3B 主板概览
2、参考资料
radxa-repo
radxa-build
radxa-pkg
radxa-docs
u-boot build 参考
u-boot rockchip
3、分区信息
README.rockchip
u-boot/scripts/README.rockchip
[scripts]
# pack_resource.sh
./scripts/pack_resource.sh resource.img
# unpack_resource.sh
./scripts/unpack_resource.sh resource.img out/
# mkbootimg
./scripts/mkbootimg --kernel zImage --second resource.img --ramdisk ramdisk.img --out boot.img
# unpack_bootimg
./scripts/unpack_bootimg --boot_img boot.img --out out/
# repack-bootimg
./scripts/repack-bootimg --boot_img boot.img --kernel zImage -o boot_repack.img
# stacktrace.sh
./scripts/stacktrace.sh dump.txt
./scripts/stacktrace.sh dump.txt spl
./scripts/stacktrace.sh dump.txt tpl
[tools]
# resource_tool
./tools/resource_tool rk-kernel.dtb logo_kernel.bmp logo.bmp
./tools/resource_tool --unpack --image=resource.img out/
# trust_merger
./tools/trust_merger ./RKTRUST/RK3399TRUST.ini
./tools/trust_merger --unpack trust.img
# boot_merger
./tools/boot_merger ./RKBOOT/RK3399MINIALL.ini
./tools/boot_merger --unpack rk3399_loader_v1.17.115.bin
# loaderimage
./tools/loaderimage --pack --uboot ./u-boot.bin uboot.img 0x60000000 --size 1024 2
./tools/loaderimage --unpack --uboot uboot.img uboot.bin
./tools/loaderimage --pack --trustos ./bin/rk32/rk322x_tee_v2.00.bin trust.img 0x80000000 --size 1024 2
./tools/loaderimage --unpack --trustos trust.img tee.bin
# bmp2gray16
./tools/bmp2gray16 --uboot-logo uboot.bmp --charge-logo charging.bmp --lowpower-logo lowpower.bmp --kernel-logo kernel.bmp --output ./logo.img
4、u-boot
u-boot 参考文档
u-boot 源码
https://docs.radxa.com/zero/zero3/low-level-dev/u-boot
(1)bsp 环境配置
以下为 bsp 推荐使用环境:
硬件:推荐使用 x86_64 PC
系统:Ubuntu 或者 Debian
安装依赖
sudo apt update
sudo apt install -y git qemu-user-static binfmt-support
# Podman (推荐)
sudo apt install -y podman podman-docker
sudo touch /etc/containers/nodocker
# Docker
#sudo apt install docker.io
# 次要功能的可选依赖
sudo apt install -y systemd-container
获取代码
bsp 使用了 git 子模块。因此,请使用以下命令获取代码:
git clone --recurse-submodules https://github.com/radxa-repo/bsp.git
(2)构建 U-Boot
bsp [options] <linux|u-boot> <profile> [product]
./bsp -d u-boot latest rock-3b
./bsp -d --no-prepare-source u-boot latest rock-3b
./bsp -d --dirty u-boot latest rock-3b
./bsp u-boot latest rock-3b
./bsp u-boot latest rock-3b
./bsp --no-prepare-source u-boot latest rock-3b
参数说明:
--no-prepare-source
# 使用本地修改进行编译,如果不加这个参数将会从 Radxa U-Boot 仓库同步最新代码并覆盖本地修改
# rock-3b-rk3568_defconfig
- 编译完成后会在当前目录生成许多 deb 包, 只需要安装下面的 deb 即可
u-boot-latest_2023.10-1_arm64.deb
- 将上面两个 deb 包复制到板子上使用 dpkg 指令安装即可完成 U-Boot 安装
sudo dpkg -i u-boot-latest_2023.10-1_arm64.deb
- 安装完成后需要将 U-Boot 刷到启动介质中
cd /usr/lib/u-boot/rock-3b/
sudo ./setup.sh update_bootloader /dev/mmcblk1
#/dev/mmcblk1 为你当前使用的启动介质,需要根据实际使用的设备来选择
sudo ./setup.sh update_bootloader /dev/mmcblk1 rockchip
sudo reboot
bsp => [utils]build => [utils]load_profile => [u-boot]component_build
(3)RK3568 u-boot 基础介绍
u-boot 脚本说明
Boot-order
RK 平台根据前级 Loader 代码是否开源,⽬前有两套启动⽅式:
- TPL/SPL 加载:使用 Rockchip 官方提供的 TPL/SPL U-boot(就是我们上面说的小的 uboot ),该方式完全开源;
- 官方固件加载:使用 Rockchip idbLoader,它由 Rockchip rkbin project 的 Rockchip ddr init bin 和 miniloader bin 组合而成,该方式不开源;
需要注意的是:并不是所有平台都支持这两种启动加载程序方法。
上面我们介绍了 SPL ,那什么是 TPL? 实际上将我们上面所说的 SPL 初始化 SDRAM 等硬件工作的部分独立出去,就是 TPL 。那么我们总结一下:
- TPL 是 Targer Program Loader,就是芯片级的初始化过程,这个时候的代码都是基于芯片平台的部分,它在启动过程中进行 DDR 初始化和一些其他的系统配置,以便后续的 SPL 能够正确地运行;
- SPL 是 Secondary Program Loader ,它从存储设备中读取 trust(如 ATF/OP-TEE)和 uboot 二进制文件,将它们加载到系统内存中并运行它们,进而启动完整的操作系统;
TPL 和 SPL 的区别在于它们的职责不同。TPL 主要负责初始化系统硬件,而 SPL 负责加载和运行其它软件组件,如 trust 和 uboot 。此外,在一些特殊情况下,如加密启动或安全启动模式下,TPL 还可能执行其他额外的任务。
+--------+----------------+----------+-------------+---------+
| Boot | Terminology #1 | Actual | Rockchip | Image |
| stage | | program | Image | Location|
| number | | name | Name | (sector)|
+--------+----------------+----------+-------------+---------+
| 1 | Primary | ROM code | BootROM | |
| | Program | | | |
| | Loader | | | |
| | | | | |
| 2 | Secondary | U-Boot |idbloader.img| 0x40 | pre-loader
| | Program | TPL/SPL | | |
| | Loader (SPL) | | | |
| | | | | |
| 3 | - | U-Boot | u-boot.itb | 0x4000 | including u-boot and atf
| | | | uboot.img | | only used with miniloader
| | | | | |
| | | ATF/TEE | trust.img | 0x6000 | only used with miniloader
| | | | | |
| 4 | - | kernel | boot.img | 0x8000 |
| | | | | |
| 5 | - | rootfs | rootfs.img | 0x40000 |
+--------+----------------+----------+-------------+---------+
// 前级loader闭源
BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL
// 前级loader开源
BOOTROM => TPL => SPL => TRUST => U-BOOT => KERNEL
TPL 相当于 ddr bin,SPL 相当于 miniloader。TPL+SPL 的组合实现了跟 RK 闭源 ddr.bin+miniloader ⼀致的功能,可相互替换。
TPL/SPL/U-Boot-proper
U-Boot 通过使⽤ 不同的编译条件 可以⽤同⼀套代码获取三种不同功能的 Loader:TPL/SPL/U-Boot-proper 。
TPL (Tiny Program Loader) 和 SPL(Secondary Program Loader) 是⽐ U-Boot 更早阶段的 Loader:
- TPL:运⾏在 sram 中,负责完成 ddr 初始化;
- SPL:运⾏在 ddr 中,负责完成系统的 lowlevel 初始化、后级固件加载(trust.img 和 uboot.img);
- U-Boot proper:运⾏在 ddr 中,即我们通常所说的 “U-Boot” ,它负责引导 kernel ;
启动流程:
BOOTROM => TPL(ddr bin) => SPL(miniloader) => TRUST => U-BOOT => KERNEL
更多参考:doc/README.TPL 和 doc/README.SPL
Build-Output
U-Boot 编译成功后会在根⽬录下⽣成⼀些重要⽂件(⽀持 TPL/SPL 编译时才有 TPL/SPL 的⽣成⽂件):
// U-Boot阶段
./u-boot.map // MAP表⽂件
./u-boot.sym // SYMBOL表⽂件
./u-boot // ELF⽂件,类同内核的vmlinux(重要!)
./u-boot.dtb // u-boot⾃⼰的dtb⽂件
./u-boot.bin // 可执⾏⼆进制⽂件,会被打包成 uboot.img ⽤于烧写
// SPL阶段
./spl/u-boot-spl.map // MAP表⽂件
./spl/u-boot-spl.sym // SYMBOL表⽂件
./spl/u-boot-spl // ELF⽂件,类同内核的vmlinux(重要!)
./spl/u-boot-spl.dtb // spl⾃⼰的dtb⽂件
./spl/u-boot-spl.bin // 可执⾏⼆进制⽂件,会被打包成loader⽤于烧写
// TPL阶段
./tpl/u-boot-tpl.map // MAP表⽂件
./tpl/u-boot-tpl.sym // SYMBOL表⽂件
./tpl/u-boot-tpl // ELF⽂件,类同内核的vmlinux(重要!)
./tpl/u-boot-tpl.dtb // tpl⾃⼰的dtb⽂件
./tpl/u-boot-tpl.bin // 可执⾏⼆进制⽂件,会被打包成loader⽤于烧写
Environment-Variables
ENV (Environment-Variables) 是 U-Boot ⽀持的⼀种全局数据管理和传递⽅式,原理是构建⼀张 HASH 映射表,把⽤⼾的数据以 “键值-数据” 作为表项进⾏管理。
EVN 通常⽤于定义平台配置参数:固件加载地址、⽹络配置(ipaddr、serverip)、bootcmd、bootargs 等,⽤⼾可以在命令⾏下使⽤ printenv 命令打印出来。
- ⽤⼾可选择是否把 ENV 数据保存到本地存储上
- ENV 数据仅限于 U-Boot 使⽤,⽆法直接传递给内核、内核也⽆法直接解析
- ⽤⼾层可以通过 U-Boot 提供的 fw_printenv⼯ 具访问 ENV 数据
uboot DTS
U-Boot 有⾃⼰的 DTS ⽂件,编译时会⾃动⽣成相应的 DTB ⽂件,被添加在 u-boot.bin 末尾。
各平台具体使⽤哪个 DTS ⽂件,通过 defconfig 中的 CONFIG_DEFAULT_DEVICE_TREE 指定。
- 如何为目标板添加一个dts文件
在 arch/*/dts 目录下,添加一个 xxx.dts 文件,该文件可以从内核拷贝,或者在 uboot dts 目录下选择一个其它目标板的 dts 为基础,再根据实际需求进行修改。修改完成后,在 arch/arm/dts/Makefile 中为其添加编译选项:
dtb-$(CONFIG_yyy) += xxx.dtb
其中 yyy 为使用该 dts 的目标板
- 如何为目标板选择 dts 文件
uboot 的设备树文件位于 arch/*/dts 目录下,可通过以下选项为目标板选择一个默认的 dts 文件:
CONFIG_DEFAULT_DEVICE_TREE="xxx”
这是因为与内核不一样,uboot最终的镜像会和dtb打包在一个镜像文件中,因此在编译流程中就需要知道最终被使用的dtb。关于uboot镜像与dtb之间的关系后续在分析,先梳理流程。
-
uboot与dtb可以有以下几种打包组合方式:
- 若定义了 CONFIG_OF_EMBED 选项,则在链接时会为 dtb 指定一个以 __dtb_dt_begin 开头的单独的段,dtb 的内容将被直接链接到 uboot.bin 镜像中。官方建议这种方式只在开发和调试阶段使用,而不要用于生产阶段
- 若定义了 CONFIG_OF_SEPARATE 选项,dtb 将会被编译为 u-boot.dtb 文件,而 uboot 原始镜像被编译为 u-boot-nodtb.bin 文件,并通过以下命令将它们连接为最终的 uboot.bin 文件:
cat u-boot-nodtb.bin u-boot.dtb >uboot.bin
(4)脚本执行顺序
bsp
└── [utils]build
├── [utils]load_profile
└── [uboot]component_build
├── [utils]bsp_build
│ ├── [utils]prepare_source
│ ├── [uboot]bsp_prepare
│ └── [uboot]bsp_make(make -C)
│ └── Makefile
└── [uboot]bsp_makedeb
(5)radxa uboot deb 结构
/usr/lib/u-boot/rock-3b/
setup.sh 脚本分析
setup.sh
└── update_bootloader /dev/mmcblk1
└── update_idbloader /dev/mmcblk1
├── idbloader
├── 刷 idbloader.img
└── 刷 u-boot.itb
update_bootloader() {
local DEVICE=$1
update_idbloader "$DEVICE"
if [[ -f "$SCRIPT_DIR/u-boot.itb" ]]
then
# dd conv=notrunc,fsync if=/usr/lib/u-boot/rock-3b/u-boot.itb of=/dev/mmcblk1 bs=512 seek=16384
dd conv=notrunc,fsync if="$SCRIPT_DIR/u-boot.itb" of=$DEVICE bs=512 seek=16384
elif [[ -f "$SCRIPT_DIR/uboot.img" ]] && [[ -f "$SCRIPT_DIR/trust.img" ]]
then
dd conv=notrunc,fsync if="$SCRIPT_DIR/uboot.img" of=$DEVICE bs=512 seek=16384
dd conv=notrunc,fsync if="$SCRIPT_DIR/trust.img" of=$DEVICE bs=512 seek=24576
else
echo "Missing U-Boot binary!" >&2
return "$ERROR_REQUIRE_FILE"
fi
# sync /dev/mmcblk1
sync "$DEVICE"
}
update_idbloader() {
local DEVICE=$1
# 偏移 32 K
# dd conv=notrunc,fsync if=/usr/lib/u-boot/rock-3b/idbloader.img of=/dev/mmcblk1 bs=512 seek=64
dd conv=notrunc,fsync if="$(idbloader)" of=$DEVICE bs=512 seek=64
}
idbloader() {
if [ -e "$SCRIPT_DIR/idbloader-sd_nand.img" ]
then
echo "$SCRIPT_DIR/idbloader-sd_nand.img"
else
echo "$SCRIPT_DIR/idbloader.img"
fi
}
# echo /usr/lib/u-boot/rock-3b/idbloader.img
(6)资料截图
闭源版本
<SDK>/rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.13.bin ---------------> tpl
<SDK>/rkbin/bin/rk35/rk356x_spl_v1.12.bin -------------------------------> spl
<SDK>/rkbin/bin 目录下存放了很多 RK 提供的二进制文件,这些二进制文件都是不开源的,
所以只有二进制文件。
开源版本
spl 镜像位于 <U-Boot>/spl 目录下:
tpl 镜像位于 <U-Boot>/tpl 目录下:
(7)参考资料
Rockchip RK3399 - 引导流程和准备工作 重制
Rockchip RK3399 - 引导流程和准备工作
Rockchip RK3399 - TPL/SPL方式加载uboot
Rockchip RK3399 - 移植uboot 2023.04 & linux 6.3
Rockchip RK3399 - busybox 1.36.0制作根文件系统
【精读Uboot】its文件语法
【精读Uboot】Uboot跳转内核
Uboot中的DM驱动模型
Uboot链接脚本分析(ARMv8架构)
NXP i.MX8M secure boot流程
Rockchip | Rockchip ATF(ARM Trusted Firmware)的获取与构建
Rockchip | 启动引导的各个阶段及其对应固件
rkbin
uImage的制作工具mkimage详解(源码编译、使用方法、添加的头解析、uImage的制作)
uImage的制作过程详解
uboot-spl.bin分析
U-boot 编译
5、Kernel 开发
(1)构建内核
bsp [options] <linux|u-boot> <profile> [product]
./bsp linux rk356x -s
./bsp linux rk356x
./bsp -d --dirty linux rk356x -r 999
./bsp --no-prepare-source linux rk3568 -r 999
参数说明:
# --no-prepare-source # 使用本地修改进行编译,如果不加这个参数将会从 Radxa kernel 仓库同步最新代码并覆盖本地修改
# -r 999 # 指定内核的版本号为 999,以优先使用
# rockchip_linux_defconfig
# rk3568-atk-evb1-ddr4-v10-linux ??
- 编译完成后会在当前目录生成许多 deb 包, 只需要安装下面两个 deb 即可
linux-headers-5.10.160-999-rk356x_5.10.160-20_arm64.deb
linux-image-5.10.160-999-rk356x_5.10.160-20_arm64.deb
- 将上面两个 deb 包复制到板子上使用 dpkg 指令安装即可完成内核安装
sudo dpkg -i linux-image-5.10.160-999-rk356x_5.10.160-20_arm64.deb
sudo dpkg -i linux-headers-5.10.160-999-rk356x_5.10.160-20_arm64.deb
sudo reboot
(2)脚本执行顺序
bsp
└── [utils]build
├── [utils]load_profile # lib/linux.sh, linux/fork.conf
└── [linux]component_build
├── [utils]bsp_build
│ ├── [utils]prepare_source
│ ├── [linux]bsp_prepare
│ └── [linux]bsp_make(make -C)
│ └── Makefile
└── [linux]bsp_makedeb
(3)radxa kernel deb 结构
/usr/lib/linux-image-5.10.160-704-rk356x/rockchip/
/usr/lib/linux-image-5.10.160-704-rk356x/rockchip/overlays/
/lib/modules/5.10.160-704-rk356x/
/lib/modules/5.10.160-704-rk356x/kernel/
(4)DTS
☆ Linux驱动开发:设备树dts详解
Linux DTS介绍
嵌入式Linux学习笔记之Linux设备树
【设备树笔记整理1】字符设备驱动程序的三种写法
【设备树笔记整理2】Linux 总线设备驱动模型
【设备树笔记整理3】设备树的规范(dts和dtb)
【设备树笔记整理4】内核对设备树的处理
【设备树笔记整理5】u-boot对设备树的支持
【设备树笔记整理6】中断系统中的设备树
【设备树笔记整理7】实践操作
官方文档: Specifications - DeviceTree
官网文档 Github
(5)驱动
正点原子【第三期】手把手教你学Linux之系统移植和根文件系统构建篇
正点原子【第四期】手把手教你学 Linux之驱动开发篇
正点原子资料下载中心
linux THIS_MODULE 的含义
THIS_MODULE
6、RadxaOS
rbuild github
radxa os 文档
radxa os 详细文档
(1)安装依赖
sudo apt update
sudo apt install -y git
# Podman (recommended)
sudo apt install -y podman podman-docker
sudo touch /etc/containers/nodocker
# Docker
#sudo apt install -y docker.io
#sudo adduser $USER docker
#sudo reboot
(2)获取代码
git clone https://github.com/radxa-repo/rbuild.git
(3)编译
# Build radxa-cm3-sodimm-io image with default OS (currently Debian Bullseye) and flavor (CLI)
./rbuild radxa-cm3-sodimm-io
# Build rock-5b Debian image with KDE
./rbuild rock-5b kde
./rbuild rock-3b bullseye kde -d
./rbuild rock-3b cli -c latest
debos
debos 是一款简化各种基于 Debian 的操作系统映像创建的工具。虽然大多数其他工具都专注于特定用例,但 debos 更像是一个工具链,可让常见操作变得简单,同时提供足够的资源来完成幕后可能需要的任何调整。
7、rsetup
8、摄像头
(1)radxa 摄像头操作
- 预览
打开终端,输入以下命令打开相机预览:
gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=1920,height=1080 ! xvimagesink;
- 拍照
打开终端,输入以下命令打开相机进行拍照:
gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=1920,height=1080 ! jpegenc ! multifilesink location=file.name.jpg;
- 拍摄视频
打开终端,输入以下命令打开相机进行拍摄视频:
gst-launch-1.0 v4l2src num-buffers=512 device=/dev/video0 io-mode=4 ! videoconvert ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! tee name=t ! queue ! mpph264enc ! queue ! h264parse ! mpegtsmux ! filesink location=/home/radxa/file.name.mp4
(2)v4l2-ctl
# 查看帮助文档梗概如下
v4l2-ctl --help
# 查看完整的帮助文档如下,内容相对较多
v4l2-ctl --help-all
# 查看与 streaming 相关的参数如下
v4l2-ctl --help-streaming
# 查看与 vidcap 相关的参数如下。它主要包括 get-fmt、set-fmt 等
v4l2-ctl --help-vidcap
使用 v4l2-ctl 抓帧
示例一,抓取 RKCIF 输出的 1 帧 NV12 数据保存到 /tmp/nv12.bin,分辨率为 640x480。在保存数据前,先
丢弃前面 3 帧 (即前面 3 帧虽然返回给 userspace,但不保存到文件) 。
v4l2-ctl -d /dev/video0 \
--set-fmt-video=width=640,height=480,pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=3 \
--stream-to=/tmp/nv12.bin \
--stream-count=1 \
--stream-poll
示例二,抓取RKISP输出的 10 帧 NV12 数据保存到 /tmp/nv12.bin,分辨率为 1920x1080 。
v4l2-ctl -d /dev/video1 \
--set-selection=target=crop,top=0,left=0,width=1920,height=1080
--set-fmt-video=width=1920,height=1080,pixelformat=NV12 \
--stream-mmap=3 \
--stream-to=/tmp/nv12.bin \
--stream-count=10 \
--stream-poll
参数的说明:
- -d,指定操作对象为 /dev/video0 设备。
- –set-selection,指定对输入图像进行裁剪。特别是当 RKISP1 的前级大小发生变化时要保证 selection 不大于前级输出大小。RKCIF 的裁剪则是通过 --set-crop 参数设置的
- –set-fmt-video,指定了宽高及 pxielformat (用 FourCC 表示)。 NV12 即用 FourCC 表示的 pixelformat 。
- –stream-mmap,指定 buffer 的类型为 mmap,即由 kernel 分配的物理连续的或经过 iommu 映射的 buffer 。
- –stream-skip,指定丢弃(不保存到文件)前 3 帧
- –stream-to,指定帧数据保存的文件路径
- –stream-count,指定抓取的帧数,不包括–stream-skip 丢弃的数量
- –stream-poll,该选项指示 v4l2-ctl 采用异步 IO,即在 dqbuf 前先用 select 等等帧数据完成,从而保证 dqbuf 不阻塞。否则 dqbuf 将会阻塞直到有数据帧到来
设置曝光、gain 等 control
如果 Sensor 驱动有实现 v4l2 control,在采集图像前,可以通过 v4l2-ctl 设置如曝光、gain 等。RKCIF 或 RKISP 会继承 sub device 的 control,因此这里通过 /dev/video3 可以看到 Sensor 的 v4l2 control。
如下是 RK3326 SDK 机子上查看到的 OV5695 的相关设置,包括 exposure,gain,blanking,test_pattern 等。
v4l2-ctl -d /dev/video1 -l
User Controls
exposure 0x00980911 (int) : min=0 max=4095 step=1 default=1575 value=1589
gain 0x00980913 (int) : min=256 max=43663 step=1 default=256 value=256
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
Image Source Controls
vertical_blanking 0x009e0901 (int) : min=686 max=686 step=1 default=686 value=686
horizontal_blanking 0x009e0902 (int) : min=1524 max=1524 step=1 default=1524 value=1524
analogue_gain 0x009e0903 (int) : min=256 max=2816 step=1 default=512 value=1554
Image Processing Controls
link_frequency 0x009f0901 (intmenu): min=0 max=0 default=0 value=0
pixel_rate 0x009f0902 (int64) : min=0 max=182463120 step=1 default=182463120 value=182463120 flags=read-only
test_pattern 0x009f0903 (menu) : min=0 max=13 default=0 value=0
用 v4l2-ctl 可以修改这些 control 。如修改 exposure 及 analogue_gain 如下。
v4l2-ctl -d /dev/video3 --set-ctrl 'exposure=1216,analogue_gain=1000
(2)MIPI接口
MIPI CSI(Camera Serial Interface)接口是移动设备中摄像头传输的主要接口之一。摄像头通常使用 MIPI CSI 接口来传输图像数据。MIPI CSI 接口支持多种数据编码格式,包括 YUV、RGB 和 RAW 等。
MIPI DSI(Display Serial Interface)接口可以用于传输触摸屏输入信号和视频信号。触摸屏通常使用 MIPI DSI 接口来传输触摸屏输入信号。MIPI DSI 接口还可以同时传输视频信号和触摸屏输入信号,从而节省系统成本和空间。
CIF 和 ISP
RK3568 CIF和ISP的关联
CIF(Camera Interface)
在本文档中,我们将介绍 RK3568 芯片的 CIF (Camera Interface) 和 lSP (lmage SignalProcessor) 模块。这两个模块是 RK3568 芯片的关键组成部分,用于图像采集和处理。
CIF 是一个标准接口,用于连接 CMOS 或 CCD 图像传感器,并从传感器读取图像数据。而 ISP 是一种专门用于图像处理的硬件模块,它可以对从传感器读取的原始图像数据进行预处理、降噪、白平衡、自动对焦等处理操作,以生成最终的图像数据。
在 RK3568 芯片中,CIF 模块负责与相机模块进行物理连接,并将原始的图像数据传输到 ISP 模块进行进一步处理。同时,ISP 模块还可以通过 CIF 模块向相机模块发送控制信号,以控制相机的曝光时间、增益等参数。因此,CF 和 ISP 模块在 RK3568 芯片中密切关联,共同实现了高质量的图像采集和处理功能。
RK3568 芯片的 CIF 和 ISP 模块是紧密协作的,通过相互配合完成了复杂的图像处理任务,为用户提供了出色的图像采集和处理体验 。
9、H264
10、问题
sudo apt-get install ncurses-dev
Ubuntu24.04 安装 libwebkit2gtk-4.0
Types: deb
URIs: http://br.archive.ubuntu.com/ubuntu/
Suites: jammy noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: jammy-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
sudo apt install libwebkit2gtk-4.0-dev
11、知识
(1)硬件知识
(2)交叉编译工具链
(3)md
Yank Note
盘点一些好用且小众的 Markdown 编辑器
☆