broadcom Knet 功能调试记录

                       broadcom  Knet 功能调试记录

broadcom部分交换芯片集成了CPU,CPU模块和交换模块通过DMA通道进行数据的通信,broadcom把该通道通过knet虚接口的方式提供CPU的网口功能,和sdk提供的rxtx模块功能有下面区别:

  rxtx功能只是一种发送和接收报文的处理方式,最终仍是调用驱动层面的发送和接收接口。Knet虚接口相当于底层驱动,把DMA通道封装成一个接口的形式,屏蔽上层应用感知底层DMA方式实现收发包。

 

Knet在应用上需要在make.local文件中定义FEATURE_LIST=KNET,把knet功能开关打开,KNET驱动的实现在sdk的kernel层,源码路径:\systems\linux\kernel\modules\bcm-knet\bcm-knet.c

对于BCM 534XX的greyhound系列芯片,在\systems\linux\user\iproc-3\下进行编译,编译结果会生成linux-kernel-bde.ko,linux-user-bde.ko, linux-uk-proxy.ko, linux-bcm-knet.ko这几个ko文件和bcm.user执行文件;

生成的几个ko文件和bcm.user文件加载到目标板中,在linux系统命令行下先对几个模块使用mknod添加相应的字符设备文件;然后进行insmod,处理如下:

 

mknod /dev/linux-kernel-bde c 125 0

mknod /dev/linux-user-bde c 125 0

mknod /dev/linux-uk-proxy. c 125 0

mknod /dev/linux-kernel-bde c 125 0

 

insmod linux-kernel-bde.ko

insmod linux-user-bde.ko

insmod linux-uk-proxy.ko

insmod linux-bcm-knet.ko use_rx_skb=”1” num_rx_prio=”2” mac_addr=”00:11:22:33:44:55”rx_buffer_size=”9238” rcpu_mode=”1” rcpu_dmac=”00:01:02:03:04:05” rcpu_smac=”00:00:33:44:55:66”rcpu_ethertype=”de08” rcpu_vlan=”4094”

 

安装好驱动模块后,运行应用程序,如bcm.user;

在bcm shell命令行界面下执行下面命令:

sc arprequersttocpu=1   //设置arp请求报文送cpu处理

sc arpreplytocpu=1      //设置arp应答报文送cpu处理

sc l3egressmode=1      //启用三层出接口管理

l3 intf add vlan=1 mac=00:11:22:33:44:55 intf=3  //三层出接口封装信息

l3 egrss add intf=3 copytocpu=true   //三层接口object信息创建

l3 l3table add ip 192.168.4.10 intf=$egr_object_id  //添加一条静态表项

knet netif create type=mete vlan=0 ifname=vintf0 rcpu=yes //创建knet虚接口

knet fileter create desttype=netif destid=1 prio=127 striptag=no //创建knet虚接口

 

使用bcm  提供的rx /tx应用验证收发包,使用pc连接网口进行ping验证收发包;

 

需要注意的是不同支持knet的芯片对应的cpu报文头格式可能是不相同的,移植代码时要注意;

### Knet框架概述 Knet是一个由Julia语言开发的深度学习库,旨在提供简洁而高效的接口用于构建和训练神经网络模型[^1]。该框架支持自动微分机制来简化梯度计算过程,并且能够充分利用GPU加速运算以提高效率。 #### 主要特点: - **简单易用**:通过高级抽象层减少编写代码的工作量; - **性能优越**:利用底层优化技术实现快速执行速度; - **灵活性高**:允许用户自定义操作并集成其他C/C++库; #### 安装与环境配置 为了使用Knet进行项目开发,在Ai Studio或者Colab平台上可以按照如下方式准备运行环境: 1. 确认已安装最新版本的Julia解释器; 2. 添加官方包管理仓库并将`Knet.jl`加入到本地环境中; 3. 对于希望启用CUDA支持的情况,则需额外下载NVIDIA驱动程序及相关工具链; ```julia using Pkg Pkg.add("Knet") ``` #### 构建简单的卷积神经网络(CNN) 下面给出一段基于MNIST手写数字识别任务的小型CNN实例演示: ```julia using Knet, MNIST function cnn(x; f=relu) Conv((5,5), 1=>16, pad=(2,2), stride=(1,1))(x) |> batchnorm |> f .| MaxPool((2,2))() |> Conv((5,5), 16=>32, pad=(2,2), stride=(1,1))() |> batchnorm |> f .| MaxPool((2,2))() |> Dense(32*7*7 => 10)(flatten(_)) end model = @knet function (x,y) pred = softmax(cnn(x)) loss = crossentropy(pred, y) accuracy = mean(argmax.(pred,dims=1).==y') return loss,accuracy,pred end; ``` 上述代码片段展示了如何定义一个具有两层卷积结构加全连接分类头的基础架构,并设置了损失函数以及评估指标。 #### 数据预处理与加载 对于特定应用场景下的数据集创建流程,请参照相关指南完成图像裁剪、增强变换等工作。通常情况下可借助第三方Python脚本辅助生成符合要求的数据文件夹布局形式供后续读取调用。 ```julia data = map(i->(float32(MNIST.image(i)'), onehot(MNIST.label(i)', 0:9)), rand(1:60_000, nbatch)) dtrain, dtest = splitobs(shuffleobs(data); at=0.8); ``` 这里是从内置测试集中随机抽取样本作为输入张量传入模型前必要的转换步骤之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值