• [技术干货] RAM 与 ROM
    RAM(Random Access Memory,随机存取存储器)和ROM(Read-Only Memory,只读存储器)是计算机系统中两种不同类型的存储器,它们各自具有特定的功能和用途。以下是关于RAM和ROM的详细解释以及它们之间的主要区别:RAM(随机存取存储器)定义:RAM是一种易失性存储器,即当计算机断电时,存储在RAM中的数据会丢失。RAM的主要用途是存储正在运行的程序或进程所需的数据和指令,这样处理器(CPU)可以快速访问它们。特点:易失性:当电源关闭时,RAM中的数据会丢失。随机访问:RAM允许处理器在任何位置读取或写入数据,而不必按顺序访问。速度快:RAM通常比硬盘或固态驱动器(SSD)等存储设备的访问速度快得多。容量:RAM的容量(通常以GB为单位)可以影响系统的性能,因为更大的RAM容量可以存储更多的数据和指令,从而减少从较慢的存储设备中读取数据的需要。ROM(只读存储器)定义:ROM是一种非易失性存储器,即数据在ROM中存储时是永久的,即使电源关闭也不会丢失。ROM通常用于存储操作系统、引导加载程序或其他在启动过程中需要的指令和数据。特点:非易失性:ROM中的数据在电源关闭时不会丢失。只读:ROM中的数据只能被读取,而不能被修改或删除(尽管某些类型的ROM,如EEPROM和Flash ROM,可以通过特定的编程技术进行修改)。用途:ROM通常用于存储固件,这些固件是计算机硬件的基本操作软件,如BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)。速度:虽然ROM的访问速度通常不如RAM快,但它比硬盘或SSD等存储设备要快得多。RAM和ROM的主要区别数据持久性:RAM是易失性的,而ROM是非易失性的。可写性:RAM是可读写的,而ROM(尽管有些是可编程的)通常被认为是只读的。用途:RAM用于存储运行中的程序和数据,而ROM用于存储永久性的数据和指令,如启动程序或固件。访问速度:RAM的访问速度通常比ROM快。容量:RAM的容量可以根据需要进行扩展(例如,通过添加更多的内存条),而ROM的容量通常是固定的。成本:RAM的成本通常比ROM低,因为RAM是大量生产的,并且它的技术相对简单。
  • [问题求助] 小熊派iot开发板uart
    我想问下小熊派iot的开发板出口通信的电平标准是多少伏
  • [交流吐槽] 深圳弘毅云佳科技有限公司 经销批发的无线数传模块
    深圳弘毅云佳科技有限公司 经销批发的无线数传模块、项目开发、蓝牙4.0/4.2/5.0模块、LOAR模块.WIFI 模组. ZIGBEE组网模组、 串口模块、语音模块、通讯模块畅销消费者市场,在消费者当中享有较高的地位,公司与多家公司建立了长期稳定的合作关系。深圳弘毅云佳科技有限公司经销的无线数传模块、项目开发、串口模块、语音模块、通讯模块 LOAR模块  蓝牙模块品种齐全、价格合理。深圳弘毅云佳科技有限公司实力雄厚,重信用、守合同、保证产品质量,以多品种经营特色和薄利多销的原则,赢得了广大客户的信任。  
  • [问题求助] 使用Postman调测通过,使用Python却报IOTDA.000001
    我在使用上层应用控制下层ESP32,需要用到平台下发命令,我是用Postman调测通过,但是使用Python时却报了{"error_code":"IOTDA.000001","error_msg":"Internal server error."}以下是我的代码import requests url = "XXXX" payload = { "service_id" : "SmokeDetectorControl", "command_name" : "ON_OFF", "paras" : { "value" : "1" } } headers = { 'x-auth-token': 'XXXXXX' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)与API explorer示例代码基本一致,希望哪位朋友能帮我看一下,不胜感激
  • AP供电降档
    关于供电标准: 目前主流的AP供电方式多采用POE供电方式,省去了铺设电源线,也便于维护,AP数量较多时会使用POE交换机供电,AP数量较少时可以在普通的交换机和AP之间增加一个POE供电模块。POE供电系统包括供电设备(PSE)和受电设备(PD),如网口或者光口需要进行协商一样,供电设备和受电设备之间也需要协商POE供电协议,不同厂商可能会使用不同的供电和受电标准,也就是说大家各自支持的输出和输入功率存在差异,这样就可能出现供不上电或供电电流过大等问题导致设备不能正常上电使用。IEEE委员会因此推出了三套POE供电标准:802.3af、802.3at、802.3bt。如果厂商的设备符合这些国际标准,那么一旦双方协商到了某个标准之下,就可以使用对应标准的功率进行供电。协商方式分为硬件协商或LLDP协议协商,硬件协商时通常PSE会通过PD回应的分级确认电流协商出一个输出的功率,LLDP协商时会通过协议交互报文专门的Power via MDI TLV字段协商出一个输出功率。如果使用POE模块供电,LLDP协议可以透传模块,实际上还是交换机与AP在进行协商。那是不是只要符合POE国标了,供电协商就一定没有问题了呢?当然不是,因为不同AP对供电的标准要求不同,而交换机支持的供电输出能力也各有差异,当供电功率无法稳定达到相应级别,就会出现供电降档甚至供电不足的情况,现象就是出现AP功能受限,或者无法发射信号、反复重启、无法上线等问题。AP供电降档常见的影响:其中有线侧不可用的部分一般都是额外拓展接口,例如部分AP支持对接物联网功能,如果供电降档则物联网插卡就无法正常使用;有额外可以用来连接终端的电口也会无法UP;光电复用的电口只能使用其中一个,无法使用电口供电光口传输数据;像USB或者可以对外额外输出供电的POE OUT接口也会因为供电输出功率不够而不能使用。无线侧部分通常是降低了性能,例如支持的空间流数减少,无线发射功率降低等,个别也可能导致业务功能有影响。如何查询华为设备供电规格指标:具体的AP支持的功率标准可以在Info-Finder规格查询网站上确认:cid:link_0选择对应的AP型号,点击硬件中心,选择AP查看规格详情,规格表最下面可以看到供电相关说明信息AP供电异常需要关注硬件和软件两个方面,多种因素都可能导致出现供电不足或供电降档,供电降档在业务不受影响的情况下可以正常使用,如果想最大化实现AP功能或性能则需要保证供电正常,请从POE供电设备和AP两端分别排查。相关信息参考资料:cid:link_1
  • [openEuler] openeuler系统outbox外部驱动使能指导
    Outbox外部驱动使能指导  1    QLogic qla2xxx 1.    驱动下载链接:https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP3/contrib/drivers/source/Packages/qla2xxx-10.02.06.04_k-1_OpenEuler.zip 2.    环境信息 openeuler-20.03lts-sp33.    解压驱动包  4.    cd /qla2xxx-10.02.06.02-k ./extras/build.sh  install        仅做测试使用,重启不生效 ./extras/build.sh  initrd        重启生效  5.    查看新驱动 modinfo qla2xxx qla2xxx 第二种 1.    驱动下载地址:https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP3/contrib/drivers/source/Packages/qla2xxx-10.02.06.04_k-1_OpenEuler.zip 或     https://driverdownloads.qlogic.com/QLogicDriverDownloads_UI/Files/TempDownlods/99261/qla2xxx-10.02.06.04_k-1_OpenEuler.zip 2.    环境信息 openeuler-20.03lts-sp33.    安装新驱动   rpm –ivh qla2xxx-10.02.06.04_k-1dkms.noarch.rpm  tmp/dkms.xxxx/下面是新驱动,把原来的ko文件备份 modinfo qla2xxx.ko |grep dep  insmod qla2xxx.ko  4.查看新驱动 modinfo qla2xxx |more  2    Intel     igb/i40e/ixgbe/ixgbevf/ice 1.    驱动下载地址:https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP1/contrib/drivers/x86_64/Packages/igb-5.5.2-1.x86_64.rpm 2.    环境信息 openeuler-20.03lts-sp13.    安装新驱动 rpm –ivh igb-5.5.2-1.x86_64.rpm  find / -name “igb.ko”  把新的igb.ko文件替换掉内核自带的igb.ko文件,updates这个目录下是新驱动的文件,把原来的ko文件备份  rmmod        igb insmod        igb.ko modprobe        igb      4.    查看新驱动  igb 第二种情况 1.    驱动下载地址 https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP3/contrib/drivers/source/Packages/igb-5.11.4.tar.gz  2.    环境信息 openeuler-20.03lts-sp3 3.    安装新驱动 解压缩软件包 tar –xvf igb-5.11.4.tar.gz cd igb-5.11.4/src make install 4.    查看新驱动 Modinfo igb |more                3    Avago megaraid_sas 1.    驱动下载地址:https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP1/contrib/drivers/x86_64/Packages/RAID-3004iMR_3108_3408iMR_3416iMR_3508_3516-openEuler20.03-megaraid_sas-07.714.04.00-1-x86_64.rpm  2.    环境信息 openeuler-20.03lts-sp1     3.    安装新驱动 rpm -ivh RAID-3004iMR_3108_3408iMR_3416iMR_3508_3516-openEuler20.03-megaraid_sas-07.714.04.00-1-x86_64.rpm 4.    查看新驱动 modinfo megaraid_sas megaraid_sas(官网) 1.    驱动下载地址:https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/MR_LINUX_DRIVER_7.21-07.721.02.00-1.tgz 2.    环境信息 openeuler-20.03lts-sp13.    安装驱动     解压驱动包     tar –xvf MR_LINUX_DRIVER_7.21-07.721.02.00-1.tgz     tar –xvf megaraid_sas_components.tgz     cd openEuler     cd rpms-1     rpm –ivh kmod-megaraid_sas-07.721.02.00_oe20.03-1.aarch64.rpm 4.    查看新驱动  Megaraid_sas 官网下载地址:https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/MR_LINUX_DRIVER_7.22-07.722.02.00-2.tgz 1.环境信息:  openeuler-20.03lts-sp13.解压缩安装包 解压源码包  cd megaraid_sas-07.722.02.00 ./compile.sh        会在当前目录生成一个megaraid_sas.ko文件 find  / -name “megaraid_sas.ko”  备份/kernel 路径下的ko文件 把上面生成的Ko文件放到kernel/drivers/scsi/megaraid/路径下 reboot 4.查看新驱动 modinfo megaraid_sas 4    Huawei hifc/hinic 1.    驱动下载地址:https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS/contrib/drivers/aarch64/Packages/FC-IN300-openEuler20.03-hifc-3.7.0.8-aarch64.rpm 2.    环境信息  openeuler-20.03-lts3.    安装驱动  rpm -ivh xxxx4.    查看驱动信息 modprobe hifc  5    Mellanox mlx5_core 1.     驱动下载地址: https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ MLNX_OFED_LINUX-5.6-2.0.9.0-openeuler20.03sp1-x86_64.tgz 2.    环境信息  openeuler-20.03lts-sp13.    安装新驱动      解压OFED驱动包  ./mlnxofedinstall    --add-kernel-support 安装报错缺少依赖包    yum install 即可  4.    查看新驱动     modinf mlx5_core  Mellanox ofed community 驱动 1.     驱动下载地址:  https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/drivers/source/Packages/MLNX_OFED_SRC-5.7-1.0.2.0.tgz https://www.mellanox.com/downloads/ofed/ MLNX_OFED-5.7-1.0.2.0/ MLNX_OFED_SRC- 5.7-1.0.2.0.tgz 2.    环境信息 openeuler-22.03-lts3.安装驱动     解压安装包     tar –xvf MLNX_OFED_SRC-5.7-1.0.2.0.tgz     cd MLNX_OFED_SRC-5.7-1.0.2.0     yum install python     ./install.pl      选择2          选择1     报错缺少依赖,安装所需要的依赖,重复上面的步骤./install.pl     yum install cmake …… 4.查看新驱动       6    Broadcom lpfc 1.     驱动下载地址: https://docs.broadcom.com/docs-and-downloads/oem/support/elx/rt14.0.1/14.0.326.19/elx-lpfc-dd-openEuler20-14.0.326.19-ds-1.tar.gz 2.    环境信息   openeuler-20.03lts-sp13.    安装新驱动 解压安装包 cd elx-lpfc-dd-openEuler20-14.0.326.19-ds-1 ./elx_lpfc_install.sh  4.    查看新驱动 lpfc 第二种 1.     驱动下载地址: https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP1/contrib/drivers/source/Packages/elx-lpfc-dd-openEuler20-12.8.614.14-ds-1.tar.gz     或     https://docs.broadcom.com/docs-and-downloads/oem/support/elx/rt12.8.13/12.8.614.20/elx-lpfc-dd-openEuler20-12.8.614.14-ds-1.tar.gz 2.    环境信息  openeuler-20.03lts-sp13.    安装新驱动 解压安装包  cd elx-lpfc-dd-openEuler20-12.8.614.14-ds ./elx_lpfc_install.sh  find  / -name  “lpfc.ko”  extra/elx-lpfc/lpfc.ko是新驱动,把新驱动复制到kernel/drivers/scsi/lpfc/下面,把原来的lpfc.ko备份 modprobe  lpfc  4.    查看新驱动 modinfo lpfc|more  
  • [交流分享] DFA典型案例
    1. 简化产品设计、减少零件数量在DFA的所有设计指南中,第1个设计指南“简化产品设计、减少零件数量”排在首位,对产品成本、质量等有着决定性的影响。如果要降低产品成本,通过DFA第1设计指南是最好的办法;当然,也是最难的办法。“简化产品设计、减少零件数量”包含但不限于以下手段:#1 考查每个零件,考虑去除每个零件的可能性:#2 把相邻的零件合并成一个零件. #3 把相似的零件合并成一个零件:#4 把对称的零件合并成一个零件:#5 合理选用零件制造工艺、设计多功能的零件#6 减少紧固件的数量和类型#7 减少线缆的种类和数量胶带封箱器 DFA优化案例如下图所示,原始设计的胶带封箱器零部件众多,结构复杂,组装工序复杂。在满足相同的功能及性能前提下,通过DFA优化之后,改进的设计减少了22个零件,减少了27个组装工序,组装时间节省了75%。下图是改进设计的爆炸图,及工作状态图。零件数量对比组装工序对比组装时间对比组装时间由4分钟到1分钟                                                                                                                                                                                                        出自公zhong号将本设计.
  • [openEuler] openEuler 安装 Nvidia 驱动
    Nvidia cuda及驱动安装方式下载驱动wget cid:link_1安装驱动编译解压相关依赖包dnf install -y tar禁用nouveau驱动rmmod nouveauecho ‘blacklist nouveau’ >> /etc/modprobe.d/blacklist.conf安装驱动bash cuda_11.7.1_515.65.01_linux.run 执行 nvidia-smi命令,如果能看到设备信息,表示驱动安装成功。Nvidia 纯驱动安装方式下载驱动wget cid:link_0安装驱动编译解压相关依赖包dnf install -y tar禁用nouveau驱动rmmod nouveauecho ‘blacklist nouveau’ >> /etc/modprobe.d/blacklist.conf安装驱动bash NVIDIA-Linux-x86_64-515.65.01.run出现选择时都选“yes"​​​​​​​​​​​​​​执行 nvidia-smi命令,如果能看到设备信息,表示驱动安装成功。Agenda执行nvidia-smi报错No devices found执行lspci | grep -i nvidia,确认机器中是否有GPU卡,如果没有,需要插上GPU卡才能使用。
  • oec-hardware 工具使用问题解答
    目录1     Content 22     Support 22.1      安装... 22.2      acpi 32.3      cpufreq. 42.4      disk. 62.5      ethernet/infiniband. 72.6      fc. 82.7      raid. 82.8      kdump. 92.9      memory. 102.10    system... 112.11    usb. 132.12    cdrom... 132.13    watchdog. 142.14    gpu/vgpu. 152.15    板卡四元组信息获取... 152.16    测试依赖安装说明... 161 Contentoec-hardware工具是openEuler社区提供的一款硬件兼容性测试工具,oec-hardware提供服务器整机、板卡与openEuler的兼容性验证测试,验证仅限于基本功能验证,不包括性能测试等其它测试。本词条提供 oec-hardware 工具在工具安装或者测试过程中可能遇到的问题解答。2 Support2.1 安装2.1.1 oec-hardware 工具安装oec-hardware 工具已发布到openEuler 官方的 everything 和 update repo源,请使用 dnf 安装软件包。dnf install oec-hardware安装完成后执行oech命令进行测试。详细使用指导请看:cid:link_32.1.2 oec-hardware 工具服务端安装oec-hardware 工具已发布到openEuler 官方的 everything 和 update repo源,请配置相关repo源,然后通过以下步骤进行安装:(1)使用  dnf  获取软件包进行安装。dnf install oec-hardware-server(2)服务端 web 展示页面需要的部分组件系统本身不提供,需要使用  pip3  安装(请自行配置可用 pip 源)。pip3 install Flask Flask-bootstrap uwsgi(3)启动服务。本服务默认使用 8080 端口,同时搭配 nginx(默认端口 80)提供 web 服务,请保证这些端口未被占用。systemctl start oech-server.servicesystemctl start nginx.service(4) 关闭防火墙和 SElinux。systemctl stop firewalldiptables -Fsetenforce 0详细使用指导请看:cid:link_32.1.3 oec-hardware 工具服务端启动失败oech-server依赖的部分软件包需要通过pip3安装,如果执行systemctl start oech-server 启动服务失败,请确认相关服务依赖的安装,请执行以下命令进行安装:pip3 install Flask Flask-bootstrap uwsgi2.1.4 oec-hardware 工具上传测试结果至服务端失败如果oec-hardware工具在测试完成后上传测试结果至服务端失败,出现upload failed的报错,请按照以下步骤进行排查:1. 确认服务端和客户端可以ping通;2. 检查服务端的防火墙和selinux是否正确关闭,请执行以下命令关闭:systemctl stop firewalldiptables -Fsetenforce 03. 检查初始配置信息是否配置正确,初始化时配置的三个参数不能为空,如果配置异常,请执行oech –clean清除配置信息,重新进行配置。2.2 acpi2.2.1 oec-hardware 工具测试acpi 失败,无法找到acpi表acpi是“Advanced Configuration and Power Interface”的缩写,中文意思是“高级配置与电源管理接口”,因此acpi测试是OS与服务器之间硬件信息交互的测试。oec-hardware 测试acpi时如果出现以下报错,无法找到acpi表:Cannot open directory - /sys/firmware/acpi/tables这个报错说明服务器不支持acpi电源管理,请确认服务器的管理方式。以下是一般服务器提供的acpi表:2.3 cpufreq2.3.1 oec-hardware 工具测试cpufreq时无法找到CPU frequency相关文件系统安装完成后,如果 /sys/devices/system/cpu/cpu0-95 目录下缺少cpufreq目录文件,导致用例读取文件中的值失败,用户可以通过以下步骤使系统显示对应目录:1. 修改bios相关配置,将bios中的power policy 值设置为Efficiency 、DEMT值设置为Disabled。2. 查看CONFIG_CPU_FREQ_GOV_COMMON=Y 是否为可设置grep FREQ /boot/config-4.19.90-2016.3.0.0096.oe1.x86_64 |grep GOV |grep -v “is not set”3. bios 下查看Powe Polily Select值是否为performance,bios->advanced->Power Polily Select4. cat scaling_available_governors,如果只有两种模式,需要检测驱动5. 使用modinfo 查询加载的驱动类型cpufreq涉及到的驱动类型有两种:intel_pstate、acpi_cpufreq。如果是intel_pstate,需要按照下面的步骤,在grub中增加intel_pstate=disable1)vi /etc/default/grub 在GRUB_CMDLINE_LINUX 所在行最后添加intel_pstate=disable参数。2)执行grub2-mkconfig -o /boot/efi/EFI/openeuler/grub.cfg (legacy模式下执行grub2-mkconfig -o /boot/grub2/grub.cfg)。3)cat /proc/cmdline 再检查下修改的cmd,然后重启生效。4)cpupower frequency-info 可以查看目前支持5种模式。如果执行以上步骤后,仍然没有cpufreq的相关目录和文件,请升级BIOS固件版本。相关issue链接:cid:link_52.4 disk2.4.1 oec-hardware 工具测试disk信息配置oec-hardware 工具的disk 测试项需要用户在配置文件 test_config.yaml 中指定相关测试信息,工具执行测试时会自动读取该文件获取相关信息,默认值为all(all表示测试除系统盘以外的所有硬盘)。vi /usr/share/oech/lib/config/test_config.yaml2.5 ethernet/infiniband2.5.1 oec-hardware 工具测试网卡信息配置oec-hardware 工具的 ethernet/inifiband测试项需要用户在配置文件 test_config.yaml 中指定相关测试信息,工具执行测试时会自动读取该文件获取相关信息。vi /usr/share/oech/lib/config/test_config.yaml2.5.2 oec-hardware 工具测试网卡时无法ping通服务端直连网卡使用oec-hardware工具测试网卡时,需要关闭服务端的防火墙、selinux等配置,保证测试端和服务端直连网卡互相可以ping通。 详细使用指导请看:cid:link_32.5.3 oec-hardware 工具测试网卡的rdma模式如果环境中有一张ib卡,当前ib卡使用的是普通网卡模式,可以使用oec-hardware工具的 ethernet 测试项,指定测试rdma 模式,在该模式下会对这张板卡进行ib模式的读写等测试。如果环境中的ib卡使用的infiniband 模式,可以使用oec-hardware工具的 infiniband 测试项对这张卡进行测试。2.6 fc2.6.1 oec-hardware 工具测试FC卡信息配置oec-hardware 工具的fc卡测试项需要用户在配置文件 test_config.yaml 中指定相关测试信息,工具执行测试时会自动读取该文件获取相关信息,默认值为all。vi /usr/share/oech/lib/config/test_config.yaml2.7 raid2.7.1 oec-hardware 工具测试raid卡信息配置oec-hardware 工具的raid卡测试项需要用户在配置文件 test_config.yaml 中指定相关测试信息,工具执行测试时会自动读取该文件获取相关信息,默认值为all。vi /usr/share/oech/lib/config/test_config.yaml2.8 kdump2.8.1 oec-hardware工具执行测试kdump测试套失败oec-hardware工具执行kdump 测试失败,首先尝试手动执行以下命令触发kdump:echo c > /proc/sysrq-trigger如果系统无法正常切换到第二内核,重启失败并且服务器控制台上出现以下CPU报错:造成该问题的原因是服务器的BIOS固件版本较低,用户可以通过升级BIOS固件版本解决该问题。2.8.2 oec-hardware 工具测试kdump时无法切换内核如果遇到oec-hardware工具执行测试kdump测试套失败,手动重启系统,查看是否能出现切换内核的界面。如果没有出现切换内核的界面,可以通过dnf update进行更新,更新后重启确认是否能出现切换内核界面,如果出现该界面,可以重新测试kdump。2.8.3 oec-hardware 工具测试kdump测试时无法读取vmcore文件vmcore文件是由kexec-tools提供的,如果相关文件不存在,请安装软件包kexec-tools。2.9 memory2.9.1 oec-hardware 工具测试memory 出现Error eatmem_test failed, please check the space of SWAPoec-hardware 工具测试memory时如果出现以下报错信息: Error eatmem_test failed, please check the space of SWAP这个是因为swap空间不足导致的报错,需要检查当前系统可用的SWAP分区大小,保证可用大小在4G以上。执行以下步骤动态调整swap分区:创建一个磁盘分区sda1fdisk /dev/sda执行mkswap /dev/sda1格式化分区执行swapon /dev/sda1挂载swap分区free -h查看当前swap可用空间2.9.2 oec-hardware 工具测试memory hotplug失败内存热插拔测试时,如果内存被cpu占用,会出现无限刷屏,oec-hardware 工具暂时未解决这种场景下内存的分析处理,因此在1.1.0版本起工具中暂时取消内存热插拔测试,待修复完成后,工具会重新集成测试。如果执行测试出现memory hotplug失败或以下刷屏现象,请挂载openEuler 官方的 everything 和 update repo源,安装最新版本的工具。2.10 System2.10.1 oec-hardware 工具测试system报错OS版本不支持如果oec-hardware执行system测试项失败,日志中出现类似以下的OS版本不支持的报错:Error: openEuler 22.03 LTS is not supported.请查看oec-hardware 工具 支持的OS版本:cid:link_2如果工具明确支持测试的OS版本,但是执行测试出现报错,说明安装的工具版本太低,请配置openEuler官方everything和update repo源后,通过dnf install oec-hardware安装最新版本的工具软件包。工具最新版本请查看:cid:link_6如果工具版本没有说明支持的OS版本,请在工具仓库下提issue反馈或者发邮件至openEuler社区兼容性SIG组邮箱进行确认:oecompatibility@openeuler.org。2.10.2 oec-hardware 工具测试system报错内核被修改oec-hardware 工具会检查内核的完整性,如果内核被重编或者升级, oec-hardware执行system测试项会失败,日志中会出现类似以下内核被修改的报错:[ERROR] Files in kernel-5.10.0-60.18.0.50.oe2203.aarch64 were modified.详细被修改文件请执行以下命令查看:rpm -V --nomtime --nomode --nocontexts kernel如果确认需要修改内核来支持适配整机/硬件,请将相关patch提交至openEuler社区的kernel中,等内核合入patch后重新进行验证。2.10.3 oec-hardware 工具测试system报错SElinux is not enforcingoec-hardware 工具会检查SElinux的状态,如果日志中出现以下报错,说明系统默认的selinux模式是disabled,所以测试时无法临时打开selinux:[ERROR] SElinux is not enforcing, expect is enforcing.修改/etc/selinux/config中配置项SELINUX的值变更SELinux模式,使用enforcing或permissive模式。修改完成后重启系统,使之生效。然后执行oech重新测试system,selinux可以测试通过。详细的selinux配置方式请参考openEuler各个版本中的安全加固指南,以openEuler 22.03LTS为例,可以参考以下文档:cid:link_02.11 usb2.11.1 oec-hardware 工具测试usboec-hardware进行usb测试时,需要人工进行辅助测试,在出现以下提示时插入usb设备,设备类型不限。插入设备后在控制台输入”y”继续测试,在出现以下提示时拔出usb设备。拔出设备后在控制台输入”y”继续测试。2.12 cdrom2.12.1 oec-hardware 工具测试cdromoec-hardware进行cdrom测试时,需要人工进行辅助测试,在出现以下提示时插入cdrom设备 插入设备后在控制台输入”y”继续测试。注意:cdrom测试时会对CD/DVD进行读写测试,会破坏里面的数据,所以测试时要确认设备里的数据已进行备份。2.13 watchdog2.13.1 oec-hardware 工具执行测试watchdog失败oec-hardware工具如果执行watchdog用例失败,请先执行下面两条命令,然后再进行测试:rmmod sbsa_gwdtmodprobe sbsa_gwdt action=1相关issue链接:cid:link_42.13.2 oec-hardware 工具执行测试获取watchdog时间报错oec-hardware工具执行watchdog用例失败,如果出现以下报错,表示获取watchdog时间失败:请执行下面两条命令:cd /usr/share/oech/lib/tests/watchdog./watchdog -s 20如果手动测试通过,请重新测试watchdog。2.14 gpu/vgpu2.14.1 oec-hardware 工具无法显示gpu/vgpu测试项 oec-hardware 工具提供了gpu/vgpu 测试能力,在使用工具测试前,用户需要手动安装gpu/vgpu驱动,配置好硬件环境后再执行 oech 命令,工具会识别并显示 gpu/vgpu 测试项。2.14.2 oec-hardware 工具测试vgpu失败 oec-hardware 工具集成了nvidia vgpu测试能力,nvidia 的gpu和vgpu使用的是不同的驱动,因此如果要测试vgpu,需要单独安装vgpu驱动,配置好环境,并在/root目录下放置nvidia 客户端(虚拟机)可使用的vgpu驱动。2.15 板卡四元组信息获取用户可以通过以下三种方式查看板卡四元组信息:通过iBMC查看使用 lspci -nvv 查看使用 lspci -xs 查看以网卡的四元组信息查询为例:执行ethtool -i 网卡名,查看网卡的bus-info;执行lspci -xs 网卡的bus-info,查看四元组信息;vendorID: 19e5deviceID: a222svID: 19e5ssID: 04cc2.16 测试依赖安装说明oec-hardware 工具存在软件包安装依赖和编译依赖,并且每个测试项会有不同的测试依赖。如果测试环境无法连接外网,可以通过挂载本地repo源或提前下载相关软件包、工具上传至测试环境中,再进行测试。以下文档中提供了oec-hardware 工具的相关依赖软件包列表:cid:link_1
  • [容器专区] 【AR502产品】【串口功能】无法获取回复数据
    【功能模块】AR502H-CN  容器串口通信【操作步骤&问题现象】1、串口问题,在AR502H-CN上运行串口程序,AR502H-CN通过485串口发送数据至传感器,然后立刻设置高电平进行接收,此时无法接收到数据2、测试情况,将AR502H-CN、PC、 传感器通过485接口相连。  1)AR502H-CN通过485串口发送数据至传感器,然后立刻设置高电平进行接收,此时AR502H-CN无法接收传感器回复的数据;PC可以接收到AR502H-CN发送的数据,和传感器回复的数据。 2)将AR502H-CN设置为长接收模式,PC发送数据至传感器,PC可以接收到传感器回复的数据。同时 AR502H-CN可以接收到PC发送的数据和传感器回复的数据。 3)将AR502H-CN、传感器通过485接口相连。R502H-CN通过485串口发送数据至传感器,然后立刻设置高电平进行接收,此时AR502H-CN无法接收传感器回复的数据【截图信息】测试情况1)容器:PC:测试情况2)容器:PC:【日志信息】(可选,上传日志内容或者附件)【代码】int main(int argc, char *argv[]){int fd = 0;int iDataLen = 0;int ret;int i = 0;int crlfd = 0;char ctrlvalue = 0;int sleeptime = 1000000;unsigned char recvBuf[MAX_LOG_LEN] = {0};unsigned char *pUartWrite = NULL;int fs_sel;fd_set fs_read;struct timeval time;struct termios uart_termios;char *pFilePath = argv[1]; /* 设备节点 */char *pOp = argv[2]; /* 操作 *//* 当前AR502H、AR502H-CN支持2路RS485接口:/dev/ttyRS1、/dev/ttyRS2 */if (strncmp(pFilePath, "/dev/ttyRS", strlen("/dev/ttyRS")) != 0) {printf("not support file[%s] \r\n", pFilePath);return -1;}if (strcmp(pFilePath, "/dev/ttyRS1") != 0 && strcmp(pFilePath, "/dev/ttyRS2") != 0) {printf("not support file[%s] \r\n", pFilePath);return -1;}/* 打开文件 */fd = open(pFilePath, O_RDWR | O_NOCTTY | O_NONBLOCK);if (fd < 0) {printf("open file[%s] fail \r\n", pFilePath);return -1;}/* 设置为阻塞模式 */ret = fcntl(fd, F_SETFL, 0);if (ret != 0) {printf("fcntl FNDELAY %s fail, ret = %d\n", pFilePath, ret);close(fd);return -1;}/* 测试是否为终端设备 */ret = isatty(STDIN_FILENO);if (ret == 0) {printf("standard input is not a terminal device\n");close(fd);return -1;}if (strcmp(pOp, "setattr") == 0 && argc == 8) { /* 设置串口属性 */int speed = atoi(argv[3]);int flow_ctrl = atoi(argv[4]);int databits = atoi(argv[5]);int stopbits = atoi(argv[6]);int parity = atoi(argv[7]);ret = UART_Set(fd, speed, flow_ctrl, databits, stopbits, parity);if (ret != 0) {printf("set attribute for file %s fail \r\n", pFilePath);close(fd);return -1;}} else if (strcmp(pOp, "write") == 0) {unsigned char data[] = {0x88, 0x03, 0x00, 0x00, 0x00, 0x02, 0xDB, 0x52};pUartWrite = data;// pUartWrite = argv[3]; /* 待发送的字符串 */sleeptime = atoi(argv[4]); /* 延时时间,等数据发送完成 */ctrlvalue = 0; /* 低电平表示发送状态 */if (strcmp(pFilePath, "/dev/ttyRS1") == 0) {/* 切换到发送状态 */crlfd = open("/dev/rs485Ctrl1", O_RDWR | O_NOCTTY | O_NONBLOCK);if (crlfd < 0) {printf("open file /dev/rs485Ctrl1 fail \r\n");close(fd);return -1;}iDataLen = write(crlfd, &ctrlvalue, sizeof(ctrlvalue));if (iDataLen < 0) {printf("write file /dev/rs485Ctrl1 fail \r\n");close(crlfd);close(fd);return -1;}} else if (strcmp(pFilePath, "/dev/ttyRS2") == 0) {/* 切换到发送状态 */crlfd = open("/dev/rs485Ctrl2", O_RDWR | O_NOCTTY | O_NONBLOCK);if (crlfd < 0) {printf("open file /dev/rs485Ctrl2 fail \r\n");close(fd);return -1;}iDataLen = write(crlfd, &ctrlvalue, sizeof(ctrlvalue));if (iDataLen < 0) {printf("write file /dev/rs485Ctrl2 fail \r\n");close(crlfd);close(fd);return -1;}}/* 发送报文 *///iDataLen = write(fd, pUartWrite, strlen(pUartWrite)); iDataLen = write(fd, pUartWrite, 8);if (iDataLen < 0) {printf("write file[%s] fail \r\n", pFilePath);close(crlfd);close(fd);return -1;}else{printf("send data:");for (i = 0; i < 8; i++) {printf("%02x ", pUartWrite[i]);}printf("\r\n"); }/* 等待sleeptime,等数据发送完成 */usleep(sleeptime);/* 将串口恢复为默认的接收状态 */ctrlvalue = 1; /* 高电平表示接收状态 */printf("begin to high.\n");iDataLen = write(crlfd, &ctrlvalue, sizeof(ctrlvalue));if (iDataLen < 0) {printf("write file rs485Ctrl fail \r\n");close(crlfd);close(fd);return -1;} else {printf("write file rs485Ctrl success %d \r\n", ctrlvalue);}printf("begin to read.\r\n");iDataLen = read(fd, recvBuf, MAX_LOG_LEN);  // 此处/* 以hex的格式打印数据 */for (i = 0; i < iDataLen; i++) {printf("%02x ", recvBuf[i]);}printf("\r\n");close(crlfd);} else if (strcmp(pOp, "read") == 0) {if (strcmp(pFilePath, "/dev/ttyRS1") == 0) {crlfd = open("/dev/rs485Ctrl1", O_RDWR | O_NOCTTY | O_NONBLOCK);if (crlfd < 0) {printf("open file /dev/rs485Ctrl1 fail \r\n");close(fd);return -1;}ctrlvalue = 1; /* 高电平表示接收状态 */iDataLen = write(crlfd, &ctrlvalue, sizeof(ctrlvalue));if (iDataLen < 0) {printf("write file /dev/rs485Ctrl1 fail \r\n");close(crlfd);close(fd);return -1;}} else if (strcmp(pFilePath, "/dev/ttyRS2") == 0) {crlfd = open("/dev/rs485Ctrl2", O_RDWR | O_NOCTTY | O_NONBLOCK);if (crlfd < 0) {printf("open file /dev/rs485Ctrl2 fail \r\n");close(fd);return -1;}ctrlvalue = 1; /* 高电平表示接收状态 */iDataLen = write(crlfd, &ctrlvalue, sizeof(ctrlvalue));if (iDataLen < 0) {printf("write file /dev/rs485Ctrl2 fail \r\n");close(crlfd);close(fd);return -1;}}while (1) {FD_ZERO(&fs_read);FD_SET(fd, &fs_read);time.tv_sec = 2;time.tv_usec = 0;/* 使用select实现串口的多路通信 */fs_sel = select(fd + 1, &fs_read, NULL, NULL, &time);if (fs_sel == 0) {continue;}iDataLen = read(fd, recvBuf, MAX_LOG_LEN);/* 以char的格式打印数据 */for (i = 0; i < iDataLen; i++) {// printf("%c", recvBuf[i]);printf("%02x", recvBuf[i]);}printf("\r\n");/* 延时1s,再读 */sleep(1);}close(crlfd);} else {printf("not support operation[%s]\r\n", pOp);}/* 关闭文件 */close(fd);return 0;}
  • [技术干货] 开发板编程技巧
    开发板的编程技巧数组 array1.什么是数组数组特性:(1)一个数组中的数据类型必须是相同的(2)数组的大小是固定的,在运行的过程中绝对不可以改变数组的大小。(3)数组的内存的占用是连续的例子:数组的声明和初始化向量 Vector和数组不同,向量的大小可以改变。和数组相同的是,向量的数据类型必须相同。向量实际相当于动态数组.需要在库管理器中添加使用。向量的声明和初始化第一种情况 不知道元素的内容vector ledpins;第二种情况知道元素内容<> + {}vector durations = {100,200,300};枚举5枚举是一种存放常量的容器。专业一些,他本质上其实就是一个默认整数类型。 通俗一些,他就是一个命名工具而已声明enum class LedCmd {On, Off, Flash}enum声明默认使用整数类型,占用2个字节改成 unsigned char 或者 byte,只占用1个字节结构体 + 向量结构体 (1)是一种容器,可以存放不同类型的数据 (2)声明 内存优化之bitfield 位域用bitfield来大幅度降低变量的内存占用。 Bitfield仅可用于结构体和类内的变量,并且使用后,代价是对这些变量的指针操作将会失效。仿真: cid:link_0联合体+结构体+位域 综合运用联合体和结构体非常的相似,不同之处在于成员的内存占用。联合体是内存共享机制,结构体是内存独享机制。 仿真:cid:link_1类、创建自己的库类(Class)是 面向对象程序设计 (OOP,Object-Oriented Programming)实现信息封装的基础,类的实质是一种引用数据类型,类似于byte。创建自己的库ARDUINO的库就像是一个巨大的图书馆,而第三方提供的源代码和案例文件就相当于图书馆里的书。 当我们想使用一个传感器时,可以到ARDUINO库里找到下载对应的源代码。指针指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。指针变量p本身也是一个变量,也需要占据存储空间(32位系统下占4个字节),同样也有地址。ptr 为指针受量ptr 指向的是整数变量ptr变量的内容是 空地址仿真:cid:link_2
  • [交流吐槽] 第一篇
    1.小熊派功能介绍2.原理解读图(1)按键电路原理图(2)LED灯电路原理图(3)NFC电路原理图(4)E53接口原理图3.E53接口介绍4.E53接口使用
  • [技术探讨] 第二天笔记
    # BearPi-HM Nano开发板介绍 ### 1.简介:BearPi-HM Nano开发板是一块专门为鸿蒙OS设计HarmonyOS的开发板,板载高度集成的2.4GHz WLAN SoC芯片Hi3861,并板载NFC电路及标准的E53接口。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658062453872932234.png) E53接口的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为5×3cm类型的案例扩展板。 ### 2.按键按钮  开发板带有二个功能按键,和一个系统Reset按键。功能按键可以提供给开发者做功能定义开发,都是使用GPIO口,方向为输入,低电平有效。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658064443462955372.png) ### 3.收获 (1)了解了BearPi-HM Nano开发板功能。 (2)熟悉了BearPi-HM Nano开发板原理图。 (3)了解E53接口功能以及使用方法。 ### 4.接着借助官网软件进行环境的配置
  • [交流吐槽] 第一章节
    ## 环境搭建 1. https://gitee.com/bearpi/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/docs/quick-start/BearPi-HM_Nano%E5%8D%81%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B.md 2. 如出现部分命令无法使用,尝试更换镜像源 https://blog.csdn.net/weixin_45444666/article/details/120337347?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164493210816780357234854%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164493210816780357234854&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-120337347.pc_search_insert_ulrmf&utm_term=ubuntu18.04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E6%BA%90&spm=1018.2226.3001.4187 ## Bearpi HM nano介绍 1. 开发板功能介绍 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658053212205156868.png) 2. E5扩展板接口原理图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658053376646920624.png) 3. E53接口电路原理图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658053555069538968.png) 4. 各引脚的功能 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658053574584322551.png)
  • [问题求助] 求小熊派4G cat.1的开发板的资料
    哪位大佬有这开发板的资料,从咸鱼买来的。包括源码这些,想试试直接开发移远这芯片
总条数:1185 到第
上滑加载中