linux nm/objdump/readelf/addr2line命令詳解

我們在開發過程中通過需要反匯編查看問題,那么我們這里使用rk3568開發板來舉例nm/objdump/readelf/addr2line?分析動態庫和可執行文件以及.o文件。

1,我們舉例nm/objdump/readelf/addr2line解析linux 內核文件vmlinux

(1),addr2line解析地址0xffffffc00911a2e

lark@ubuntu:~/Public/rk356x-linux/kernel$ addr2line -e vmlinux ?-f -C ffffffc00911a2e4
skb_copy_bits
/home/lark/Public/rk356x-linux/kernel/net/core/skbuff.c:3610

使用上面的addr2line的時候記得編譯時需要在Makefile里面加入-g,并且在編譯net模塊里面的編譯里面不要使用strip,而要使用not strip的版本。
(2),readelf 查看skb_copy_bits

lark@ubuntu:~/Public/rk356x-linux/kernel$ readelf -s vmlinux | grep "skb_copy_bits"
149816: ffffffc009b5c4da ? ? 0 NOTYPE ?LOCAL ?DEFAULT ? ?8 __kstrtab_skb_copy_bits
149817: ffffffc009b55ba3 ? ? 0 NOTYPE ?LOCAL ?DEFAULT ? ?8 __kstrtabns_skb_copy_bits
149819: ffffffc009b0a864 ? ? 0 NOTYPE ?LOCAL ?DEFAULT ? ?6 __ksymtab_skb_copy_bits
196394: ffffffc00911a2e4 ? 548 FUNC ? ?GLOBAL DEFAULT ? ?2 skb_copy_bits

(3),objdump查看skb_copy_bits

lark@ubuntu:~/Public/rk356x-linux$ objdump -d kernel/vmlinux | grep "skb_copy_bits"
ffffffc008bca2e8:?? ?94153fff ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd0c50:?? ?941525a5 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd0e48:?? ?94152527 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd1498:?? ?94152393 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd154c:?? ?94152366 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd8730:?? ?941506ed ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008bd8838:?? ?941506ab ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008c5e7b8:?? ?9412eecb ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008c6de38:?? ?9412b12b ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008c6e234:?? ?9412b02c ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc008c6e530:?? ?9412af6d ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc00911a2e4 <skb_copy_bits>:
ffffffc00911a318:?? ?54000d0b ?? ?b.lt?? ?ffffffc00911a4b8 <skb_copy_bits+0x1d4> ?// b.tstop
ffffffc00911a330:?? ?54000d4c ?? ?b.gt?? ?ffffffc00911a4d8 <skb_copy_bits+0x1f4>
ffffffc00911a344:?? ?340007e1 ?? ?cbz?? ?w1, ffffffc00911a440 <skb_copy_bits+0x15c>
ffffffc00911a360:?? ?14000008 ?? ?b?? ?ffffffc00911a380 <skb_copy_bits+0x9c>
ffffffc00911a37c:?? ?5400060d ?? ?b.le?? ?ffffffc00911a43c <skb_copy_bits+0x158>
ffffffc00911a388:?? ?5400056b ?? ?b.lt?? ?ffffffc00911a434 <skb_copy_bits+0x150> ?// b.tstop
ffffffc00911a3a4:?? ?54fffe0d ?? ?b.le?? ?ffffffc00911a364 <skb_copy_bits+0x80>
ffffffc00911a3cc:?? ?340001d3 ?? ?cbz?? ?w19, ffffffc00911a404 <skb_copy_bits+0x120>
ffffffc00911a410:?? ?54fffaa1 ?? ?b.ne?? ?ffffffc00911a364 <skb_copy_bits+0x80> ?// b.any
ffffffc00911a438:?? ?17ffffd5 ?? ?b?? ?ffffffc00911a38c <skb_copy_bits+0xa8>
ffffffc00911a444:?? ?b5000096 ?? ?cbnz?? ?x22, ffffffc00911a454 <skb_copy_bits+0x170>
ffffffc00911a448:?? ?1400001a ?? ?b?? ?ffffffc00911a4b0 <skb_copy_bits+0x1cc>
ffffffc00911a450:?? ?b4000316 ?? ?cbz?? ?x22, ffffffc00911a4b0 <skb_copy_bits+0x1cc>
ffffffc00911a45c:?? ?540003ab ?? ?b.lt?? ?ffffffc00911a4d0 <skb_copy_bits+0x1ec> ?// b.tstop
ffffffc00911a480:?? ?54fffe6d ?? ?b.le?? ?ffffffc00911a44c <skb_copy_bits+0x168>
ffffffc00911a498:?? ?97ffff93 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>
ffffffc00911a49c:?? ?350000c0 ?? ?cbnz?? ?w0, ffffffc00911a4b4 <skb_copy_bits+0x1d0>
ffffffc00911a4a4:?? ?54fffba0 ?? ?b.eq?? ?ffffffc00911a418 <skb_copy_bits+0x134> ?// b.none
ffffffc00911a4ac:?? ?b5fffd56 ?? ?cbnz?? ?x22, ffffffc00911a454 <skb_copy_bits+0x170>
ffffffc00911a4b0:?? ?34fffb55 ?? ?cbz?? ?w21, ffffffc00911a418 <skb_copy_bits+0x134>
ffffffc00911a4d4:?? ?17ffffe3 ?? ?b?? ?ffffffc00911a460 <skb_copy_bits+0x17c>
ffffffc00911a4f8:?? ?54fff900 ?? ?b.eq?? ?ffffffc00911a418 <skb_copy_bits+0x134> ?// b.none
ffffffc00911a504:?? ?17ffff8c ?? ?b?? ?ffffffc00911a334 <skb_copy_bits+0x50>
ffffffc00911c8a0:?? ?97fff691 ?? ?bl?? ?ffffffc00911a2e4 <skb_copy_bits>

