直接使用正点原子的集成虚拟机。也可以使用docker环境
更新软件,vscode
sudo apt install sshpass
帮助文档:《RV1126/RV1109 Linux SDK 快速入门》
md5sum RV1126_RV1109_LINUX_SDK_V2.2.4_20211019.tar.bz2
# 2232d18ec054f8de7ba8b0067497a324 RV1126_RV1109_LINUX_SDK_V2.2.4_20211019.tar.bz2
mkdir rv1126_rv1109
#tar xvf rv1126_rv1109_linux_release_20211022.tgz -C rv1126_rv1109
tar xjf RV1126_RV1109_LINUX_SDK_V2.2.4_20211019.tar.bz2 -C rv1126_rv1109
cd rv1126_rv1109
.repo/repo/repo sync -l
# 需要rk 秘钥的
.repo/repo/repo sync -c --no-tags
开发板版本:RV1126_RV1109_EVB_DDR3P216SD6_V13_20200630LXF,以下红框的,都可以使用。
修改配置文件:device/rockchip/rv1126_rv1109/BoardConfig-hg.mk
# 配置文件进行选择
./build.sh lunch
# 指定通用类
./build.sh device/rockchip/rv1126_rv1109/BoardConfig.mk
# 增加 复制并修改
./build.sh device/rockchip/rv1126_rv1109/BoardConfig-hg.mk
# 修改BoardConfig-hg.mk内容为:
export RK_KERNEL_DTS=rv1126-evb-ddr3-v13-hg
export RK_ROOTFS_TYPE=ext2
# 分区文件选择
export RK_PARAMETER=parameter-buildroot-fit.txt
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00200000@0x00038000(rootfs),0x00060000@0x00238000(oem),0x00200000@0x00298000(userdata),-@0x00498000(media:grow)
修改固件目录下的分区表parameter.txt,根据需求修改rootfs分区大小。默认为大小为 3G 。
分区表格式:分区大小@所在地址(分区名)。最后的-@所在地址(分区名:grow)的 - 代表将剩余的内存大小拓展该分区,该写法只能放在 CMDLINE 最后。 其中大小和地址都是以块为单位( 1 块 = 512byte),换算成 MByte 可以用以下公式:
MByte = N * 512 / 1024 / 1024
例如我们看 rootfs 这行: 分区大小是 0x00200000,换算成十进制也就是
2097152 块 * 512 字节每块 / 1024 / 1024 = 1024 MByte
所以 rootfs 分区大小就是 3072M 。
特别注意:分区大小 + 所在地址 = 下一个分区的所在地址。
### 查看U-Boot详细编译命令
./build.sh -h uboot
### U-Boot编译命令
./build.sh uboot
### 使用menuconfig配置U-Boot,选择需要的模块,最后保存退出。
### rv1126_defconfig 文件在目录 u-boot/configs
### 命令格式:make "RK_UBOOT_DEFCONFIG"_defconfig
### RK_UBOOT_DEFCONFIG 定义在./build.sh选择的BoardConfig*.mk
cd u-boot
make rv1126_defconfig
make menuconfig
### 保存配置到对应的文件rv1126_defconfig
make savedefconfig
cp defconfig configs/rv1126_defconfig
# 会在 u-boot 目录下生成 uboot.img 文件和 rv1126_spl_loader_v1.08.108.bin 文件, uboot.img 文件就是我们要烧录的 img 镜像, rv1126_spl_loader_v1.08.108.bin 是启动引导uboot 的文件
### 查看Kernel详细编译命令
./build.sh -h kernel
### Kernel编译命令
./build.sh kernel
cd kernel
### 命令格式:make ARCH=arm "RK_KERNEL_DEFCONFIG" "RK_KERNEL_DEFCONFIG_FRAGMENT"
### RK_KERNEL_DEFCONFIG 和RK_KERNEL_DEFCONFIG_FRAGMENT 都定义在./build.sh选择的 BoardConfig*.mk
### RK_KERNEL_DEFCONFIG_FRAGMENT 是可选项,具体看BoardConfig*.mk配置。
# 下面的放进 kernel/build.sh
make ARCH=arm rv1126_defconfig
make ARCH=arm menuconfig
make ARCH=arm savedefconfig
cp defconfig arch/arm/configs/rv1126_defconfig
pmuio0-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 1800mV
pmuio1-supply
regulator-min-microvolt = 3300mV
regulator-max-microvolt = 3300mV
vccio2-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 3300mV
vccio3-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 1800mV
vccio4-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 1800mV
vccio6-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 1800mV
vccio7-supply
regulator-min-microvolt = 1800mV
regulator-max-microvolt = 1800mV
Running build_kernel succeeded.
buildroot
├── arch: 存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键
├── board:在构建系统时,board默认的boot和kernel配置文件,以及一些板级相关脚本,存放一些默认开发板的配置补丁之类
├── boot:bootloader配置脚本目录,可以选择使用uboot作为bootloader
├── build:所有源码包解压出来的文件存放目录和编译过程的发生目录
├── configs: 板级配置文件,该目录下的配置文件记录着该机器平台或者方案使用的工具链,boot,kernel,各种应用软件包的配置
├── dl: download的简写,一些开源包下载后存在该目录;首次下载后,下次不会再从官网下载,而从dl/目录拿开源包,以节约时间
├── docs: 存放相关的参考帮助文档
├── fs: 各种文件系统的自动构建脚本
├── linux: 存放着kernel的自动构建脚本
├── output: 是编译出来的输出文件夹
│ ├── build: 存放解压后的各种软件包编译完成后的现场,包括主机上Buildroot所需的工具和针对目标编译的软件包
│ ├── host: 存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具
│ ├── images: 存储着所有镜像(包括内核镜像,引导加载程序和根文件系统镜像),需要放在目标系统上的文件
│ ├── staging:是到内部目标工具链host/的符号链接
│ └── target: 用来制作rootfs文件系统,存放Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件。(buildroot根据用户配置把.ko .so .bin文件安装到对应目录中)
├── package:下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk
├── support:公共的支持文档(kconfig code, libtool patches, download helpers, and more)
├── system:根目录主要骨架和相关启动初始化配置,存放文件系统目录的和设备节点的模板,这些模板会被拷贝到output/目录下,用于制作根文件系统rootfs
├── toolchain:目录中存放着各种制作工具链的脚本
├── utils:常用工具
├── CHANGES
├── Config.in
├── Config.in.legacy
├── COPYING
├── DEVELOPERS
├── Makefile
├── Makefile.legacy
└── README
### 查看Rootfs详细编译命令
./build.sh -h rootfs
### Rootfs编译和打包命令
./build.sh rootfs
### 1. 先在SDK根目录查看Board Config对应的rootfs是哪个配置
./build.sh -h rootfs
# ###Current SDK Default [ rootfs ] Build Command###
# source envsetup.sh rockchip_rv1126_rv1109
# make
# source envsetup.sh 选择对应的defconfig
# 所在位置:buildroot/configs/rockchip_rv1126_rv1109_defconfig
# source envsetup.sh rockchip_rv1126_rv1109_hg
# 只包含音视频编解码库、 NPU 库以及头文件 source envsetup.sh alientek_rv1126_libs 编译BSP生成的目录 buildroot/output/rockchip_rv1126_rv1109_libs/BSP
source envsetup.sh rockchip_rv1126_rv1109
### 3. 使用menuconfig配置文件系统,选择需要的模块,最后保存退出。
### 例如:要配置app/ipc-daemon这个工程
cd buildroot
### a. 找到app/ipc-daemon对应的配置文件
### grep -lr "app/ipc-daemon" buildroot/package
### buildroot/package/rockchip/ipc-daemon/ipc-daemon.mk
### 对应的配置文件:buildroot/package/rockchip/ipc-daemon/Config.in
###
### b. 获取配置名称BR2_PACKAGE_IPC_DAEMON
### 查看buildroot/package/rockchip/ipc-daemon/Config.in
make menuconfig # 进入menuconfig后,按“/"进入查找模式,输入BR2_PACKAGE_IPC_DAEMON
### 4. 保存到rootfs配置文件
### ./buildroot/configs/rockchip_rv1126_rv1109_defconfig
make savedefconfig
# Rootfs编译和打包命令
# 编译后在 Buildroot 目录 output/rockchip_芯片型号/images下生成 rootfs.ext4
# 生成oem.img 和 rootfs.ext4软链接
./build.sh rootfs
sc132gs_H_G.xml 复制到external\camera_engine_rkaiq\iqfiles
# 配置
source envsetup.sh rockchip_rv1126_rv1109
./build.sh external/mpp app/mediaserver
./build.sh rootfs
#或者
source envsetup.sh rockchip_rv1126_rv1109
# 编译
make qplayer
# 重编 qplayer
make qplayer-rebuild
# 删除 qplayer
make qplayer-dirclean
./build.sh rootfs
# 配置
source envsetup.sh rockchip_rv1126_rv1109_recovery
# 进入buildroot
# 编译
make qplayer
# 重编 qplayer
make qplayer-rebuild
# 删除 qplayer
make qplayer-dirclean
./build.sh rootfs
这里使用 app/ipc-daemon/ 目录下程序作为修改:
复制并粘贴,修改为app/hg-daemon,把app/ipc-daemon/中文件里面的ipc修改为hg
加到 buildroot的menuconfig中
在buildroot/package/Config.in中,最后一个 endmenu 前
添加内容如下:
menu "hg_hello"
source "package/hg_hello/Config.in"
endmenu
# 编译器一定要选择对应的配置文件
source envsetup.sh rockchip_rv1126_rv1109
./build.sh app/
```bash
include
int main()
{
printf("buildroot helloworld\n");
return 0;
}
```
Makefile内容如下:
```bash
Wall -Wno-deprecated
CFLAGS = $(OPT) $(OTHER)
INCDIR = -I
LIBDIR = -L
LIBS =
APP=hg_hello
SRCS=hello.c
all:
$(CC) -o $(APP) $(SRCS) $(CFLAGS) $(LIBDIR) $(INCDIR) $(LIBS)
clean:
rm $(APP)
```
在buildroot/package/Config.in中,最后一个 endmenu 前
添加内容如下:
bash menu "hg_hello" source "package/hg_hello/Config.in" endmenu
创建Config.in文件,其内容如下:
bash config BR2_PACKAGE_HG_HELLO bool "hg_hello" help This is a demo to add hg_hello.
source envsetup.sh rockchip_rv1126_rv1109
make hg_hello
./build.sh app/hg_hello
在之前选的buildroot/configs/rockchip_rv1126_rv1109_defconfig中,
BR2_ROOTFS_OVERLAY=“board/rockchip/rv1126_rv1109/fs-overlay-sysv/”
在文件buildroot/board/rockchip/rv1126_rv1109/fs-overlay-sysv/etc/init.d/S98_lunch_init为开机自启动。
根文件系统打包前所在位置:buildroot/output/rockchip_rv1126_rv1109/target
# 原来 S98_lunch_init
source /etc/profile.d/RkEnv.sh
case "$1" in
start)
[ -f /oem/RkLunch.sh ] && source /oem/RkLunch.sh
#recovery test
if [ -e "/oem/rockchip_test/auto_reboot.sh" ]; then
mkdir /data/cfg/rockchip_test
cp /oem/rockchip_test/auto_reboot.sh /data/cfg/rockchip_test
source /data/cfg/rockchip_test/auto_reboot.sh &
fi
;;
stop)
[ -f /oem/RkLunch-stop.sh ] && source /oem/RkLunch-stop.sh
printf "stop finished\n"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
修改为:
#!/bin/sh
case "$1" in
start)
printf "start rkmedia_hg_vi_venc_rtsp_test: "
. /etc/profile
source /oem/RkLunch-stop.sh
/oem/usr/bin/rkmedia_hg_vi_venc_rtsp_test &
;;
stop)
killall rkmedia_hg_vi_venc_rtsp_test
printf "stop rkmedia_hg_vi_venc_rtsp_test finished"
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: -bash {start|stop}"
exit 1
;;
esac
exit 0
tar -axvf ~/dl.tar.gz -C buildroot/
烧录选项 | 镜像文件 | 说明 | 位置 |
---|---|---|---|
Loader | MiniLoaderAll.bin | 此文件负责初始化 DDR,引导 Uboot。相当于 SPL 或者 TF-A。 | |
Parameter | parameter.txt | 分区相关的文件 | |
Uboot | uboot.img | uboot 镜像 | |
Misc | misc.img | 系统升级时或者恢复出厂设置时使用 | |
Rootfs | rootfs.img | buildroot 的文件系统 | …/buildroot/output/rockchip_rv1126_rv1109/im |
ages/rootfs.ext2 | |||
boot | zboot.img | kernel 镜像 | |
recovery | recovery.img | 升级相关的文件系统 | |
oem | oem.img | 厂商用的分区文件 | |
Userdata | userdata.img | 用户分区 | 在 device/rockchip/userdata/目录下 |