Zeratul平台编译


一.Zeratul编译脚本说明

 Zeratul平台脚本功能说明表

脚本名称

脚本功能

Tassadar_env_setup.sh

确保系统安装了必要工具(make、cpio、lzma、lzop、7z、dd 等),解压SDK内资源及工具链,设置环境变量。

build_camera_all.sh

一键编译并打包。会校验工具链/环境,按需构建 boot、tag、kernel、rootfs、system、recovery、config,并按分区偏移打包成 .bin 固件。

build_camera_boot.sh

根据 SOC、Flash、板卡版本(及可选 Flash 大小)匹配并拷贝预编译 boot 二进制到输出目录。

build_camera_config.sh

主要用于 NAND 场景,生成 config 分区镜像(UBIFS + UBI 封装)并输出 config 文件。

build_camera_uImage.sh

编译摄像机固件内核 uImage,可选重新加载默认 defconfig,最后将产物软链接到配置的内核输出路径。

build_camera_drivers.sh

编译内核模块(make modules + make modules_install)并安装到内核目录下的 _modules 目录;支持强制使用默认 defconfig。

build_camera_recovery.sh

使用 recovery defconfig 编译恢复模式内核镜像(uImage.lzma),并输出 recovery 分区文件。

build_camera_rootfs.sh

组装 rootfs 内容、拷贝内核模块、移除部分 .ko 并软链到 system 分区,最终打包压缩 rootfs(lzma/lzo);也支持使用 root 权限创建设备节点。; 用法: ./build_camera_rootfs.sh; ./build/zeratul/build_camera_rootfs.sh -f -c -b; ./build/zeratul/build_camera_rootfs.sh -o; ./build/zeratul/build_camera_rootfs.sh -t lzo; ./build/zeratul/build_camera_rootfs.sh -r; -f:重新编译驱动; -c:复制用户态程序(脚本保留参数); -b:构建应用(脚本保留参数); -o:仅重打包已有 out rootfs; -t <lzma|lzo>:压缩类型; -r:使用 sudo 创建设备节点

build_camera_system.sh

构建 system 分区镜像;将指定内核模块复制到 system/lib/modules;根据 Flash 类型打包为 squashfs(NOR/NOR_NAND)或 UBIFS/UBI(NAND)。

build_camera_tag.sh

通过 tag 生成工具,按平台/传感器/Flash 配置生成 tag 元数据二进制。

pad_camera_u-boot.sh

基于固定偏移,将自定义 u-boot 内容填充/替换到基础 boot 固件中,生成定制 boot 文件。; 示例:./pad_camera_u-boot.sh -i u-boot-with-spl.bin -o boot_custom -b prebuilt/zeratul_boot/bin/boot_PRJ009ZL_NOR_V1.bin

build_camera_info.sh

不支持独立使用。根据环境变量选择内核默认配置文件名称,被build_camera_drivers.sh和build_camera_uImage.sh调用。

build_sensor_all.sh

编译opensource/drivers/sensors目录下所有sensor驱动,并释放到内核 arch/mips/xburst/lib/isp/sensor_PRJ00*下。

check_toolchain.sh

检查当前环境工具链是否正确。

check_env.sh

检查当前路劲SDK版本,LZMA、LZO版本是否正确。

二.系统分区编译

2.1 SDK脚本编译

注意:

使用build_camera_all.sh编译所有资源,其实际是调用编译各个分区脚本,若out/camera目录下有相应分区的文件,则不重新编译使用目录下已有的。如果需要重新编译,需要将out/camera目录下相应的分区内容删除,再次执行脚本即可。

使用build_camera_all.sh编译,会使用SDK默认配置,强制覆盖修改内容,如果需要修改分区内容,需要进行手动或者单分区脚本编译;为避免修改内容被覆盖,不建议使用build_camera_all.sh脚本编译。

Zeratul平台编译步骤如下:

步骤1:进入SDK顶层路径“software/board”目录下,输入如下命令,注意的是下面的source命令在每次开启新的终端时候必须输入,否则编译SDK错误!!!

source ./build/Tassadar_env_setup.sh

注意:

source命令在每次开启新的终端时候必须输入,否则编译SDK错误。

2.1.1 单摄配置环境流程:

SDK types:

[1] ZERATUL

[2] ISVP
 
please enter the SDK type (default 1): 1
 
SOC Types:
 
[1] PRJ009ZL
 