(4),nm/nm -gDC查看skb_copy_bits

lark@ubuntu:~/Public/rk356x-linux/kernel$ nm vmlinux | grep "skb_copy_bits"
ffffffc009b55ba3 r __kstrtabns_skb_copy_bits
ffffffc009b5c4da r __kstrtab_skb_copy_bits
ffffffc009b0a864 r __ksymtab_skb_copy_bits
ffffffc00911a2e4 T skb_copy_bits

2,nm/objdump/readelf/addr2line參數說明

(1)objdump參數說明:

-d/--disassemble:反匯編可執行段(.text等)
-S/--source:混合顯示源碼和匯編(需編譯時加-g)
-s/--full-contents:顯示所有段原始內容(十六進制+ASCII)
?符號分析參數?
-t/--syms:顯示符號表(含全局變量/函數地址)
-T/--dynamic-syms:顯示動態符號表(用于共享庫)
?段信息參數?
-h/--section-headers:顯示段頭表(各段偏移/大小)
-x/--all-headers:顯示所有頭信息(ELF頭+段頭+符號表)
?架構參數?
-m/--architecture=<arch>:指定目標架構(如-m i386:x86-64)

(2)nm參數說明:

-A?? ?顯示文件名(適用于多文件)?? ?nm -A *.o
-C?? ?解碼 C++ 符號(demangle)?? ?nm -C lib.so
-D?? ?顯示動態符號(共享庫特有)?? ?nm -D libc.so.6
-g?? ?僅顯示外部(全局)符號?? ?nm -g a.out
-l?? ?顯示源代碼行號(需編譯時加 -g)?? ?nm -l program
-S?? ?顯示符號大小?? ?nm -S kernel.o
-u?? ?僅顯示未定義符號?? ?nm -u failed.o
--defined-only?? ?僅顯示已定義符號?? ?nm --defined-only lib.a
--no-demangle?? ?禁止 C++ 符號解碼?? ?nm --no-demangle
-t <format>?? ?自定義輸出格式(dox 十進制/八進制/十六進制)?? ?nm -t x lib.o

(3)readelf參數說明:
-h:顯示ELF文件頭(魔數、架構、入口地址等)readelf -h libtest.so ?# 查看動態庫文件頭
-l:列出程序頭(Program Headers),描述內存布局readelf -l a.out ?# 分析可執行文件內存段節區分析?
-S:顯示所有節區頭(Section Headers),包括.text/.data等readelf -S test.o ?# 查看目標文件節
-x <section>:以十六進制導出指定節區內容readelf -x .text program ?# 導出代碼段機器碼符號與重定位?
-s:顯示符號表(函數/變量名、地址、綁定類型)readelf -s libc.so.6 ?# 查看glibc導出符號
-r:查看重定位表(動態鏈接依賴項)readelf -r demo ?# 分析可執行文件重定位項動態鏈接信息?
-d:顯示動態節(Dynamic Section),如依賴庫NEEDED89readelf -d nginx ?# 查看二進制依賴的so文件

