记一次硬件调试经历

2023-05-16

产品信息

  1. 系统:SONiC系统(linux 4.9.110),ONIE(4.1.38)
  2. 项目背景:此项目是一个网络流量设备,作为流量转发器,将大批量的流量收集,筛选,过滤,重定向至新的端口,然后转发至后端设备,进行流量操作。
  3. 硬件:COM-E CPU主板,交换芯片,多种IIC设备(pca9548,pca9535等),NVME磁盘,USB转IIC总线芯片等;32个100G网口,2个USB口,一个串口,1个以太网口。

调试过程

第一阶段—检查硬件

  1. 检查电源是否正常,插上电源,判定能够设备是否上电,若未上电或者说出现上电延迟则返回硬件部处理
  2. 连接串口,进入系统后,判定串口是否有输出,且是否能够顺利进入BIOS界面。(串口助手推荐MobaXterm_Personal和SecureCRT)
    问题1:设备重启时,串口没有输出,但是等一段时间后再重启就有输出了
    原因:串口设备口前连有一个3.3V的放电设备,如果断电后立马重启,由于3.3V未放电完成,造成时序紊乱,从而造成串口没有输出
    解决方案:串口位于前面板,调试时,前面未加上32个100G网口,所以放电慢,添加100G网口后放电会迅速很多。

第二阶段—烧写ONIE

