【启明智显技术分享】SSD202核心板Rootfs下如何烧录mac地址

提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸科技的新产品、新方案的主要特点及应用!希望你能第一时间了解并快速用上好的方案和产品!
在这里插入图片描述

SSD202核心板Rootfs下如何烧录mac地址:

一、uboot下默认mac地址

uboot下面默认mac地址的设定 MAC Address 00:30:1B:BA:02:DB boot\drivers\mstar\emac\mdrv_emac.c 中默认值 u8 MY_MAC[6] = { 0x00, 0x30, 0x1B, 0xBA, 0x02, 0xDB };

SSD202 Rootfs下烧录mac地址:

注意:本文主要介绍,在系统启动后通过SD卡或U盘的方式,批量烧录mac地址。

概述:上电进入系统后,自启SD卡中的脚本,通过脚本文件往boot下的环境变量写mac地址。每次写完往后加1。就可以实现批量烧录mac地址了。

只要在不重新烧录uboot的情况下,更新固件,mac地址是不会被覆盖的。

一、开机自动执行SD卡中的脚本
我们可以在/customer/demo.sh中添加相应的自启脚本。系统启动后就自动执行burn_mac.sh进行烧写mac地址。
在这里插入图片描述
二、mac烧写脚本

脚本工作原理
脚本执行后,读取/sdcard/mac_current中的mac的起始地址,通过/etc/fw_setenv向uboot中的环境变量,写入mac地址,并将写入的地址记录在/sdcard/mac_record.txt中。每次烧写完成后,向后加1,在烧写一下块核心板时,从新的mac地址开始。并且在烧录mac地址前,校验当前设备是否已经烧录过地址了(具体可自定义判断规则),防止重复烧录。