(4)addr2line的使用說明:

?參數??作用??適用場景?
-e <file>指定目標可執行文件或共享庫(默認a.out解析非默認名稱的二進制文件?
-f顯示函數名稱定位崩潰函數上下文?
-C解混淆C++符號(還原可讀函數名)分析C++程序崩潰點?
-s僅顯示文件名(隱藏路徑)簡化輸出信息?
-p美化輸出格式(地址/函數/位置單行顯示)增強可讀性?
-i顯示內聯函數調用鏈分析優化后的代碼邏輯?
-a顯示原始地址(十六進制)地址校驗?
-j <section>指定段名稱(如.text)替代絕對地址分析內核模塊?

3,nm/objdump/readelf/addr2line解析linux 動態庫

lark@ubuntu:~/Public/rk356x-linux/debian/overlay-debug/usr/lib$ nm -D libpng12.so | grep "png_set_bgr"
000000000000ad64 T png_set_bgr

?lark@ubuntu:~/Public/rk356x-linux/debian/overlay-debug/usr/lib$ ./../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-objdump -d libpng12.so | grep "png_set_bgr"
00000000000046f0 <png_set_bgr@plt>:
000000000000ad64 <png_set_bgr@@PNG12_0>:
? ? ad64:?? ?b4000080 ?? ?cbz?? ?x0, ad74 <png_set_bgr@@PNG12_0+0x10>
? ? f4e0:?? ?97ffd484 ?? ?bl?? ?46f0 <png_set_bgr@plt>
? ?10c08:?? ?97ffceba ?? ?bl?? ?46f0 <png_set_bgr@plt>

?lark@ubuntu:~/Public/rk356x-linux/debian/overlay-debug/usr/lib$ ./../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-readelf -s libpng12.so | grep "png_set_bgr"
? ?230: 000000000000ad64 ? ?20 FUNC ? ?GLOBAL DEFAULT ? 11 png_set_bgr@@PNG12_0

4,aarch64-none-linux-gnu-nm/objdump/readelf/addr2line解析.o文件

(0),查看編譯服務器

lark@ubuntu:~/Public/rk356x-linux/kernel$ strings vmlinux ?| grep "gcc"
Linux version 5.10.160 (lark@ubuntu) (aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 10.3.1 20210621, GNU ld (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 2.36.1.20210621) #1 SMP Fri May 9 07:51:32 PDT 2025

(1),aarch64-none-linux-gnu-nm 查看skb_copy_bits?

lark@ubuntu:~/Public/rk356x-linux$ ./prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-nm kernel/vmlinux.o | grep "skb_copy_bits"
ffffffc009b55ba3 r __kstrtabns_skb_copy_bits
ffffffc009b5c4da r __kstrtab_skb_copy_bits
ffffffc009b0a864 r __ksymtab_skb_copy_bits
ffffffc00911a2e4 T skb_copy_bits?

?(2),aarch64-none-linux-gnu-objdump 查看skb_copy_bits?

?lark@ubuntu:~/Public/rk356x-linux$ ./prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-objdump -d kernel/vmlinux.o | grep "skb_copy_bits"
? 64ab1c:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? 64abec:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? 64ac50:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? bb3768:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? bba0d0:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? bba2c8:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
? c579b0:?? ?94000000 ?? ?bl?? ?1102764 <skb_copy_bits>
0000000001102764 <skb_copy_bits>:

?1102798:?? ?54000d0b ?? ?b.lt?? ?1102938 <skb_copy_bits+0x1d4> ?// b.tstop
?11027b0:?? ?54000d4c ?? ?b.gt?? ?1102958 <skb_copy_bits+0x1f4>
?11027c4:?? ?340007e1 ?? ?cbz?? ?w1, 11028c0 <skb_copy_bits+0x15c>
?11027e0:?? ?14000008 ?? ?b?? ?1102800 <skb_copy_bits+0x9c>
?11027fc:?? ?5400060d ?? ?b.le?? ?11028bc <skb_copy_bits+0x158>
?1102808:?? ?5400056b ?? ?b.lt?? ?11028b4 <skb_copy_bits+0x150> ?// b.tstop
?1102824:?? ?54fffe0d ?? ?b.le?? ?11027e4 <skb_copy_bits+0x80>
?110284c:?? ?340001d3 ?? ?cbz?? ?w19, 1102884 <skb_copy_bits+0x120>
?1102890:?? ?54fffaa1 ?? ?b.ne?? ?11027e4 <skb_copy_bits+0x80> ?// b.any

?(3),aarch64-none-linux-gnu-readelf 查看skb_copy_bits

lark@ubuntu:~/Public/rk356x-linux$ ./prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-readelf -s kernel/vmlinux.o | grep "skb_copy_bits"
244692: 0000000001102764 ? 548 FUNC ? ?GLOBAL DEFAULT ? ?2 skb_copy_bits

?(4),aarch64-none-linux-gnu-addr2line解析地址0xffffffc00911a2e

lark@ubuntu:~/Public/rk356x-linux$ ./prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-addr2line -e kernel/vmlinux.o?-f -C ffffffc00911a2e4
skb_copy_bits
/home/lark/Public/rk356x-linux/kernel/net/core/skbuff.c:3610?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82586.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++自定義簡單的內存池

內存池簡述 在C的STL的容器中的容器如vector、deque等用的默認分配器(allocator)都是從直接從系統的堆中申請內存&#xff0c;用一點申請一點&#xff0c;效率極低。這就是設計內存池的意義&#xff0c;所謂內存池&#xff0c;就是一次性向系統申請一大片內存&#xff08;預分…

【極客日常】分享go開發中wire和interface配合的一些經驗

在先前一篇文章中&#xff0c;筆者給大家提到了go語言后端編程可以用wire依賴注入模塊去簡化單例服務的初始化&#xff0c;同時也可以解決服務單例之間復雜依賴的問題。但實事求是來講&#xff0c;用wire也是有一些學習成本的&#xff0c;wire在幫助解決復雜依賴的問題同時&…

20250605車充安服務器受木馬攻擊導致服務不可用

https://mp.weixin.qq.com/s/2JyxmDIDBa9_owNjIJ6UIg 因業務服務器受木馬攻擊&#xff0c;服務器網絡資源損耗&#xff0c;業務負載能力受損

web3-虛擬合約 vs 現實合同:權利、義務與資產的鏈上新秩序

web3-虛擬合約 vs 現實合同&#xff1a;權利、義務與資產的鏈上新秩序 一、智能合約vs真實世界合約 傳統合約&#xff1a;基礎要素 如下圖&#xff0c;現實世界的合約&#xff0c;會有一個條款&#xff0c;然后下面還有一個“Alice”的簽名 提出合約和接受合約&#xff1b; …

【面經分享】京東

線程池核心參數 7 個參數。 coreSize maxSize 阻塞隊列 時間 時間 線程工廠 拒絕策略 核心參數的話&#xff0c;有 coreSize、阻塞隊列、拒絕策略。 JVM 組成 內存上劃分&#xff1a; 線程私有&#xff1a;Java 虛擬機棧&#xff0c;本地方法棧、Tlab、程序計數器 …

工作流引擎-11-開源 BPM 項目 jbpm

工作流引擎系列 工作流引擎-00-流程引擎概覽 工作流引擎-01-Activiti 是領先的輕量級、以 Java 為中心的開源 BPMN 引擎&#xff0c;支持現實世界的流程自動化需求 工作流引擎-02-BPM OA ERP 區別和聯系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 優…

深度學習在非線性場景中的核心應用領域及向量/張量數據處理案例,結合工業、金融等領域的實際落地場景分析

一、工業場景&#xff1a;非線性缺陷檢測與預測 1. ?半導體晶圓缺陷檢測? ?問題?&#xff1a;微米級劃痕、顆粒污染等缺陷形態復雜&#xff0c;與正常紋理呈非線性關系。?解決方案?&#xff1a; ?輸入張量?&#xff1a;高分辨率晶圓圖像 → 三維張量 (Batch, Height,…

Python-線程同步

多線程 案例 說明&#xff1a; 唱歌方法 sing()跳舞方法 dance()啟用兩個線程調用主線程結束 代碼 # 導入線程模塊 import threading import timedef sing(name,age):time.sleep(2)print(唱歌者姓名&#xff1a; name &#xff0c;年齡&#xff1a; str(age))print(正在唱…

前端八股之JS的原型鏈

1.原型的定義 每一個對象從被創建開始就和另一個對象關聯&#xff0c;從另一個對象上繼承其屬性&#xff0c;這個另一個對象就是 原型。 當訪問一個對象的屬性時&#xff0c;先在對象的本身找&#xff0c;找不到就去對象的原型上找&#xff0c;如果還是找不到&#xff0c;就去…

kafka命令

kafka安裝先安裝zookeeper&#xff0c;jdk 確保jdk版本與kafka版本匹配&#xff1a; 先啟動zookeeper&#xff1a; # 啟動獨立安裝的zookeeper ./zkServer.sh start # 也可以自動kafka自帶的zookerper ./zookeeper-server-start.sh ../config/zookeeper.pr…

微服務面試(分布式事務、注冊中心、遠程調用、服務保護)

1.分布式事務 分布式事務&#xff0c;就是指不是在單個服務或單個數據庫架構下&#xff0c;產生的事務&#xff0c;例如&#xff1a; 跨數據源的分布式事務跨服務的分布式事務綜合情況 我們之前解決分布式事務問題是直接使用Seata框架的AT模式&#xff0c;但是解決分布式事務…

Linux --進程優先級

概念 什么是進程優先級&#xff0c;為什么需要進程優先級&#xff0c;怎么做到進程優先級這是本文需要解釋清楚的。 優先級的本質其實就是排隊&#xff0c;為了去爭奪有限的資源&#xff0c;比如cpu的調度。cpu資源分配的先后性就是指進程的優先級。優先級高的進程有優先執行的…

React 性能監控與錯誤上報

核心問題與技術挑戰 現代 React 應用隨著業務復雜度增加&#xff0c;性能問題和運行時錯誤日益成為影響用戶體驗的關鍵因素。沒有可靠的監控與錯誤上報機制&#xff0c;我們將陷入被動修復而非主動預防的困境。 性能指標體系與錯誤分類 關鍵性能指標定義 // performance-me…

芒果深度學習檢測:開啟農業新視界(貓臉碼客第230期)

芒果深度學習檢測&#xff1a;開啟農業新視界 一、引言 芒果作為熱帶水果中的“明星”&#xff0c;在全球水果市場占據著重要地位&#xff0c;擁有廣泛的市場需求和可觀的經濟價值。伴隨人們生活品質的提升&#xff0c;對芒果品質的要求也愈發嚴苛。芒果產業規模持續擴張&#…

PDF文件轉換之輸出指定頁到新的 PDF 文件

背景 一份 PDF 學習資料需要打印其中某幾頁&#xff0c;文件有幾百兆&#xff0c;看到 WPS 有PDF拆分功能&#xff0c;但是需要會員&#xff0c;開了一個月會員后完成了轉換。突然想到&#xff0c;會員到期后如果還要拆解的話&#xff0c;怎么辦呢&#xff1f;PDF 文件拆解功能…

【計網】SW、GBN、SR、TCP

目錄 三種可靠傳輸機制&#xff08;數據鏈路層&#xff09; 停止-等待&#xff08;Stop and Wait&#xff0c;SW&#xff09;協議 回退N幀&#xff08;Go-back-N&#xff0c;GBN&#xff09;協議 選擇重傳&#xff08;Selective Repeat&#xff0c;SR&#xff09;協議 傳輸…

Go的隱式接口機制

正確使用Interface 不要照使用C/Java等OOP語言中接口的方式去使用interface。 Go的Interface的抽象不僅可以用于dynamic-dispatch 在工程上、它最大的作用是&#xff1a;隔離實現和抽象、實現完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…

Async-profiler 內存采樣機制解析:從原理到實現

引言 在 Java 性能調優的工具箱中&#xff0c;async-profiler 是一款備受青睞的低開銷采樣分析器。它不僅能分析 CPU 熱點&#xff0c;還能精確追蹤內存分配情況。本文將深入探討 async-profiler 實現內存采樣的多種機制&#xff0c;結合代碼示例解析其工作原理。 為什么需要內…

Android 顏色百分比對照

本文就是簡單寫個demo,打印下顏色百分比的數值.方便以后使用. 1: 獲取透明色 具體的代碼如下: /*** 獲取透明色* param percent* param red* param green* param blue* return*/public static int getTransparentColor(int percent, int red, int green, int blue) {int alp…

MPLS-EVPN筆記詳述

目錄 EVPN簡介: EVPN路由: 基本四種EVPN路由 擴展: EVPN工作流程: 1.啟動階段: 2.流量轉發: 路由次序整理: 總結: EVPN基本術語: EVPN表項: EVPN支持的多種服務模式: 簡介: 1.Port Based: 簡介: 配置實現: 2.VLAN Based: 簡介: 配置實現: 3.VLAN Bundle: 簡…