[2] PRJ009ZN
 
[3] PRJ009ZX
 
[4] PRJ009VL
 
[5] PRJ009VN
 
[6] PRJ009VX
 
[7] PRJ008VNP
 
[8] PRJ008ZL
 
[9] PRJ008ZN
 
[10] PRJ008VL
 
[11] PRJ008VN
 
[12] PRJ008VNP
 
[13] PRJ008DL
 
[14] PRJ007ZL
 
[15] PRJ007ZN
 
[16] PRJ007ZX
 
[17] PRJ007VL
 
[18] PRJ007VN
 
[19] PRJ007VNP
 
[20] PRJ007DL
 
[21] PRJ007VX
 
please enter the SOC type index(default 1): 10 //PRJ007表示的T32,PRJ008表示T33,PRJ009表示T32Pro,后续的字母是对应芯片型号
 
Flash Types:
 
[1] NOR
 
[2] NAND
 
[3] NOR_NAND
 
[4] EMMC
 
please enter the flash type index(default 1): 1 //选择存储类型
 
please enter the num of jobs(build threads)(defalt 1): 8 //选择编译的线程个数
 
Build types:
 
[1] release
 
[2] debug
 
please enter the system build type(defalt 1): 1 //release是正常固件,debug是调试固件,对应系统启动后输出信息不同
 
please enter the FW sub version(pad to the end of the version string), or leave this empty as default:
 
Flash Size:
 
[1] 16M
 
[2] 8M
 
please enter the flash size index(default 1): 1 //配置flash的大小
 
Supproted sensor nums:
 
[1] one
 
[2] two
 
[3] three
 
[4] four
 
please enter the SENSOR num(defalt 1): 1 //选择sensor的个数,后续会根据个数来选择sensor型号
 
Supproted sensors:
 
[1] cv8001
 
[2] gc2063
 
[3] gc2083
 
[4] gc3003
 
[5] gc4023
 
[6] gc5603
 
[7] gc5613
 
[8] gc8613
 
[9] gc8613a
 
[10] imx415
 
[11] os02g10
 
[12] os02k10
 
[13] os03a10
 
[14] os04d10
 
[15] os06a10
 
[16] sc200ai
 
[17] sc301iot
 
[18] sc3336
 
[19] sc3336p
 
[20] sc401ai
 
[21] sc431hai
 
[22] sc4336
 
[23] sc4336p
 
[24] sc450ai
 
[25] sc501ai
 
[26] sc630ai
 
[27] sc8238
 
[28] sc231hai
 
please enter the Camera Sensor0 index(defalt 1): 2 //选择sensor的名称
 
Supproted Linux version: //选择内核的版本
 
[1] 4.4.94
 
[2] 3.10.14
 
[3] 5.15

2.1.2 双摄配置环境流程:

SDK types:
 
[1] ZERATUL
 
[2] ISVP
 
please enter the SDK type (default 1): 1
 
SOC Types:
 
[1] PRJ009ZL
 
[2] PRJ009ZN
 
[3] PRJ009ZX
 
[4] PRJ009VL
 
[5] PRJ009VN
 
[6] PRJ009VX
 
[7] PRJ008VNP
 
[8] PRJ008ZL
 
[9] PRJ008ZN
 
[10] PRJ008VL
 
[11] PRJ008VN
 
[12] PRJ008VNP
 
[13] PRJ008DL
 
[14] PRJ007ZL
 
[15] PRJ007ZN
 
[16] PRJ007ZX
 
[17] PRJ007VL
 
[18] PRJ007VN
 
[19] PRJ007VNP
 
[20] PRJ007DL
 
[21] PRJ007VX
 
please enter the SOC type index(default 1): 10
 
Flash Types:
 
[1] NOR
 
[2] NAND
 
[3] NOR_NAND
 
[4] EMMC
 
please enter the flash type index(default 1): 1
 
please enter the num of jobs(build threads)(defalt 1): 16
 
Build types:
 
[1] release
 
[2] debug
 
please enter the system build type(defalt 1): 1
 
please enter the FW sub version(pad to the end of the version string), or leave this empty as default:
 
Flash Size:
 
[1] 16M
 
[2] 8M
 
please enter the flash size index(default 1): 1
 
Supproted sensor nums:
 
[1] one
 
[2] two
 
[3] three
 
[4] four
 
please enter the SENSOR num(defalt 1): 2
 