烧写脚本
烧写脚本如下:
!](https://img-blog.csdnimg.cn/direct/7604185b952941c0a3a57e0aefdf4931.png)

#!/bin/sh
MAC_CURNNET=/sdcard/mac_current
MAC_RECORD=/sdcard/mac_record.txtburn_ok() {echo 14 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio14/directionfor i in 1 2 3 doecho 1 > /sys/class/gpio/gpio14/valuesleep 0.5echo 0 > /sys/class/gpio/gpio14/valuesleep 0.5doneecho "------------------> burn_ok"
}burn_fail() {echo 14 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio14/directionecho 1 > /sys/class/gpio/gpio14/valuesleep 5echo 0 > /sys/class/gpio/gpio14/valueecho "------------------> burn fail"
}have_burn() {echo 14 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio14/directionfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20doecho 1 > /sys/class/gpio/gpio14/valuesleep 2echo 0 > /sys/class/gpio/gpio14/valuesleep 2doneecho "------------------> have burn"
}burn_mac() {#mount /dev/mmcblk0p1 /sdcard -o iocharset=utf8	if [ ! -f $MAC_CURNNET ]; thenbufn_failumount /sdcardexit 0fi#mac_current=88:A9:A7:00:77:40#mac_current=`echo 88:A9:A7:00:FF:FF | sed 's/:/ /g'`mac_current=`cat $MAC_CURNNET | sed 's/:/ /g'`if [ "${mac_current}" == "" ]; thenburn_failexit 1fiecho "mac_current=$mac_current"#burnmac_current_burn=`cat $MAC_CURNNET`//这里烧录到08:FC:52:AC:F9:00截止if [ "${mac_current_burn}" == "08:FC:52:AC:F9:00" ]; then# this card only burn 500 pcsburn_failexit 1fi/etc/fw_setenv ethaddr ${mac_current_burn}#recordecho "$mac_current_burn" >> $MAC_RECORDBYTE1=16#`echo $mac_current | awk '{print $1}'`BYTE2=16#`echo $mac_current | awk '{print $2}'`BYTE3=16#`echo $mac_current | awk '{print $3}'`BYTE4=16#`echo $mac_current | awk '{print $4}'`BYTE5=16#`echo $mac_current | awk '{print $5}'`BYTE6=16#`echo $mac_current | awk '{print $6}'`VALUE=0x00let "VALUE=(BYTE1<<40)+(BYTE2<<32)+(BYTE3<<24)+(BYTE4<<16)+(BYTE5<<8)+(BYTE6<<0)"let "VALUE=VALUE+1"NEW_BYTE1=16#0x00NEW_BYTE2=16#0x00NEW_BYTE3=16#0x00NEW_BYTE4=16#0x00NEW_BYTE5=16#0x00NEW_BYTE6=16#0x00let "NEW_BYTE1=(VALUE>>40)&0xFF"let "NEW_BYTE2=(VALUE>>32)&0xFF"let "NEW_BYTE3=(VALUE>>24)&0xFF"let "NEW_BYTE4=(VALUE>>16)&0xFF"let "NEW_BYTE5=(VALUE>>8)&0xFF"let "NEW_BYTE6=(VALUE>>0)&0xFF"mac_new=`printf "%0.2X:%0.2X:%0.2X:%0.2X:%0.2X:%0.2X" $NEW_BYTE1 $NEW_BYTE2 $NEW_BYTE3 $NEW_BYTE4 $NEW_BYTE5 $NEW_BYTE6`echo "mac_new=$mac_new"echo -n "$mac_new" > $MAC_CURNNET#/etc/fw_setenv bootcmd 'dcache on; gpio out 45 0; gpio out 11 0; gpio out 38 1; ext4load mmc 0:2 0x22000000 /boot/uImage; gpio out 38 0; bootm 0x22000000; reset'sync#umount /sdcardsyncburn_ok
}mac_dev=`/etc/fw_printenv | grep ethaddr`
if [ "${mac_dev}" == "" -o "${mac_dev}" == "ethaddr=00:30:1b:ba:02:db" ]; thenburn_mac
elseecho "this device has been burn mac, skip..."have_burn
fi

将mac_record.txt、mac_current、burn_mac.sh拷贝到SD卡中。
mac_record.txt:新建一个空的txt,用于记录烧写的mac地址。
mac_current:存放起始地址文件,例如mac_current里写入88:A9:A7:00:77:40,则会从88:A9:A7:00:77:40开始写入mac地址。

上电后就自动读取SD卡中的脚本,进行烧录MAC地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421356.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大型无人机行业应用

大型无人机行业应用&#xff0c;你了解多少&#xff1f; 今天就来给大家揭秘一下这个神秘又酷炫的领域&#xff01; 大型无人机&#xff0c;听起来就很高大上吧&#xff1f;它们不仅能在空中自由翱翔&#xff0c;还能在各行各业发挥巨大作用哦&#xff01; 在农业领域&#x…

【C++历练之路】哈希思想的应用——位图、布隆过滤器

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们使用hash思想学习了哈希表&#xff0c;进行了模拟实现unordered_set与unordered_map。这些都是用hash思想实现出来的数据结构&#xff0c;今天我们来学习一下hash的应用——位图、布隆过滤器。 目…

在线业务的常见全栈故障种类与定位手段

在线系统的稳定性和可靠性是企业数字化转型成功的关键。然而&#xff0c;由于云环境和系统演进的复杂性&#xff0c;故障的发生几乎不可避免。本系列文章将对在线系统可能遇到的全栈故障进行分类&#xff0c;并结合网上的案例分析&#xff0c;对比常规分析诊断手段与Originx推理…

JETBRAINS IDES 分享一个2099通用试用码!WebStorm 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

【网络】网络基础

目录 一、前言 1.计算机网络背景 2.认识协议 二、网络协议初识 1.OSI七层模型 2.TCP/IP五层(或四层)模型 3.网络传输基本流程 4.数据包封装和分用 5.网络中的地址管理 1.IP地址 2.MAC地址 一、前言 1.计算机网络背景 网络之前&#xff0c;我们所有在电脑上的操作都是…

IPD推行成功的核心要素(四)IPD究竟分几期做更合适?

集成产品开发 IPD体系&#xff08;Integrated Product Developm e nt&#xff09;是产品创新型企业关于产品开发&#xff08;从概念到产品开发、发布直至退市的全过程&#xff09;的一种理念与方法。IPD体系强调以市场需求作为产品开发的驱动力&#xff0c;将产品开发作为一项投…

笔记-跨域方式实现原理

websocket Websocket是HTML5的一个持久化的协议&#xff0c;它实现了浏览器与服务器的全双工通信&#xff0c;同时也是跨域的一种解决方案。WebSocket和HTTP都是应用层协议&#xff0c;都基于 TCP 协议。但是 WebSocket 是一种双向通信协议&#xff0c;在建立连接之后&#xff…

ICLR 2024落幕,一文了解ICLR + 历年(2017-2024) 论文整理(含源码!)

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-5-13 引言 最近这几天&#xff0c;相信大家都或多或少的刷到了ICLR 2024这个关键词。对于刚刚入门的小伙伴或对此并没有深入的理解&#xff0c;只知…

ae如何导出mp4格式?图文教程,手把手教您搞定

在创作精彩的视频内容后&#xff0c;将其成功导出为通用的MP4格式是确保作品在不同平台上流畅播放的重要一环。Adobe After Effects作为一款专业的视频后期制作工具&#xff0c;提供了丰富的功能来实现这一目标。在本文中&#xff0c;我们将通过图文教程&#xff0c;手把手地向…

云相册APP

简介 一款用于云存照片的app&#xff0c;支持批量上传和下载照片。 平台技术 Android客户端&#xff1a;Kotlin 协程 Retrofit Server服务后端&#xff1a;Java SpringBoot 部署云服务器&#xff1a;华为云耀云服务器L实例 下载网址 小鲸鱼相册 Ps: 由于网站域名备案审核…

零成本实现网站HTTPS访问的全面指南

在当今的互联网环境中&#xff0c;HTTPS已经成为网站安全的标配&#xff0c;它不仅能够保护用户数据免受监听和篡改&#xff0c;还能提升网站在搜索引擎中的排名。幸运的是&#xff0c;即使预算有限&#xff0c;通过一些免费的资源和服务&#xff0c;你同样可以为你的网站启用H…

css伪元素实现三角形箭头和空心箭头

使用css实现三角形箭头和空心箭头&#xff0c; 常用的使用场景&#xff1a;展开收起&#xff0c;下拉菜单 1.向下实心三角形&#xff1a; html <span class"arrow"></span>css .arrow {position: relative;}.arrow:after {position: absolute;top: 5…

Redis之主从复制详解

主从复制 概念 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点&#xff08;master&#xff09;&#xff0c;后者称之为从节点&#xff08;slave&#xff09;&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到…

【word技巧】word文档打开之后,有些地方不能编辑,什么原因?

有些朋友打开word文档之后发现&#xff0c;文档内容中有些地方是无法编辑的&#xff0c;这是什么原因导致的&#xff1f;今天我们一起来学习一下&#xff01; 原因&#xff1a; Word文档部分内容无法编辑的原因是因为word设置了限制编辑&#xff0c;有些朋友是否会有疑问&…

图文详解:synchronized关键字 及其底层原理

目录 一.线程安全问题 二.synchronized关键字 ▐ synchronized图解 ▐ 可重入锁及图解 ▐ synchronized用于方法上 三.Java标准库中synchronized的使用 四.synchronized的底层实现原理 一.线程安全问题 线程安全是指在多线程环境下&#xff0c;对共享资源的访问不会导致…

Python构建网络控制和管理应用程库之使用详解

概要 POX是一种广泛使用的Python开发工具,主要用于构建网络控制和管理应用程序。作为一个灵活的软件平台,POX支持快速开发网络通信协议,尤其是在软件定义网络(SDN)领域中得到了广泛应用。本文将全面介绍POX库的安装、主要特性、基本与高级功能,并结合实际应用场景,展示…

AVL树!

文章目录 1.AVL树的概念2.AVL树的插入和旋转3.AVL树的旋转3.1旋转的底层&#xff1a;3.2 右旋转3.3 左旋转3.4 双旋 4.AVL树的底层 1.AVL树的概念 当向二叉搜索树中插入新结点后&#xff0c;如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整)&a…

字符串取第一个空格之后的所有的值字符串取第一个空格之后的第二个元素的值,不要后面的值

当我们后端返回值可能存在某些特定的值或标识导致返回数据不固定且是空格分割时&#xff0c;我们想取出返回字符串中的某个值&#xff0c;就可以参考下面对这个字符串进行操作提取&#xff0c;当然&#xff0c;如果是别的符号分割开的把下面的空格替换即可 1、字符串取第一个空…

根据特定条件在列表中加一列操作,符合此条件时此列才会展示

我们想要列表中有一列数据在A环境打开是显示的&#xff0c;在B环境打开则不显示&#xff0c;这里B环境表示为默认环境 1、不能直接用环境判断加在列表的前面&#xff0c;否则其他环境会出现空格情况 constructor(props) {super(props)const columns [{ title: 姓名, dataInd…

在全志H616核桃派开发板上进行PyQt5的代码编写和运行

核桃派本地 在上一节我们通过Qt Designer设计了ui窗口并转换成了Python代码&#xff0c;由于是Python编程&#xff0c;因此我们可以在核桃派开发板打开Python代码进行编程。 在核桃派上推荐使用Thonny来打开编写Python文件, 使用请参考&#xff1a;Thonny IDE。 打开上一节生…