一. 测试目的
经常会有开发者提出基于 ESP32 Wi-Fi、BLE 等示例的固件大小及优化 & 相关组件大小对比,本文将测试针对相关示例进行修改测试。
二. 测试环境
为了保证测试结果的一致性,采用以下测试环境:
-
esp-idf
编写本文时,使用的 esp-idf release 版本对应的 commit 为 7d0f1536e。可通过以下命令确认:git log --oneline -1
结果为:
7d0f1536e (HEAD -> release/v4.2, origin/release/v4.2) Merge branch 'bugfix/fix_adc_init_code_setting_for_esp32s2' into 'master'
-
toolchain 版本
gcc version 8.2.0 (crosstool-NG esp-2020r1) ,可通过以下命令确认:xtensa-esp32-elf-gcc -v
结果为(log 过长,只需要关注最后的这部分。如下):
Thread model: posix gcc version 8.2.0 (crosstool-NG esp-2020r1)
-
测试主机
Linux 环境,Ubuntu 18.04 LTS,可选用其他平台。 -
开发板
ESP32-WROOM-32D 开发板,可选用其他基于 ESP32 的开发板。 -
测试示例
esp-idf/examples/get-started/hello_world
示例
esp-idf/examples/wifi/getting_started/station
示例
esp-idf/examples/protocols/https_mbedtls
示例
esp-idf/examples/bluetooth/bluedroid/ble/blufi
示例
esp-idf/examples/bluetooth/nimble/bleprph
示例
三. 测试过程
在正常编译烧录示例的基础上可使用 idf.py menuconfig
来配置优化固件大小,具体如下:
-
开启尺寸优化
在
idf.py menuconfig
中选择Compiler option
->Optimize level
->Optimize for size
(默认为Debug
) -
降低 log 打印等级
在
idf.py menuconfig
中选择Component config
->Log output
->Default log verbosity
->Error
(默认为Info
)
如何使用 esp-idf 创建与编译示例请查看 ESP-IDF 编程指南。
注:在工程下的终端输入
idf.py size-components
查看component size
四. 测试结果
4.1. hello_world
示例
此部分为编译烧录 hello_world
示例后的 component size
以及 APP Bin
的大小。以下分为优化固件大小前后两部分。
-
优化固件大小前
APP Bin
大小为:144K hello-world.bin
component size
大小为:Total sizes: DRAM .data size: 8552 bytes DRAM .bss size: 2048 bytes Used static DRAM: 10600 bytes ( 170136 available, 5.9% used) Used static IRAM: 39747 bytes ( 91325 available, 30.3% used)Flash code: 76803 bytesFlash rodata: 22056 bytes Total image size:~ 147158 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibc.a 364 0 0 54820 3833 59017libfreertos.a 4140 776 12787 0 1762 19465libesp32.a 2126 106 6543 5118 3385 17278libsoc.a 184 4 6732 1501 1940 10361libspi_flash.a 783 294 4878 1143 1380 8478libesp_common.a 16 204 559 1077 5345 7201libvfs.a 308 48 0 5579 923 6858libheap.a 305 4 3135 877 729 5050libdriver.a 80 20 0 3053 768 3921libnewlib.a 152 272 820 868 88 2200libefuse.a 16 4 0 1162 720 1902 libbootloader_support.a 0 0 1020 503 0 1523liblog.a 8 272 580 94 151 1105libesp_ringbuf.a 0 0 858 0 154 1012libapp_update.a 0 4 109 159 474 746libhal.a 0 0 447 0 32 479libmain.a 0 0 0 214 248 462libpthread.a 8 12 0 264 0 284libxtensa.a 0 0 213 0 0 213libgcc.a 0 0 0 0 160 160(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libjson.a 0 0 0 0 0 0libmbedcrypto.a 0 0 0 0 0 0libwpa_supplicant.a 0 0 0 0 0 0
-
优化固件大小后
APP Bin
大小为:136K hello-world.bin
component size
大小为:Total sizes: DRAM .data size: 8264 bytes DRAM .bss size: 2040 bytes Used static DRAM: 10304 bytes ( 170432 available, 5.7% used) Used static IRAM: 35035 bytes ( 96037 available, 26.7% used)Flash code: 73287 bytesFlash rodata: 19436 bytes Total image size:~ 136022 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibc.a 364 0 0 54820 3823 59007libfreertos.a 4140 776 11631 0 1618 18165libesp32.a 1945 106 5570 4540 2687 14848libsoc.a 132 4 5881 1329 1677 9023libspi_flash.a 777 294 4539 964 1083 7657libesp_common.a 16 204 404 980 5081 6685libvfs.a 308 48 0 4368 558 5282libheap.a 298 4 2483 640 568 3993libdriver.a 80 20 0 2479 677 3256libnewlib.a 152 272 800 778 88 2090libefuse.a 16 4 0 917 670 1607 libbootloader_support.a 0 0 854 470 16 1340liblog.a 8 272 493 84 147 1004libesp_ringbuf.a 0 0 671 0 152 823libapp_update.a 0 4 88 131 471 694libhal.a 0 0 447 0 32 479libmain.a 0 0 0 202 223 425libpthread.a 8 12 0 246 0 266libxtensa.a 0 0 173 0 0 173libgcc.a 0 0 0 0 160 160(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libjson.a 0 0 0 0 0 0libmbedcrypto.a 0 0 0 0 0 0libwpa_supplicant.a 0 0 0 0 0 0
4.2. station
示例
此部分为编译烧录 station
示例后的 component size
以及 APP Bin
的大小。以下分为优化固件大小前后两部分。
-
优化固件大小前
APP Bin
大小为:663K wifi_station.bin
component size
大小为:Total sizes: DRAM .data size: 14488 bytes DRAM .bss size: 22752 bytes Used static DRAM: 37240 bytes ( 143496 available, 20.6% used) Used static IRAM: 88304 bytes ( 42768 available, 67.4% used)Flash code: 478527 bytesFlash rodata: 96696 bytes Total image size:~ 678015 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118278 23493 164300liblwip.a 21 3990 0 84682 19072 107765libpp.a 1317 5379 23949 38431 5100 74176libc.a 364 0 0 55303 3833 59500libwpa_supplicant.a 8 796 0 42349 7696 50849libmbedcrypto.a 64 29 30 43986 4207 48316libphy.a 1604 929 6491 30366 0 39390libfreertos.a 4140 776 14440 0 2005 21361libesp32.a 2126 114 7017 5237 3662 18156libnvs_flash.a 0 24 0 13321 3033 16378libsoc.a 184 4 6736 1509 1943 10376libspi_flash.a 783 294 6179 1272 1424 9952libesp_common.a 16 210 1088 1968 6165 9447libesp_wifi.a 400 80 618 4590 2776 8464libvfs.a 308 48 0 5849 1044 7249libesp_netif.a 12 25 0 4788 2200 7025libgcc.a 4 12 104 5387 872 6379libheap.a 305 4 3234 877 729 5149libesp_event.a 0 4 0 2949 1171 4124libdriver.a 80 20 0 3157 768 4025libstdc++.a 8 20 0 2590 1082 3700libcoexist.a 1278 28 0 2227 0 3533libmain.a 0 8 0 1058 1168 2234libnewlib.a 152 272 828 868 88 2208libefuse.a 36 4 0 1068 740 1848libpthread.a 16 12 243 771 509 1551 libbootloader_support.a 0 0 1016 503 0 1519liblog.a 8 272 628 438 169 1515libcore.a 0 29 0 805 302 1136libesp_ringbuf.a 0 0 858 0 152 1010libapp_update.a 0 4 109 159 474 746librtc.a 0 0 480 0 0 480libhal.a 0 0 447 0 32 479libxtensa.a 0 0 213 0 0 213libtcpip_adapter.a 0 17 0 188 0 205(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
-
优化固件大小后
APP Bin
大小为:618K wifi_station.bin
component size
大小为:Total sizes: DRAM .data size: 14200 bytes DRAM .bss size: 22736 bytes Used static DRAM: 36936 bytes ( 143800 available, 20.4% used) Used static IRAM: 82895 bytes ( 48177 available, 63.2% used)Flash code: 445143 bytesFlash rodata: 89740 bytes Total image size:~ 631978 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118246 23521 164296liblwip.a 21 3990 0 69148 17784 90943libpp.a 1317 5379 23949 38447 5100 74192libc.a 364 0 0 55299 3827 59490libwpa_supplicant.a 8 796 0 37524 7152 45480libmbedcrypto.a 64 29 30 39762 4196 44081libphy.a 1604 929 6491 30370 0 39394libfreertos.a 4140 776 13111 0 1861 19888libesp32.a 1945 114 5993 4651 2947 15650libnvs_flash.a 0 24 0 10925 3131 14080libsoc.a 132 4 5881 1329 1677 9023libspi_flash.a 777 294 5584 1070 1124 8849libesp_common.a 16 210 863 1729 5706 8524libesp_wifi.a 400 80 527 3822 2117 6946libgcc.a 4 12 104 5387 872 6379libesp_netif.a 12 25 0 3911 2014 5962libvfs.a 308 48 0 4564 673 5593libheap.a 298 4 2531 640 568 4041libstdc++.a 8 20 0 2590 1082 3700libesp_event.a 0 4 0 2631 1028 3663libcoexist.a 1278 28 0 2227 0 3533libdriver.a 80 20 0 2571 677 3348libnewlib.a 152 272 808 778 88 2098libmain.a 0 8 0 808 787 1603libefuse.a 36 4 0 830 683 1553libpthread.a 16 12 228 663 504 1423liblog.a 8 272 537 374 165 1356 libbootloader_support.a 0 0 850 470 16 1336libcore.a 0 29 0 805 302 1136libesp_ringbuf.a 0 0 671 0 152 823libapp_update.a 0 4 88 131 471 694librtc.a 0 0 480 0 0 480libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 200 0 217libxtensa.a 0 0 173 0 0 173(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
4.3. https_mbedtls
示例
此部分为编译烧录 https_mbedtls
示例后的 component size
以及 APP Bin
的大小。以下分为优化固件大小前后两部分。
-
优化固件大小前
APP Bin
大小为:789K https-mbedtls.bin
component size
大小为:Total sizes: DRAM .data size: 15364 bytes DRAM .bss size: 23152 bytes Used static DRAM: 38516 bytes ( 86064 available, 30.9% used) Used static IRAM: 93422 bytes ( 37650 available, 71.3% used)Flash code: 570271 bytesFlash rodata: 128604 bytes Total image size:~ 807661 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118318 23476 164323liblwip.a 21 3992 0 94867 20360 119240libmbedcrypto.a 64 81 30 77217 21661 99053libpp.a 1317 5379 23949 38399 5100 74144libc.a 364 0 0 55739 3833 59936libwpa_supplicant.a 8 796 0 42074 7696 50574libmbedtls.a 60 320 0 35343 7453 43176libphy.a 1604 929 6483 30354 0 39370libfreertos.a 4140 776 14480 0 2002 21398libesp32.a 2126 114 7041 5257 3662 18200libnvs_flash.a 0 24 0 13326 3033 16383libsoc.a 184 4 6736 1509 1940 10373libcoexist.a 1981 28 3728 3971 303 10011libspi_flash.a 783 294 6179 1179 1380 9815libesp_common.a 16 210 1088 1991 6165 9470libesp_wifi.a 484 80 671 4852 2682 8769libmbedx509.a 0 0 0 7117 1406 8523libesp_netif.a 12 25 0 5215 2268 7520libvfs.a 308 48 0 5915 1041 7312libgcc.a 4 12 104 5407 872 6399libmain.a 0 4 0 1650 3591 5245libheap.a 305 4 3234 897 729 5169libesp_event.a 0 4 0 2960 1163 4127libdriver.a 80 20 0 3213 768 4081libstdc++.a 8 20 0 2618 1082 3728 libprotocol_examples_com 0 36 0 1555 1629 3220libnewlib.a 152 272 828 868 88 2208libefuse.a 36 4 0 1108 740 1888librtc.a 0 4 1697 0 0 1701libpthread.a 16 12 243 783 509 1563liblog.a 8 272 628 438 169 1515 libbootloader_support.a 0 0 1016 495 0 1511libcore.a 0 29 0 801 302 1132libesp_ringbuf.a 0 0 877 0 152 1029libapp_update.a 0 4 109 164 474 751libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 196 0 213libxtensa.a 0 0 213 0 0 213(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
-
优化固件大小后
APP Bin
大小为:730K https-mbedtls.bin
component size
大小为:Total sizes: DRAM .data size: 15060 bytes DRAM .bss size: 23128 bytes Used static DRAM: 38188 bytes ( 86392 available, 30.7% used) Used static IRAM: 88046 bytes ( 43026 available, 67.2% used)Flash code: 524307 bytesFlash rodata: 118996 bytes Total image size:~ 746409 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118310 23512 164351libmbedcrypto.a 64 81 30 70202 31164 101541liblwip.a 21 3992 0 77269 18759 100041libpp.a 1317 5379 23949 38395 5100 74140libc.a 364 0 0 55907 3823 60094libwpa_supplicant.a 8 796 0 37372 7152 45328libphy.a 1604 929 6483 30358 0 39374libmbedtls.a 60 320 0 29950 7123 37453libfreertos.a 4140 776 13162 0 1861 19939libesp32.a 1945 114 6021 4659 2959 15698libnvs_flash.a 0 24 0 10896 3131 14051libcoexist.a 1981 28 3728 3971 303 10011libsoc.a 132 4 5881 1329 1677 9023libspi_flash.a 777 294 5584 996 1080 8731libesp_common.a 16 210 863 1736 5706 8531libmbedx509.a 0 0 0 5990 1310 7300libesp_wifi.a 484 80 580 4026 2015 7185libgcc.a 4 12 104 5403 872 6395libesp_netif.a 12 25 0 4099 2082 6218libvfs.a 308 48 0 4560 673 5589libheap.a 298 4 2531 640 568 4041libstdc++.a 8 20 0 2594 1082 3704libmain.a 0 0 0 1072 2616 3688libesp_event.a 0 4 0 2631 1022 3657libdriver.a 80 20 0 2639 677 3416 libprotocol_examples_com 0 32 0 1100 1195 2327libnewlib.a 152 272 808 778 88 2098librtc.a 0 4 1701 0 0 1705libefuse.a 36 4 0 842 683 1565libpthread.a 16 12 228 663 504 1423liblog.a 8 272 537 382 163 1362 libbootloader_support.a 0 0 850 470 16 1336libcore.a 0 29 0 801 302 1132libesp_ringbuf.a 0 0 707 0 152 859libapp_update.a 0 4 88 138 471 701libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 200 0 217libxtensa.a 0 0 173 0 0 173(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
4.4. blufi
+ https_mbedtls
示例
此部分先合并 blufi
与 https_mbedtls
示例,然后编译烧录后查看 component size
以及 APP Bin
的大小。以下分为优化固件大小前后两部分。
-
优化固件大小前
APP Bin
大小为:1.1M blufi_demo.bin
component size
大小为:Total sizes: DRAM .data size: 16316 bytes DRAM .bss size: 43944 bytes Used static DRAM: 60260 bytes ( 64320 available, 48.4% used) Used static IRAM: 115382 bytes ( 15690 available, 88.0% used)Flash code: 798883 bytesFlash rodata: 183852 bytes Total image size:~1114433 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibbt.a 150 18062 438 158115 47797 224562libnet80211.a 975 9187 12368 119909 23607 166046liblwip.a 21 3996 0 96432 20360 120809libmbedcrypto.a 64 81 30 77194 21661 99030libbtdm_app.a 337 2381 20811 59042 4136 86707libpp.a 1317 5379 23941 38411 5100 74148libc.a 364 0 0 55939 3831 60134libwpa_supplicant.a 8 796 0 42484 7696 50984libmbedtls.a 60 320 0 35371 7453 43204libphy.a 1604 930 6483 30507 0 39524libfreertos.a 4140 776 14440 0 2002 21358libesp32.a 2126 114 7041 5261 3662 18204libnvs_flash.a 0 24 0 13551 3033 16608libmain.a 128 315 0 5223 6194 11860libcoexist.a 2280 28 3842 4642 325 11117libsoc.a 184 4 6736 1501 1946 10371libspi_flash.a 783 294 6179 1279 1424 9959libesp_common.a 16 210 1088 1991 6165 9470libesp_wifi.a 484 80 719 5134 2766 9183libmbedx509.a 0 0 0 7133 1406 8539libesp_netif.a 12 25 0 5219 2268 7524libvfs.a 308 48 0 5915 1047 7318libgcc.a 4 12 104 5403 872 6395libheap.a 313 4 3234 1227 729 5507libesp_event.a 0 4 0 2960 1163 4127libdriver.a 80 20 0 3213 768 4081libstdc++.a 8 20 0 2622 1082 3732 libprotocol_examples_com 0 36 0 1559 1553 3148librtc.a 0 4 2235 0 0 2239libnewlib.a 152 272 828 868 88 2208liblog.a 8 272 628 764 263 1935libefuse.a 36 4 0 1120 740 1900libpthread.a 16 12 243 783 509 1563 libbootloader_support.a 0 0 1016 495 0 1511libcore.a 0 29 0 801 302 1132libesp_ringbuf.a 0 0 858 0 152 1010libapp_update.a 0 4 109 164 474 751libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 196 0 213libxtensa.a 0 0 213 0 0 213libmesh.a 1 1 0 43 0 45(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0
-
优化固件大小后
APP Bin
大小为:996K blufi_demo.bin
component size
大小为:Total sizes: DRAM .data size: 16028 bytes DRAM .bss size: 43928 bytes Used static DRAM: 59956 bytes ( 64624 available, 48.1% used) Used static IRAM: 109910 bytes ( 21162 available, 83.9% used)Flash code: 726731 bytesFlash rodata: 166308 bytes Total image size:~1018977 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibbt.a 150 18062 364 133665 42179 194420libnet80211.a 975 9187 12368 119957 23643 166130libmbedcrypto.a 64 81 30 70448 31164 101787liblwip.a 21 3996 0 78496 18759 101272libbtdm_app.a 337 2381 20811 59062 4136 86727libpp.a 1317 5379 23941 38443 5100 74180libc.a 364 0 0 55715 3806 59885libwpa_supplicant.a 8 796 0 37990 7147 45941libphy.a 1604 930 6483 30519 0 39536libmbedtls.a 60 320 0 30010 7123 37513libfreertos.a 4140 776 13111 0 1861 19888libesp32.a 1945 114 6021 4679 2959 15718libnvs_flash.a 0 24 0 11152 3131 14307libcoexist.a 2280 28 3842 4642 325 11117libsoc.a 132 4 5881 1325 1677 9019libspi_flash.a 777 294 5584 1077 1124 8856libesp_common.a 16 210 863 1748 5706 8543libmain.a 128 311 0 3622 4044 8105libesp_wifi.a 484 80 628 4230 2117 7539libmbedx509.a 0 0 0 5930 1310 7240libgcc.a 4 12 104 5387 872 6379libesp_netif.a 12 25 0 4155 2082 6274libvfs.a 308 48 0 4612 673 5641libheap.a 306 4 2531 920 568 4329libstdc++.a 8 20 0 2614 1082 3724libesp_event.a 0 4 0 2643 1022 3669libdriver.a 80 20 0 2639 677 3416librtc.a 0 4 2239 0 0 2243 libprotocol_examples_com 0 32 0 1068 1125 2225libnewlib.a 152 272 808 778 88 2098libefuse.a 36 4 0 845 683 1568libpthread.a 16 12 228 671 504 1431liblog.a 8 272 537 374 163 1354 libbootloader_support.a 0 0 850 470 16 1336libcore.a 0 29 0 801 302 1132libesp_ringbuf.a 0 0 671 0 152 823libapp_update.a 0 4 88 138 471 701libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 208 0 225libxtensa.a 0 0 173 0 0 173libmesh.a 1 1 0 43 0 45(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0
4.5. bleprph
+ https_mbedtls
示例
此部分先合并 bleprph
与 https_mbedtls
示例,然后编译烧录后查看 component size
以及 APP Bin
的大小。以下分为优化固件大小前后两部分。
-
优化固件大小前
APP Bin
大小为:1007K bleprph.bin
component size
大小为:Total sizes: DRAM .data size: 16200 bytes DRAM .bss size: 40864 bytes Used static DRAM: 57064 bytes ( 67516 available, 45.8% used) Used static IRAM: 119022 bytes ( 12050 available, 90.8% used)Flash code: 747275 bytesFlash rodata: 148112 bytes Total image size:~1030609 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118330 23476 164335liblwip.a 21 3996 0 96312 20360 120689libmbedcrypto.a 64 85 30 80490 21765 102434libbt.a 369 15230 438 72648 11570 100255libbtdm_app.a 337 2381 20811 59118 4136 86783libc.a 364 0 0 82006 4367 86737libpp.a 1317 5379 23941 38447 5100 74184libwpa_supplicant.a 8 796 0 42325 7760 50889libmbedtls.a 60 320 0 35705 7453 43538libphy.a 1604 930 6483 30519 0 39536libfreertos.a 4140 776 14680 0 2067 21663libesp32.a 2126 114 7041 5521 3680 18482libnvs_flash.a 0 24 0 13551 3033 16608libsoc.a 184 4 6736 1968 2164 11056libcoexist.a 2012 28 3842 4350 325 10557libmain.a 92 14 0 4529 5600 10235libdriver.a 80 21 0 8476 1403 9980libspi_flash.a 783 294 6179 1283 1424 9963libesp_common.a 16 210 1088 2012 6165 9491libesp_wifi.a 484 80 719 4980 2682 8945libmbedx509.a 0 0 0 7452 1406 8858libesp_netif.a 12 25 0 5219 2268 7524libvfs.a 308 48 0 5915 1044 7315libgcc.a 4 12 104 5387 872 6379libheap.a 313 4 3234 1227 729 5507libesp_ringbuf.a 0 0 4214 0 532 4746libesp_event.a 0 4 0 2960 1163 4127libstdc++.a 8 20 0 2614 1082 3724 libprotocol_examples_com 0 36 0 1559 1629 3224librtc.a 0 4 2235 0 0 2239libnewlib.a 152 272 828 868 88 2208libefuse.a 36 4 0 1120 740 1900libconsole.a 0 24 0 1456 269 1749libpthread.a 16 12 243 783 509 1563liblog.a 8 272 628 442 169 1519 libbootloader_support.a 0 0 1016 495 0 1511libcore.a 0 29 0 801 302 1132libapp_update.a 0 4 109 164 474 751libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 196 0 213libxtensa.a 0 0 213 0 0 213(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
-
优化固件大小后
APP Bin
大小为:932K bleprph.bin
component size
大小为:Total sizes: DRAM .data size: 15912 bytes DRAM .bss size: 40832 bytes Used static DRAM: 56744 bytes ( 67836 available, 45.5% used) Used static IRAM: 112718 bytes ( 18354 available, 86.0% used)Flash code: 689015 bytesFlash rodata: 136356 bytes Total image size:~ 954001 bytes (.bin may be padded larger) Per-archive contributions to ELF file:Archive File DRAM .data & .bss IRAM Flash code & rodata Totallibnet80211.a 975 9186 12368 118298 23512 164339libmbedcrypto.a 64 85 30 73804 31308 105291liblwip.a 21 3996 0 78227 18759 101003libbt.a 369 15230 364 62707 11091 89761libbtdm_app.a 337 2381 20811 59174 4136 86839libc.a 364 0 0 82006 4351 86721libpp.a 1317 5379 23941 38459 5100 74196libwpa_supplicant.a 8 796 0 37694 7141 45639libphy.a 1604 930 6483 30527 0 39544libmbedtls.a 60 320 0 30235 7123 37738libfreertos.a 4140 776 13264 0 1903 20083libesp32.a 1945 114 6021 4931 2965 15976libnvs_flash.a 0 24 0 11152 3131 14307libcoexist.a 2012 28 3842 4350 325 10557libsoc.a 132 4 5881 1692 1713 9422libspi_flash.a 777 294 5584 1081 1124 8860libesp_common.a 16 210 863 1786 5706 8581libdriver.a 80 21 0 6885 1108 8094libmbedx509.a 0 0 0 6353 1310 7663libmain.a 92 10 0 3356 4086 7544libesp_wifi.a 484 80 628 4154 2015 7361libgcc.a 4 12 104 5391 872 6383libesp_netif.a 12 25 0 4155 2082 6274libvfs.a 308 48 0 4612 673 5641libheap.a 306 4 2531 920 568 4329libesp_ringbuf.a 0 0 3295 0 532 3827libstdc++.a 8 20 0 2614 1082 3724libesp_event.a 0 4 0 2639 1022 3665 libprotocol_examples_com 0 32 0 1100 1195 2327librtc.a 0 4 2239 0 0 2243libnewlib.a 152 272 808 778 88 2098libconsole.a 0 24 0 1228 334 1586libefuse.a 36 4 0 845 683 1568libpthread.a 16 12 228 671 504 1431liblog.a 8 272 537 374 163 1354 libbootloader_support.a 0 0 850 470 16 1336libcore.a 0 29 0 801 302 1132libapp_update.a 0 4 88 134 471 697libhal.a 0 0 447 0 32 479libtcpip_adapter.a 0 17 0 208 0 225libxtensa.a 0 0 173 0 0 173(exe) 0 0 3 3 12 18libcxx.a 0 0 0 11 0 11libesp_eth.a 0 0 0 0 0 0libjson.a 0 0 0 0 0 0libmesh.a 0 0 0 0 0 0
五. 总结
经过上述测试后,我们可以观察得到:
- ESP32 只使用基本功能(如
hello_world
示例)时的 APP Bin 大小为 150 k 左右。 - ESP32 使用基本功能 + Wi-Fi 功能(如
station
示例)时的 APP Bin 大小为 660 k 左右。 - ESP32 使用基本功能 + Wi-Fi 进阶功能(如
https_mbedtls
示例)时的 APP Bin 大小为 790 k 左右。 - ESP32 使用基本功能 + Wi-Fi 进阶功能 + BLE 功能(如
blufi
+https_mbedtls
示例)时的 APP Bin 大小为 1.1 M 左右。 - ESP32 使用基本功能 + Wi-Fi 进阶功能 + NIMBLE 功能(如
bleprph
+https_mbedtls
示例)时的 APP Bin 大小为 1.0 M 左右。 - 使用
三. 测试过程
里的固件尺寸优化能优化的尺寸大小与固件自身大小有关,如hello_world
的 APP 固件在优化后只减少了 10 k 左右,而blufi
+https_mbedtls
的 APP 固件在优化后能减少 100 k 以上。