Supproted sensors:
 
[1] cv8001
 
[2] gc2063
 
[3] gc2083
 
[4] gc3003
 
[5] gc4023
 
[6] gc5603
 
[7] gc5613
 
[8] gc8613
 
[9] gc8613a
 
[10] imx415
 
[11] os02g10
 
[12] os02k10
 
[13] os03a10
 
[14] os04d10
 
[15] os06a10
 
[16] sc200ai
 
[17] sc301iot
 
[18] sc3336
 
[19] sc3336p
 
[20] sc401ai
 
[21] sc431hai
 
[22] sc4336
 
[23] sc4336p
 
[24] sc450ai
 
[25] sc501ai
 
[26] sc630ai
 
[27] sc8238
 
[28] sc200ai
 
please enter the Camera Sensor0 index(defalt 1): 2
 
Supproted sensors:
 
[1] cv8001
 
[2] gc2063
 
[3] gc2083
 
[4] gc3003
 
[5] gc4023
 
[6] gc5603
 
[7] gc5613
 
[8] gc8613
 
[9] gc8613a
 
[10] imx415
 
[11] os02g10
 
[12] os02k10
 
[13] os03a10
 
[14] os04d10
 
[15] os06a10
 
[16] sc200ai
 
[17] sc301iot
 
[18] sc3336
 
[19] sc3336p
 
[20] sc401ai
 
[21] sc431hai
 
[22] sc4336
 
[23] sc4336p
 
[24] sc450ai
 
[25] sc501ai
 
[26] sc630ai
 
[27] sc8238
 
[28] sc200ai
 
please enter the Camera Sensor1 index(defalt 1): 2
 
Supproted i2c nums:
 
[1] one
 
[2] two
 
please enter the number of i2c used(defalt 1): 2
 
Supproted Linux version:
 
[1] 4.4.94
 
[2] 3.10.14
 
[3] 5.15
 
please enter the Linux version index(defalt 1): 2

注:i2c选one表示一根i2c总线挂载两个从机,two则表示两根i2c总线分别挂载两个从机。

按照提示选择后,基础的环境变量就设置完成,并解压了SDK,其他编译脚本会根据这些选项,编译相应的内容。

输入export命令出现ZRT_ENV_**表示终端source环境正确。

 zeratul环境

步骤二:在顶层路径使用脚本编译整个固件;

./build/zeratul/build_camera_all.sh

结束后在”board/out/” 目录下生成整个固件。在“out/camera/” 目录下生成各个分区的内容。内容如下:

├── camera
 
│   ├── boot.bin |U-Boot firmware
 
│   ├── recovery.bin |recovery firmware
 
│   ├── _rootfs_camera |system rootfs
 
│   ├── rootfs_camera.cpio.lzma |system rootfs firmware
 
├── rootfs_camera.cpio.recp-> /***/Tassadar-T32_T33_T32Pro-2.*.*-*-********/software/board/out/camera/rootfs_camera.cpio.jzlzma |Soft connect to target file
 
│   ├── _rootfs_camera_recovery |recovery rootfs
 
│   ├── system |System partition file
 
│   ├── system.bin |System partition firmware
 
│   ├── tag.bin |Tag partition firmware
 
│   ├── uImage.jzlzma |kernel partition firmware
 
│   └── uImage.zrt -> /***/Tassadar-T32_T33_T32Pro-2.*.*-*-********/software/board/out/camera/uImage.jzlzma |Soft connect to target file
 
└── ZRT_SOC_T32ProZN_GC2063_FW.bin |Complete system firmware


 脚本对应关系图 

在实际使用中脚本调用关系如上图,各个分区的脚本相互独立。

脚本详细使用,请参考software/board/build/zeratul下的README.zh或README.en。

步骤三:烧录整个固件;

具体烧录方法,查看《SDK 使用指南.pdf》。

步骤四:烧录完成后测试基本功能;

往SD卡中拷贝一个对应Sensor的Sample。具体使用方法查看“[第9章 IMP库sample使用]”。

步骤五:测试并挂载SD卡;

在开发板命令行中输入命令,加载并挂载SD卡,注意此脚本的目的是在基础系统环境下测试SD卡,其脚本使用到了MMC驱动,后续使用WIFI模组不再需要此脚本,否则会影响到WIFI加载。

insmod_vfat
insmod_mmc

步骤六:查看SD卡内容;