该阶段主要记录烧写ONIE设备
6. ONIE基本知识
ONIE官网
简言之就是类似玩儿linux内核时的BootLoader,不同之处在于ONIE也是一个微型的linux内核,ONIE的目的是为了发现SONiC安装地址,从而进行安装。
7. 烧写ONIE,准备好U盘,准备好烧写工具Win32DiskImager
----[a]网络上下载ONIE源码,公司有备份可以从备份中check一份代码,编译烧写至U盘
----[b]BIOS下选择冲U盘启动,然后进行烧写
问题二:烧写ONIE不成功,出现字样如下:Installing ONIE in /dev/sda …can‘t write data to /dev/sda等字样
原因:目前设备使用的是nvme驱动的磁盘(添加nvme驱动),命名方式是nvme0n1开头,所以找不到/dev/sda设备
解决方案:修改machine/xxx/xxx/installer.conf,文件中通过寻找/sys/block/*/device,判定设备设备pci地址是否为pci0000:00/0000:00:1f.2,从而返回设备名字,这里调试采用直接返回nvme0n1,从而让程序知道磁盘名字
这里注意:为了更好查看程序执行,在shell脚本中加上set -x,可以看到每一步程序执行从而更清晰的了解程序

—[c]再次编译烧写
问题三:谁写ONIE不成功,出现字样如下:ERROR: Problems accessing sys_eeprom在这里插入图片描述
原因:设备目前还出于探测不到IIC器件,也就是说根本没有eeprom设备,从而导致出错。
解决方案:找到代码installer/install.sh,将代码返回值改变,因为目前无法探测,所以暂时将代码返回值默认为正确的

—[d]再次编译烧写,烧写成功

第三阶段—检查设备驱动,IIC总线是否存在,网口设备是否存在

  1. 首先检查i2cbus是否能探测到-----i2cdetect -l发现并没有总线bus;然后dmesg检测内核信息打印是否有相关输出。
    问题四:无IIC总线,内核出错信息如下:在这里插入图片描述原因:这是驱动程序和ACPI操作区域(SystemIO,SystemMemory)之间有冲突,
    解决方案:这里暂时性的方法是:acpi_enforce_resources=lax启动选项处加上,解释:
    acpi_enforce_resources={strict|lax|no}
    检查驱动程序和ACPI操作区域(SystemIO,SystemMemory)之间资源冲突的方式。
    strict(默认值)禁止任何驱动程序访问已被ACPI声明为"受保护"的操作区域,这是最安全的方式,可以从根本上避免冲突。
    lax允许驱动程序访问已被ACPI声明的保护区域(但会显示一个警告)。这可能会造成冲突,但是可以兼容某些老旧且脑残的驱动程序(例如某些硬件监控驱动)。
    no表示根本不声明任何ACPI保护区域,也就是完全允许任意驱动程序访问ACPI操作区域。
  2. 启动后IIC总线出现了,一并出现的还有4个系统地址。至于为什么后面IIC地址没有出现,原因是硬件断开了,所以探测不到。
  3. 查找USB转IIC总线芯片是否就绪,通过lsusb发现usb设备
    在这里插入图片描述,再次通过i2cdetect -l查看芯片是否作用,是否转出iic总线
    问题五:USB芯片未转出IIC总线
    原因:没有安装mcp2221驱动,导致芯片未作用
    解决方案:在build文件夹下找到kernel下对应的内核版本4.1.38,在driver中添加mcp2221.c驱动文件,并在Makfile下添加obj-y=mcp2221.o将驱动编译进内核,buses/Kconfig添加mcp的注释选项,这个的目的是为在make menuconfig时有对应的选项显示(这种方法只适合调试,最后版本需要通过补丁的形式将文件打入内核中)
  4. 重新编译烧写内核后通过i2cdetect -l查看i2c总线在这里插入图片描述
  5. 检测网络状态,连上网线,ping 任意网址是否能ping通;fconfig是否有网卡信息

第三阶段—烧写SONiC系统

  1. 通过onie-nos-install http://文件服务器ip/文件进行系统烧写
    问题六:烧写SONiC系统失败,错误信息如下:
    在这里插入图片描述
    原因:SONiC系统未支持nvme磁盘的命令方式,导致磁盘名错误,找不到磁盘,无法烧写
    解决方法:在烧写SONIC系统时,ONIE就不再接管系统,开始读写SONIC的系统信息,因此代码这是应该从ONIE转向SONIC,搜索打印字样make2fs无果,搜索the operation…无果,搜索 Creating new…找到在installer/x86_64/install.sh下,发现create_demo_gpt_partition()通过sgdisk进行磁盘分区,这个函数执行完成后,返回调用出,发现下面的代码就是mkfs.ext4 -L $demo_volume_label $demo_dev 进行文件系统的制作。在shell下实验该命令发现果然错误参数会打印出make2fs…信息。在此加入对nvme磁盘的支持
    在这里插入图片描述
  2. 编译系统,重新烧写,成功。
  3. 进入系统,检测IIC总线
    问题七:有SMbus总线,没有IIC mc2221转的总线
    原因:SONiC系统未支持mcp2221驱动
    解决方案:SONiC下驱动有两种方式,一种是直接加在内核里面,第二种是加在自己设备下platform/xxxxx/modules/,为了兼容性采用第二种方案,修改其中的Makefile,同时将驱动加载的driver_load.sh脚本同过server的方式加载进内核
  4. 重新编译烧写,验证网卡是否就绪,ifconfig发现网卡就绪

总结

至此,设备硬件验证完毕,之后会持续更新该博客,更新关于IIC设备树结构方式,目前验证出连接到总线上的设备,第二层iic设备还没有探测出。

补充

  1. 关于ONIE补丁方式以及设备特殊化的处理
    之前调试驱动,都是直接将文件放入内核中,这种方式不利于内核的一致性,接下讲述关于patch的制作以及设备特殊化处理
    patch制作在这里插入图片描述
    patch文件放在serial同目录下
    设备特殊化处理
    onie中machine文件就是每个设备自己构建的系统驱动,内核配置的地址,在serials同目录下的conf文件就是内核配置的驱动选项位置,在其中加上
    在这里插入图片描述
    即可将10G网卡,NVME磁盘,MCP2221编译进内核
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次硬件调试经历 的相关文章

  • Eigen内存分配器aligned_allocator

    在使用Eigen的时候 xff0c 如果STL容器中的元素是Eigen数据库结构 xff0c 比如下面用vector容器存储Eigen Matrix4f类型或用map存储Eigen Vector4f数据类型时 xff1a vector lt
  • Ubuntu 升级cmake 版本

    PS 在编译一些包时需要更高的版本 xff0c 需要升级 cmake 千万别执行下面的命令 xff0c 这样会把之前用 cmake 编译好的包都给卸载掉 xff0c 包括ros sudo apt get autoremove cmake 比
  • 视觉slam十四讲(ch6) Ubuntu18.04安装 g2o库 报错error: FixedArray ... has no member named ‘fill’

    ps 再学习14讲第二版的时候 xff0c 运行g2o 报错 error FixedArray aka class ceres internal FixedArray lt double 6 gt has no member named f
  • 无人驾驶学习笔记-NDT 配准

    目录 1 NDT 的算法处理流程 2 NDT 公式推导 3 NDT 实例 3 1 常规NDT的位姿估计 3 2 front end node 1 ROS常规初始化 2 初始化操作 xff1a 读取传感器数据 获取lidar to imu变换
  • KD 树原理以及在三维激光点云中的应用

    目录 1 介绍 2 原理 2 1 数据结构 2 2 构建KD树 2 3 实例 3 程序示例 4 参考链接 1 介绍 kd tree简称k维树 xff0c 是一种空间划分的数据结构 常被用于高维空间中的搜索 xff0c 比如范围搜索和最近邻搜
  • slam 基础知识整理之- 最小二乘问题的引出与求解方法

    目录 1 最小二乘引出 2 线性最小二乘 及 求解方法 3 非线性最小二乘 编辑 3 1 求解思路 3 2 常用四种方法 3 3 四种方法总结 4 参考链接 在SLAM的过程中 xff0c 我们可以构建机器人状态过程 通过对其概率的计算 x
  • 无人驾驶学习笔记 - LOAM 算法论文核心关键点总结

    目录 1 框架 2 特征点提取 3 点云去畸变 4 帧间匹配 特征关联与损失函数计算 a 线特征 b 面特征 5 运动估计 6 建图 7 姿态融合 8 LOAM 优劣势 9 参考连接 1 框架 loam框架核心是两部分 xff0c 高频率的
  • 动态窗口法的理解和一些细节

    机器人局部路径规划 动态窗口法 动态窗口法 xff08 Dynamic Window Approach xff0c DWA xff09 是一类经典的机器人局部路径规划算法 它的过程主要分为两部分 xff1a 速度空间 v
  • 无人驾驶学习笔记 - A-LOAM 算法代码解析总结

    目录 1 概述 2 scanRegistration cpp 2 1 代码注释 2 1 1 主函数 2 1 2 removeClosedPointCloud xff08 雷达周边过近点移除 xff09 2 1 3 laserCloudHan
  • 无人驾驶学习笔记-LeGO-LOAM 算法源码学习总结

    目录 1 概述 2 lego loam的贡献 3 系统框图 4 ros graph中的节点关系表 5 lego loam 的文件系统架构 6 各部分方法原理及代码注释 6 1 点云投影与目标分割 1 总结概述 2 代码注释 2 1 copy
  • Boost 中 signal2 用法

    boost 函数与回调 xff08 三 xff09 signals2
  • 树莓派学习笔记

    文章目录 树莓派基础入门笔记无显示屏使用方式基础教程5 树莓派文件传输 配置编译环境使用U盘直接传输使用vnc传输文件FTP文件传输协议Python配置编译环境C C 43 43 配置编译环境Linux常用终端命令nano和vi编辑器的使用
  • 22.IO与显示器

    README 1 本文内容总结自 B站 操作系统 哈工大李治军老师 xff0c 内容非常棒 xff0c 墙裂推荐 xff1b 2 显示器是输入型外设 xff1b 3 本章主要内容是讲 显示器是如何被驱动的 xff1b 或操作系统是如何让用户
  • BGP协议基础配置—学习

    BGP重要概念 IGP是运行在AS内部的路由协议 xff0c 主要有RIP OSPF及IS IS xff0c 着重于发现和计算路由 EGP是运行在AS之间的路由协议 xff0c 通常是BGP xff0c 它是实现路由控制和选择最好的路由协议
  • STM32 Not a genuine ST Device! Abort connection 错误解决方案

    STM32 Not a genuine ST Device Abort connection 错误解决方案 网上解决方案晶振设置不匹配导致Connect setting to with Pre reset降低MAX Clock 我自己的解决
  • VMware的.vmdk文件只赠不减的处理方法

    VMware虚拟机的虚拟磁盘的大小会随着使用时间不断变大 xff0c 而且只赠不减 即使在虚拟系统中删除了磁盘中的文件 xff0c 虚拟磁盘的大小仍然不会变小 释放空闲磁盘的方法如下 xff1a VMWare Tools中的 Shrink功
  • 使用码云(Gitee)进行代码管理,以及VsCode关联Git

    一 安装git Git的下载 安装与配置 git 简明指南 二 注册码云 1 xff09 注册码云账号 xff1a 码云官网 2 xff09 绑定邮箱 xff1a 右上角 头像 设置 邮箱管理 三 本地项目与码云关联 1 本地项目上传至码云
  • 删掉带页眉的空白页结果把所有页眉都删掉解决办法

    点击视图 大纲 会发现在之前的操作中有两个分节符 xff0c 把上面那个删掉即可 参考链接https zhidao baidu com question 105591450 html 小问题也蛮耗时的
  • ROS之多个订阅数据同步

    做传感器数据融合时 xff0c 常常会需要用到多个数据 xff0c 即需要同时订阅多个话题 那么 xff0c 如何同步这些传感器数据的时间辍 xff0c 并将它们放入一个回调函数中进行处理呢 xff1f 参考文档 xff1a http wi

随机推荐

  • C++中使用strtok函数分割字符串String

    C 43 43 中使用strtok函数分割字符串String string str getline cin str vector lt string gt vec char p 61 strtok char str c str 34 34
  • 利用python获取IP资源池的方法

    在使用爬虫的时候 xff0c 经常会遇到IP被禁止的情况 xff0c 所以一般都需要一个资源池来提高降低风险 以下代码中 xff0c 基于python3 7 xff0c 数据库用的是POSTGRESQL11 xff0c 为了效率使用了队列
  • DNS笔记(一):yum方式安装DNS与简单设置

    思路 客户端主机 gt DNS服务端主机 gt 后台主机 DNS服务端主机防火墙 iptables I INPUT 4 m state state NEW p tcp dport 53 j ACCEPT iptables I INPUT 4
  • Linux基础知识之df和du的差异

    创建文件前统计 xff0c 可以看出磁盘总共50G xff0c 已使用13G root 64 payne du sh 2 gt dev null 13G root 64 payne df h Filesystem Size Used Ava
  • Linux网络异常排查手段

    网络不通常用工具 xff1a ping mtr nmap telnet curl 域名IP服务器解析工具 xff1a nslookup dig 1 ping 启动方式及解释 xff1a ping c3 www baidu com PING
  • Prometheus学习(一):单节点部署与配置+Grafana安装

    Prometheus学习 xff08 一 xff09 xff1a 单节点部署与配置 43 Grafana安装 一 配置前准备1 下载软件2 主机列表3 同步时间4 创建账户 二 安装与配置1 node exporter安装与配置2 Serv
  • ELK笔记(一):Centos7部署elasticsearch-7.8.0集群

    Centos7部署elasticsearch 7 8 0集群 1 部署前准备1 1 系统选择1 2 主机列表1 3 下载 解压缩安装包1 4 创建用户 2 修改配置文件2 1 elastic search配置文件2 2 OS配置文件 3 启
  • centos8安装ansible-awx:9.0.1

    为什么要这要贴出来呢 xff0c 因为这个鬼东西我真的不知道为什么能跑成功 xff0c 先是在centos7上安装 xff0c 结果重复多次后成功了 xff0c 然后重新装一遍 xff0c 又失败了 真的不知道怎么装了 xff0c 甚至连在
  • 使用helm创建elastic

    coding https gitee com pangfaheng devops coding tree master kubernets elastic git https github com elastic helm charts 1
  • jstatd监控jvm内存消耗

    env localhost MacOS11 6 remote server run a centos7 server in vmware use MacOS monitoring remote server remote server op
  • 深度强化学习笔记之PPO算法理解(1)

    深度强化学习笔记之PPO算法理解 xff08 1 xff09 笔记内容来源于李宏毅老师的深度强化学习的PPT 关于PPO xff08 Proximal Policy Optimization xff09 xff0c 李老师分为了三个部分进行
  • apt install 报无法修正错误

    E 无法修正错误 xff0c 因为您要求某些软件包保持现状 xff0c 就是它们破坏了软件包间的依赖关系 很可能是ubuntu更换软件源出了问题 问题在于软件源设置不对 xff0c 装好Linux后 xff0c 人们都会去修改 etc ap
  • ubantu系统服务器系统搭建详情及配置步骤(DELL poweredge r730服务器)

    实验室新到了一批显卡 xff0c 周末跟着几位师兄在机房混迹学着ubantu系统系统服务的部署 xff0c 配置 xff0c 搭建 xff0c 现记录于博客备忘 准备 xff1a ubantu镜像文件 ubuntu 16 04 3 serv
  • 树莓派升级(安装)Python3.6

    如果你的树莓派或者其他Linux主机上安装的Python版本比较低 xff0c 那么在安装Homeassisant等软件时 xff0c 会出现一些故障导致无法安装 xff0c 所以本文讲解如何在python版本比较低的树莓派上升级树莓派的版
  • 研究了几天CEF的感受

    cef搞到现在 xff0c 用已经勉强用上了 xff0c 性能也很好 xff0c 但是最大的问题是js在render进程里跑 xff0c 这一点和Electron是一样的 xff0c 也是chrome这类浏览器标准做法 xff0c 其实是不
  • Jenkins安装过程

    一 什么是自动化测试平台 前言 xff1a 在一些做嵌入式产品的公司里 xff0c 为了确保开发主线代码的稳定 xff0c 在做版本升级的时候要考虑到代码改动对主线功能造成的影响 xff0c 避免造成严重的版本问题 xff0c 需要在每次代
  • ldd nm strip strings readelf file查看信息

    ldd lt 可执行文件名 gt 查看可执行文件链接了哪些 系统动态链接库 nm lt 可执行文件名 gt 查看可执行文件里面有哪些符号 strip lt 可执行文件名 gt 去除符号表可以给可执行文件瘦身 strip后使用nm查看不到符号
  • linux console输出重定向到串口ttyS0

    在linux系统中使用virsh创建和管理虚拟机时 xff0c 除了使用ssh 连接虚拟机 xff0c 还可以使用 virsh console 虚机名 的方式连接虚拟机 xff0c 不过需要在虚机镜像中开启将console重定向到串口的设置
  • 最新综述 | 图数据上的对抗攻击与防御

    Lichao Sun and Yingtong Dou and Carl Yang and Ji Wang and Philip S Yu and Bo Li Adversarial Attack and Defense on Graph
  • 记一次硬件调试经历

    产品信息 系统 xff1a SONiC系统 xff08 linux 4 9 110 xff09 xff0c ONIE xff08 4 1 38 xff09 项目背景 xff1a 此项目是一个网络流量设备 xff0c 作为流量转发器 xff0