searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

组件集成SONiC版本编译介绍

2024-06-24 09:35:40
4
0

SONiC的编译架构如下:

 

结合编译架构,更易理解

此处以集成libcare组件为例,以sonic-buildimage为根目录

一、通过SONiC编译生成deb

src目录下创建sonic-libcare/libcare目录,创建编译deb包的debian目录,用于存放控制文件和脚本等,其中包含以下5个文件:

changelog文件(用于记录deb包的变更日志):

compat文件(一般为910):

其中核心文件有controlruleslibcare.install

control文件(用于描述软件包的基本信息和依赖关系等):

rules文件

其中的make -C src,其作用到libcare源码的src目录进行编译,生成相应的二进制文件;

由于这里的软件包是基于源代码的,所以我们在debian目录中创建个名为 rules 的文件,并使用dh make工具来帮助你自动生成构建脚本。

libcare.install文件

左侧libcare源码中的对应文件;右侧为安装deb包后文件将会被安装到系统的对应位置

 

然后在此目录下创建编译文件Makefile

src/sonic-libcare/libcare/Makefile:

从这个Makefile中的命令可以看出其基本流程:通过拉取源代码,并将debian目录拷贝至源代码目录中,并通过dpkg-buildpackage命令生成对应的deb包。

此时,在rules目录下创建libcare.mk文件,定义一些关于libcaredeb名以及deb版本等信息

注意,最后需要加上export LIBCARE,否则在slave.mk中无法识别LIBCARE变量,会导致编译出错。

此时,需要在slave.mk文件的对应位置上添加LIBCARE变量,如下图所示:

最初确定要在bullseye目录下生成的deb包,因此,需要到sonic-slave-bullseye/Dockerfile.j2中添加编译libcare组件需要依赖的工具(若已存在,则无需重复添加),此处,需要安装的工具如下:

综上操作,通过SONiC编译,就可以在target/debs/bullseye下生成libcare对应的deb包。

二、deb包安装到hostdocker

host宿主机下安装libcaredeb包,需要在files/build_templates/sonic_debian_extension.j2中添加相关命令,如下图:

在各个docker容器中安装libcaredeb包,只需要在rules/docker-base-bullseye.mkdocker-base-buster.mk文件的$(DOCKER_BASE_BULLSEYE)_DEPENDS后添加LIBCARE变量即可,此处的LIBCARE变量即是libcare.mk中定义的LIBCARE。如下图所示:

0条评论
0 / 1000
h****n
3文章数
0粉丝数
h****n
3 文章 | 0 粉丝