在开发板命令行中输入如下命令进入目录,即可查看SD卡内容:

cd /tmp/mnt/sdcard

步骤七:运行sample测试基本功能。

./sample-Encoder-video

三.系统分区单独编译

3.1 U-Boot使用

Bootload作为系统的引导程序,进行简单的硬件初始化工作;Zeratul的Bootload直接引导操作系统快速启动,因此不能编程,也没有U-Boot的命令行功能。若开发者需要进入U-Boot的命令行进行debug或者执行客户订制程序(如TF卡升级),可以在系统启动后,在命令行输入recovery进入Normal U-Boot。

1. Boot存在于boot分区中,开发者可以替换自己的U-Boot(第二阶段)。U-Boot的源码可以使用software/board/Ingenic-SDK/opensource/uboot下的普通U-Boot源码,编译出U-Boot后,可以通过build/zeratul/pad_camera_u-boot.sh将自己的U-Boot 替换boot.bin的U-Boot (第二阶段)。

在software/board/Ingenic-SDK/opensource/uboot/ 目录的boards.cfg文件中,包含所有支持芯片的编译命令,可以按照需要进行编译,sfcnor后缀代表nor flash启动U-Boot,sfcnand后缀代表nand flash启动U-Boot,msc0代表卡起U-Boot。

SDK中的Ingenic-SDK/resource/prebuilt/zeratul/zeratul_boot/bin 路径下存放编译好的16M flash版本U-Boot(SPL和U-Boot第二阶段)。若需使用更高容量的flash需要重新编译。

使用方法:

usage:
./pad_camera_u-boot.sh -i <input_file> -o <output_file> -b <boot.bin fw>
 
eg:
./pad_camera_u-boot.sh -i u-boot-with-spl.bin -o boot_custom -b ${ZRT_ENV_TOP_DIR}/firmware/camera/bootloader/boot.bin

命令说明:

-i: 指定输入文件,通常为常规U-Boot编译生成的u-boot-with-spl.bin(从固定偏移拷贝U-Boot到指定文件的偏移处);

-o:指定输出文件名称;

-b:指SDK resource/prebuilt/zeratul/zeratul_boot/bin路劲下的Bin文件,或者客户自己维护的包含Bootload和U-Boot(第二阶段)的Bin文件。

注意:脚本生成的文件大小,请小于分区大小。

1. Boot打印版本说明: U-Boot打印版本说明表

V:240920-PRJ007ZN-0861515-LP

240920:此U-Boot编译日期2024年9月20日


PRJ007ZN:T32 ZN 系列


0861515:君正内部维护版本commit


HP:性能版本。; 其他:HP高性能,LP低性能

3.2 Tag编译

“software/board/Ingenic-SDK/resource/tools/zeratul/make_tag”目录下有如图 4-3内容。

make_tag内容图 

 

若需要添加新的sensor,需要在上述目录下制作对应的bin文件。目录功能说明如下:

riscv_fw:文件的内容是riscv初始化对应sensor的固件。

sensor_init_setting:存放 sensor 初始化配置文件。PRJ009_<sensor>_init.c 需要手动制作,并须遵循此命名格式。

sensor_calibration_bin:存放sensor的图像效果文件。

sensor_start_table:可以根据实际sensor使用进行添加修改。其中包括IRCUT、IRLED、引脚定义,ADC阈值设置等。具体使用可以参考目录下源码。

详细文档说明请查看《Zeratul 平台TAG工具使用指南》。

3.2.1使用脚本生成TAG

修改make_tag之后,在顶层目录执行以下命令编译tag:

./build/zeratul/build_camera_tag.sh

3.2.2 对新的sensor添加tag

请查看《Zeratul 平台Sensor添加及调试说明》文档。

3.2.3 更改cmdline分区大小

详细文档说明请查看《Zeratul 平台TAG工具使用指南》。

四.Kernel编译

4.1 手动编译Kernel

进入”opensource/kernel-x.xx.xx/arch/mips/config”目录,此目录下包含常规、Zeratul平台、Atlas平台的内核配置文件。

例如PRJ009_zeratul_nor_camera_defconfig含义为:zeratul代表Zeratul 系统。PRJ007代表T32系列芯片,PRJ008代表T33系列芯片,PRJ009代表T32Pro系列芯片。

 kernel板级选择表

PRJ007_zeratul_nor_camera_debug_defconfig; PRJ008_zeratul_nor_camera_debug_defconfig; PRJ009_zeratul_nor_camera_debug_defconfig

