发布包中提供了驱动源码包{soc version}-driver-{software version}-minios.aarch64-src.tar.gz,用户可自行根据需要进行驱动的定制或配置文件的修改。若用户对驱动源码包中的任何文件进行了定制修改,定制完成后,都需要参考本章节进行源码编译;若未对驱动源码包中的文件进行任何修改,则此章节可跳过。
源码编译依赖于HCC编译器,HCC编译器存在于toolkit安装包的toolchain目录下。
su - root
例如在/usr/local/software/目录下执行如下解压命令:
tar -zxvf {soc version}-driver-{software version}-minios.aarch64-src.tar.gz
若已执行过此操作,此步骤可跳过。
Device操作系统内核模块默认开启了签名功能,若用户自定义驱动源码,需要关闭内核模块的签名功能,操作步骤如下:
cd /usr/local/software/driver/source/kernel/linux-5.10
make ARCH=arm64 CROSS_COMPILE=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu- eulerosv2r9_defconfig
make ARCH=arm64 CROSS_COMPILE=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu- menuconfig
说明:请根据实际操作系统版本选择依赖的安装命令,如果执行命令时提示缺少其他依赖,请根据提示自行安装。
按空格键关闭内核模块校验选项,[ ]里面存在“*”表示打开,[ ]空白表示关闭,关闭后示例如下所示:
请注意,需要保持默认文件名“.config”,然后选择“Ok”。
make ARCH=arm64 CROSS_COMPILE=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu- Image
${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。
在弹出的回显信息中默认输入“y”,命令执行完成后,会在“kernel/linux-5.10/arch/arm64/boot”目录下生成内核镜像文件“Image”。
提升编译内核镜像效率的方法如下:
内核镜像编译支持-j[N]参数指定编译CPU核数,N表示使用N个CPU并发编译,不指定则使用1个cpu编译内核。N参数应根据实际编译环境CPU个数配置(可执行“cat /proc/cpuinfo | grep processor | wc -l”命令查看),比如编译环境有32个CPU,则可以使用20个CPU编译,命令示例如下所示:
make ARCH=arm64 CROSS_COMPILE=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu- Image -j20
python3.7 /usr/local/software/driver/source/vendor/hisi/tools/signtool/image_pack/esbc_header.py -raw_img Image -out_img header-Ascend310P.image -version 1.1.1.1.1 -nvcnt 0 -tag uimage -platform hi1910p
digest=`sha256sum header-Ascend310P.image | awk '{print $1}'`
echo "uimage, ${digest};" > ./uimage.ini
python3 /usr/local/software/driver/source/vendor/hisi/tools/signtool/image_pack/image_pack.py -raw_img header-Ascend310P.image -out_img Ascend310P.image -D -platform hi1910p -cms ./uimage.ini.p7s -ini ./uimage.ini -crl ./uimage.ini.crl --addcms -version 1.1.1.1.1 --pss
命令执行完成后,会在“kernel/linux-5.10/arch/arm64/boot”目录下生成增加签名头后的文件系统镜像文件Ascend310P.image。
替换前请先备份 /usr/local/Ascend/driver/device/目录下的Ascend310P.image文件到其他目录,防止内核镜像编译出错。
cd /usr/local/software/driver/source/kernel/linux-5.10
make mrproper
make driver_device product=mini CROSS_COMPILE=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu- KERNEL_DIR=/usr/local/software/driver/source/kernel/linux-5.10 KERNEL_DEFCONFIG=/usr/local/software/driver/source/kernel/linux-5.10/arch/arm64/configs/eulerosv2r9_defconfig build_device=true PRODUCT_SIDE=device
命令执行成功后,会在source目录的out/device/文件夹下生成如下表所示的内核对象文件。
内核对象 |
描述 |
---|---|
ascend_event_sched.ko |
事件调度,提供TS、DVPP等事件与AI CPU间的调度。 |
ascend_queue.ko |
提供统一的队列管理功能,实现进程间数据传递免拷贝,从而提升进程间通信效率。 |
drv_base.ko |
DVPP系统基础模块,提供内存管理等功能。 |
drv_chnl.ko |
任务调度器模块,为VENC模块的驱动源。 |
drv_devdrv.ko |
设备驱动模块,涉及驱动与TS模块交互,驱动将上层下发下来的计算任务传递给TS模块,由TS模块进行调度计算。 |
drv_devmm.ko |
内存管理模块,设备侧的内存申请释放等功能的实现。 |
drv_devmng.ko |
设备管理模块,提供获取设备信息、设置设备配置等管理类功能。 |
drv_dfm.ko |
提供黑匣子异常注册功能,上报接口给其他内核调用。 |
drv_fpdc.ko |
故障预处理分发控制模块,用于故障管理中RAS告警接收及分发 |
drv_h264e.ko |
H.264协议处理模块,是对图像按照H.264协议进行编码处理的模块。 |
drv_h265e.ko |
H.265协议处理模块,是对图像按照H.265协议进行编码处理的模块。 |
drv_icm.ko |
通信模块,实现IPC核间通信的协议层,将消息协议和硬件解耦。 |
drv_jpegd.ko |
图片解码模块,提供jpeg图像解码功能。 |
drv_jpege.ko |
图片编码模块,提供图像编码功能。 |
drv_log.ko |
日志模块,提供日志采集功能,将日志传到host侧。 |
drv_memory.ko |
提供片上内存信息查询及故障上报功能。 |
drv_osal.ko |
DVPP系统基础模块,操作系统抽象层。 |
drv_pcie_hdc.ko |
提供统一、高效的Host与Device通信功能。对外提供类似Socket的接口,如Send/Recv/Close等,内部利用DMA,实现快速的内存搬移。 |
drv_pcie.ko |
提供PCIe通讯功能,设备PCIe初始化,执行镜像搬移流程,提供PCIe消息功能和DMA功能给其他模块使用。 |
drv_pcie_vnic.ko |
提供虚拟网口功能,用户可通过标准ssh流程访问设备。 |
drv_pkicms.ko |
签名校验模块,提供SOC(Security Operations Center )签名校验等功能。 |
drv_platform.ko |
平台模块。 |
drv_pm.ko |
低功耗模块,提供睡眠唤醒功能。 |
drv_prof.ko |
数据采集模块,提供数据采集通道。 |
drv_pwm.ko |
为脉冲宽度调制(Pulse Width Modulation)模块提供驱动程序。 |
drv_rc.ko |
码率控制模块,实现对编码码率进行控制。 |
drv_soc_misc.ko |
提供片上信息查询及故障上报功能。 |
drv_soft_fault.ko |
提供软件故障及用户态故障上报功能。 |
drv_spi.ko |
master控制器驱动,控制spi master。 |
drv_spi_slave.ko |
为SPI模块提供驱动程序。 |
drv_sys.ko |
DVPP系统基础模块,提供DVPP系统初始化功能。 |
drv_ts.ko |
Task Schedule与AI CPU交互事件的mailbox通道和datadump通道。 |
drv_upgrade.ko |
升级模块,提供升级内核态功能。 |
drv_user_cfg.ko |
用于进行flash用户配置区管理,主要flash对用户配置区进行读取、配置、清除操作。 |
drv_vdec.ko |
视频解码模块,提供解码器的通道管理,参数设置,码流接收等功能。 |
drv_vedu.ko |
硬件配置模块,主要任务为根据软件配置进行逻辑处理。 |
drv_venc.ko |
编码通道模块,为编码模块与外部的交互模块。 |
drv_vfmw.ko |
视频解码模块,提供解码器的码流切割,语法解析,配置硬件解码等功能。 |
drv_vpc.ko |
图像预处理模块,提供图像处理Core初始化、寄存器配置等功能。 |
hsm_firmware_update.ko |
固件安全升级模块,提供固件安全升级等功能。 |
hsm_flash.ko |
提供Flash读取能力。 |
hsm_heartbeat.ko |
HSM子系统状态查询模块,提供HSM状态查询、PG信息查询等功能。 |
hsm_ras.ko |
负责处理TEE SFC模块的RAS故障,收到故障后会将故障上报给故障管理模块。 |
ipc_drv.ko |
IPC通信模块,IPC消息发送接收等。 |
kbox_init.ko |
抓取内核异常信息日志的模块,依赖kbox.ko。 |
kbox.ko |
为kbox提供日志接口,并管理已存储的日志。 |
mntn_bbox.ko |
提供黑匣子相关功能。 |
retr.ko |
特征检索驱动,实现在千亿级规模的目标库中,秒级检索特征相似度高的目标。 |
trs_tsmng.ko |
管理Device侧Control CPU与Task Schedule之间的IPC通信。 |
tzdriver.ko |
提供teeos与normal world的交互功能。 |
vpc.ko |
图像预处理模块,提供图像处理Core调度、队列管理等功能。 |
说明:
以上内核对象的源码都在driver/source/目录下。在driver/source/目录下通过grep -r xx.ko命令,通过对应的module.mk文件,找到源码所在的文件夹,示例如下:
则drv_pcie.ko对应的源码文件夹为drivers/ai_sdk/arc/linux/kernel_space/src/drv_pcie_device/pcie_slave。
拷贝编译生成的*.ko到解压后的文件系统的var目录下。
cd /usr/local/software/driver/source/out/device
cp -rf *.ko /usr/local/filesys_modify/tempdir/var/
若进行源码编译时,一直循环提示类似如下信息:
请检查当前系统时间是否早于source/kernel/linux-5.10/scripts下的文件创建时间,若是,则请更改当前系统时间,然后重新进行编译操作。