<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[【FAQ】Wi-Fi&#x2F;BT MAC地址定制]]></title><description><![CDATA[<p dir="auto"><strong>问题背景</strong><br />
很多Wi-Fi/BT模组默认出厂是不带MAC地址的，整机厂需要根据需求，烧写特定的MAC地址。</p>
<p dir="auto"><strong>MAC地址通路</strong><br />
Linux-4.9后，全志平台模组MAC地址定制流程如下</p>
<p dir="auto"><img src="/assets/uploads/files/1639100261951-f0b99d68a48d47fb86bbcd973ef20647.jfif" alt="f0b99d68a48d47fb86bbcd973ef20647.jfif" class=" img-responsive img-markdown" width="undefined" height="undefined" /></p>
<p dir="auto">系统启动后，引导程序会加载env中定义的key，并传递给cmdline和内核dts。 如果安全存储中没有mac/wifi_mac/bt_mac这几个key，或者值解析失败，我们将尝试从私有分区加载并解析这些key。在内核空间中，addr_mgt驱动程序读取cmdline或dts中与Mac相关的键，对其进行解析并导出到其他驱动程序以使用。 为了让用户空间可以访问这些地址值，创建了sysfs来保存地址值。</p>
<p dir="auto"><strong>配置</strong><br />
uboot env<br />
请确保env.cfg中有如下配置项存在：<br />
<img src="/assets/uploads/files/1639100404216-5893a71a-c707-4fa3-85b5-4acc192916e8.png" alt="5893A71A-C707-4fa3-85B5-4ACC192916E8.png" class=" img-responsive img-markdown" width="1460" height="29" /></p>
<p dir="auto"><strong>dts</strong><br />
dts配置参考如下<br />
<img src="/assets/uploads/files/1639100415690-123dd43781e34e049277b1fe4f600f50.jfif" alt="123dd43781e34e049277b1fe4f600f50.jfif" class=" img-responsive img-markdown" width="undefined" height="undefined" /><br />
其中，type_addr_xx表示mac地址的来源，值含义如下</p>
<ul>
<li>0: 不指定类型</li>
<li>1: 使用烧写的mac地址</li>
<li>2: 使用chipid生成的mac地址</li>
<li>3: 使用sysfs写入的地址</li>
<li>其他: 不提供地址</li>
</ul>
<p dir="auto"><strong>烧写</strong><br />
使用全志烧号工具DragonSN或DragonKey烧写mac/wifi_mac/bt_mac到私有分区或secure storge中。合法的mac地址格式为xx:xx:xx:xx:xx:xx, x 是16禁止值，0-9，a-f。</p>
<p dir="auto"><strong>使用</strong></p>
<p dir="auto"><strong>内核空间</strong></p>
<p dir="auto"><strong>Linux-4.9</strong></p>
<ul>
<li>读取Wi-Fi MAC地址</li>
</ul>
<pre><code>int get_wifi_custom_mac_address(char *addr_str)
</code></pre>
<ul>
<li>读取BT MAC地址</li>
</ul>
<pre><code>int get_bt_custom_mac_address(char *addr_str)
</code></pre>
<ul>
<li>读取以太网 MAC地址</li>
</ul>
<pre><code>int get_eth_custom_mac_address(char *addr_str)
</code></pre>
<p dir="auto"><strong>Linux-5.4</strong></p>
<pre><code>int get_custom_mac_address(int fmt, char *name, char *addr)
</code></pre>
<p dir="auto">fmt： 0为str，1为16进制值<br />
name: “wifi”、“bt”、“eth”</p>
<p dir="auto"><strong>用户空间</strong><br />
可以通过sysfs文件节点访问对应值，linux-4.9下主要节点如下：</p>
<pre><code>root@venus-a1:/sys/class/addr_mgt# ls -l
total 0
-rw-r--r-- 1 root root 4096 2019-01-15 17:22 addr_bt
-rw-r--r-- 1 root root 4096 2019-01-15 17:22 addr_eth
-r--r--r-- 1 root root 4096 2019-01-15 17:22 addr_type
-rw-r--r-- 1 root root 4096 2019-01-15 17:22 addr_wifi
</code></pre>
<p dir="auto">linux-5.4下主要节点如下：</p>
<pre><code>console:/ # ls -l /sys/class/addr_mgt/
total 0
-rw-r--r-- 1 bluetooth net_bt_admin 4096 2020-12-22 19:33 addr_bt
-rw-r--r-- 1 root      root         4096 2020-12-23 13:10 addr_eth
-rw-r--r-- 1 root      root         4096 2020-12-23 13:10 addr_wifi
-r--r--r-- 1 root      root         4096 2020-12-23 13:10 summary
</code></pre>
]]></description><link>https://bbs.aw-ol.com/topic/768/faq-wi-fi-bt-mac地址定制</link><generator>RSS for Node</generator><lastBuildDate>Sun, 08 Mar 2026 13:48:40 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/768.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Dec 2021 01:42:56 GMT</pubDate><ttl>60</ttl></channel></rss>