T32/T33/T32Pro Nor flash Zeratul Linux debug模式系统配置

PRJ007_zeratul_nor_camera_defconfig; PRJ008_zeratul_nor_camera_defconfig; PRJ009_zeratul_nor_camera_defconfig

T32/T33/T32Pro Nor flash Zeratul Linux系统配置

PRJ007_zeratul_nor_camera_recovery_defconfig; PRJ008_zeratul_nor_camera_recovery_defconfig; PRJ009_zeratul_nor_camera_recovery_defconfig

T32/T33/T32Pro Nor flash Zeratul recovery 系统配置

根据不同根根据不同的存储介质选择:

make PRJ007_zeratul_nor_camera_defconfig //T32
make PRJ008_zeratul_nor_camera_defconfig //T33
make PRJ009_zeratul_nor_camera_defconfig //T32Pro

然后输入命令:

make uImage

最后生成在目录arch/mips/boot/生成四种文件:

 kernel格式对应表

Kernel 镜像

说明

uImage.zrt

未压缩的原始kernel固件

uImage.lzo

标准lzo压缩的kerenl固件

uImage.jzlzma

君正lzma协议压缩的kernel固件

uImage.lzma

标准lzma压缩的kernel固件

推荐使用jzlzma格式kernel。uImage.lzma仅recovery系统支持。

4.2 使用脚本编译Kernel

在SDK工程顶层目录输入如下命令:

./build/zeratul/build_camera_uImage.sh

脚本会根据编译环境使用arch/mips/configs下的默认配置,并编译内核,编译完成同时拷贝到“out/camera”目录下。

脚本支持加入如下参数使用。例如:

./build/zeratul/build_camera_uImage.sh -j8 -f

使用8线程编译,并且强制写入.configs,使用默认配置编译内核。

-f 参数

默认使用arch/mips/configs 下相应的配置,强制替换写入.config。; 注意:会掉替换更改的内容

-j 参数

使用多线程编译默认使用-j1

五.rootfs编译

SDK中提供了5.4.0工具链编译好的根文件系统,根据实际需求选择相应版本;在实际的使用过程中,只要将相应版本的文件系统进行压缩就可以使用。

5.1 使用脚本生成根文件系统

在顶层目录下输入如下命令:

./build/zeratul/build_camera_rootfs.sh -f

脚本实际操作是对 rootfs/rootfs_camera 目录的内容进行操作后拷贝到 out/camera/,重新命名为 _rootfs_camera,然后将 _rootfs_camera 进行 jzlzma 压缩生成 rootfs_camera.cpio.jzlzma。rootfs_camera.cpio.jzlzma 就是实际烧录进 rootfs 分区的内容。

这里注意的是,如果我们单独使用build_camera_rootfs.sh脚本编译可能会丢失一些驱动,可以加上 -f 参数来拷贝必要的ko文件。

 脚本执行参数描述表

参数

说明

-o 参数

删除 out/camera/rootfs_camera.cpio.jzlzma,只对其目录下 _rootfs_camera 重新压缩。方便往 _rootfs_camera 添加其他内容

-f 参数

重新对驱动进行编译,并拷贝到_rootfs_camera后,再压缩。

六.recovery编译

注意:

recovery是分区名称,实际烧录的是一个完整OS系统,所以编译recovery的时候类似编译内核一样,详细介绍看系统分区设置一章。

如果需要更高的压缩率,可以选择LZMA压缩方式。但是需要注意LZMA工具版本,低版本会出现LZMA格式错误。

6.1 手动编译recovery

进入software/board/Ingenic-SDK/opensource/kernel-3.10.14 目录,输入以下命令列出选项,如下图:

ls arch/mips/configs/

例如使用nor flash。在PC终端的输入如下命令:

make PRJ007_zeratul_nor_camera_recovery_defconfig //T32
make PRJ008_zeratul_nor_camera_recovery_defconfig //T33
make PRJ009_zeratul_nor_camera_recovery_defconfig //T32Pro

然后输入如下命令,进行编译:

make uImage

生成的uImage文件即烧录到recovery分区文件。

七.脚本编译

在顶层目录输入如下命令使用脚本进行编译:

./build/zeratul/build_camera_recovery.sh

参数

说明

-r 参数

将software/board/Ingenic-SDK/opensource/kernel路径下的配置文件.config 备份一份,然后distclean。编译完成后再还原.config文件

-j 参数

使用多线程编译

“out/camera”下生成recovery.bin文件。

八.system编译

system 脚本执行编译默认会删除 out/camera 下的 system 文件夹,所以直接在其文件夹内添加其他内容是无效的。如果添加补充文件可以在 resource/rootfs/<工具链>/camera/system 目录下。

在顶层目录下执行脚本:

./build/zeratul/build_camera_system.sh

或者对添加其他内容后的out/camera/system文件夹,进行手动的压缩,然后重新烧录system分区来达到添加其他文件目的。具体命令为:

mksquashfs system system.bin -comp xz

九.IMP 库sample使用说明

SDK在路径software/board/Ingenic-SDK/media下,提供了供开发者使用的IMP库文件。

步骤一:确认sensor 输出分辨率、I2C地址,例如GC2063 1080P,I2C ADDR 0x37;

步骤二:打开sample-common.h,修改对应的sensor信息。其中以下信息必须填写;

FIRST_SNESOR_NAME
FIRST_I2C_ADDR
FIRST_SENSOR_WIDTH
FIRST_SENSOR_HEIGHT

步骤三:编译sample。生成对应可执行程序;

$ make sample-Encoder-video

步骤四:将可执行程序拷到板子上,后台执行代码;

$./sample-Encoder-video &

步骤五:执行debug 命令,并查看录像文件;

$ logcat
$ ls /tmp

Sample 文件

说明

sample-KernEnc.c

当内核打开内核编码后,该程序仅获取kernel启动阶段时的编码流。

sample-KernEnc-video.c

当内核打开内核编码后,该程序实现获取kernel启动阶段的编码流和应用层阶段编码出流以及JPEG抓图的基础功能。

sample-Snap-Kernel-raw.c

该程序实现获取kernel启动阶段的raw图功能

sample-Snap-Kernel-yuv.c

该程序实现获取kernel启动阶段的yuv图功能

sample-Joint-KernEnc-video.c

当内核打开内核编码后,该程序实现获取kernel启动阶段的拼接编码流和应用层阶段拼接编码出流

注意:

1. 上述sample详细说明,请参考software/board/Ingenic-SDK/media/zh/samples/libimp-samples/zeratul 下README。

2. 应用阶段,可使用其它常规sample。

3. sample运行请注意cmdline中的分辨率(init_vw/init_vh)和sample中的分辨率是否一致,不一致请修改sample或者使用tag_env_info修改cmdline中分辨率,工具使用方法请参考《Zeratul 平台TAG工具使用指南》。

4. 应用层启动之前,内核数据流情况如下:

1. 未开内核编码,ISP输出填充满ISP Buffer之后,ISP不会更新覆盖Buffer已有数据。

2. 开内核编码,编码Buffer填满之后,ISP不会更新覆盖ISP Buffer已有数据,编码Buffer数据也不会被覆盖。

十.ISP驱动及其它驱动编译替换

10.1 ISP驱动编译替换

ISP驱动路劲:software/board/Ingenic-SDK/opensource/drivers/isp/

Zeratul ISP驱动路劲:software/board/Ingenic-SDK/opensource/kernel-x.xx.xx/arch/mips/xburst/lib/isp

替换方式:

1. 从最新SDK的内核Zeratul ISP路劲下拷贝。

2. 拷贝更新ISP 驱动路劲内容,先使用Zeartul配置编译内核,进入ISP 驱动路劲执行 make,执行完成,会自动释放ISP驱动到Zeratul ISP驱动路劲。

10.2 其它驱动编译

Zeratul平台为了降低内核的启动时间和内核ISP的启动时间,采用把一些驱动编译成KO的外部加载方式。

编译方法:内核编译完成后,在当前内核路劲下,执行 make modules,则会生成相应的KO驱动。

注意:

1. 开发者根据实际需求,在配置文件中,选择把对应驱动编译到内核,还是单独的KO驱动。

2. 制作文件系统脚本 ./build/zeratul/build_camera_rootfs.sh 会在内核路劲下执行 make modules,并把KO文件放在 rootfs/lib/modules/下。

在文件系统的/usr/bin目录下,存在各个模块驱动加载的脚本,会在不同阶段被调用来加载对应的驱动。

如 /etc/init.d/rcS 中调用 /usr/bin/insmod_sfc 来加载 sfc 驱动。