用VSCODE看linux内核代码
前言
使用VSCODE在看內(nèi)核代碼時一定會出現(xiàn)如下幾種情況:
通過settings.json屏蔽的方式
該方式比較方便,但是需要自行修改屏蔽規(guī)則
"files.exclude": {/* 隱藏某種固定類型文件 */"**/.history": true,"**/.git": true,// "**/.svn": true,"**/.hg": true,"**/CVS": true,"**/.DS_Store": true,"**/*.ihex": true,//"**/*.o":true,"**/*.a": true,"**/*.su": true,"**/*.cmd": true,"**/*.order": true,"**/*.builtin": true,"**/*.gitignore": true,"**/*.tmp*": true,"**/*.mod.o": true,"**/*.mod.c": true,"**/built-in.o": true,"**/Module.symvers": true,// "kernel/kernel_sdk/arch": false, /* 這個文件夾包含了一個Kconfig文件,它用于設(shè)置這個目錄里的源代碼編譯所需的一系列設(shè)定*/// "kernel/kernel_sdk/block": false, /* 此文件夾包含塊設(shè)備驅(qū)動程序的代碼。塊設(shè)備是以數(shù)據(jù)塊方式接收和發(fā)送的數(shù)據(jù)的設(shè)備。數(shù)據(jù)塊都是一塊一塊的數(shù)據(jù)而不是持續(xù)的數(shù)據(jù)流。 */// "kernel/kernel_sdk/certs": true, /* 與證書相關(guān),不需要 */// "kernel/kernel_sdk/crypto": false, /* 這個文件夾包含許多加密算法的源代碼。如crc32、md5、sha1等 */// "kernel/kernel_sdk/Documentation": true, /* 此文件夾包含了內(nèi)核信息和其他許多文件信息的文本文檔 */// "kernel/kernel_sdk/drivers": false, /* 該目錄包含了驅(qū)動代碼,必須要的 */// "kernel/kernel_sdk/firmware": true, /* 包含了讓計算機讀取和理解從設(shè)備發(fā)來的信號的代碼 */// "kernel/kernel_sdk/fs": false, /* 文件系統(tǒng) */// "kernel/kernel_sdk/include": false, /* 包含了內(nèi)核所需的各種頭文件 */// "kernel/kernel_sdk/init": false, /* 包含了內(nèi)核啟動的處理代碼(INITiation)。main.c是內(nèi)核的核心文件,這是用來銜接所有的其他文件的源代碼主文件 */// "kernel/kernel_sdk/ipc": false, /* IPC代表進程間通訊。此文件夾中的代碼是作為內(nèi)核與進程之間的通信層。*/// "kernel/kernel_sdk/kernel": false, /* 文件夾中的代碼控制內(nèi)核本身 */// "kernel/kernel_sdk/lib": false, /* 這個文件夾包含了內(nèi)核需要引用的一系列內(nèi)核庫文件代碼。 */// "kernel/kernel_sdk/mm": false, /* 包含了內(nèi)存管理代碼。 */// "kernel/kernel_sdk/net": false, /* 包含了網(wǎng)絡(luò)協(xié)議代碼。這包括IPv6、AppleTalk、以太網(wǎng)、WiFi、藍牙等的代碼,此外處理網(wǎng)橋和DNS解析的代碼也在net目錄。 */// "kernel/kernel_sdk/samples": true, /* 此文件夾包含了程序示例和正在編寫中的模塊代碼 */// "kernel/kernel_sdk/scripts": true, /* 這個文件夾有內(nèi)核編譯所需的腳本。最好不要改變這個文件夾內(nèi)的任何東西 */// "kernel/kernel_sdk/security": false, /* 這個文件夾是有關(guān)內(nèi)核安全的代碼 */// "kernel/kernel_sdk/sound": true, /* 目前沒用上, 這個文件夾中包含了聲卡驅(qū)動。 */// "kernel/kernel_sdk/tools": true, /* 這個文件夾中包含了和內(nèi)核交互的工具 */// "kernel/kernel_sdk/usr": false, /* 這個文件夾中的代碼在內(nèi)核編譯完成后創(chuàng)建這些文件 */// "kernel/kernel_sdk/virt": true, /* 此文件夾包含了虛擬化代碼,它允許用戶一次運行多個操作系統(tǒng),不需要 */// /* 屏蔽排除不用的配置文件 */// "**/arch/arm/configs/[a-g]*": true,// "**/arch/arm/configs/[i-z]*": true,// "**/arch/arm/configs/imo*": true,// "**/arch/arm/configs/in*": true,// "**/arch/arm/configs/io*": true,// "**/arch/arm/configs/ix*": true,// /* 屏蔽掉不用的DTB文件,只保留h開頭的 */// "**/arch/arm/boot/dts/[a-g]*": true,// "**/arch/arm/boot/dts/[i-z]*": true,// "**/arch/arm/boot/dts/*.tmp": true,// /* 屏蔽不用的架構(gòu)相關(guān)的文件(只保留arm相關(guān)) */// "**/arch/alpha": true,// "**/arch/arc": true,// "**/arch/arm64": false,// "**/arch/avr32": true,// "**/arch/[b-z]*": true,// "**/arch/arm/plat*": true,// "**/arch/arm/mach-[a-g]*": true,// "**/arch/arm/mach-[i-z]*": true,// "**/arch/arm/mach-hi[a-j]*": true,// "**/arch/arm/mach-hi[l-z]*": true,// /* 隱藏kernel下無關(guān)緊要的文件夾 */// "**/kernel/debug": true,// "**/kernel/livepatch": true,// "**/kernel/gcov": true,// "**/kernel/trace": false,// /* 驅(qū)動 a */// "**/drivers/accessibility": true, /* 這些驅(qū)動提供支持一些輔助設(shè)備。在Linux 3.9.4中,這個文件夾中只有一個驅(qū)動就是盲文設(shè)備驅(qū)動 */// "**/drivers/acpi": true, /* 高級配置和電源接口(ACPI : Advanced Configuration and Power Interface)驅(qū)動用來管理電源使用。 */// "**/drivers/amba": false, /* 高級微控制器總線架構(gòu)(AMBA : Advanced Microcontroller Bus Architecture)是與片上系統(tǒng)(SoC)的管理和互連的協(xié)議 */// "**/drivers/android": true,// "**/drivers/ata": true, /* 串行ATA(SATA)是一種連接主機總線適配器到像硬盤那樣的存儲器的計算機總線接口。// 并行ATA(PATA)用于連接存儲設(shè)備,如硬盤驅(qū)動器,軟盤驅(qū)動器,光盤驅(qū)動器的標(biāo)準(zhǔn) */// "**/drivers/atm": true, /* 異步通信模式(ATM : Asynchronous Transfer Mode)是一種通信標(biāo)準(zhǔn)。// 這里有各種接到PCI橋的驅(qū)動(他們連接到PCI總線)和以太網(wǎng)控制器(控制以太網(wǎng)通信的集成電路芯片) */// "**/drivers/auxdisplay": true, /* 這個文件夾提供了三個驅(qū)動。LCD 幀緩存(framebuffer)驅(qū)動、LCD控制器驅(qū)動和一個LCD驅(qū)動。這些驅(qū)動用于管理液晶顯示器 */// /* 驅(qū)動 b */// "**/drivers/base": false, /* 這是個重要的目錄包含了固件、系統(tǒng)總線、虛擬化能力等基本的驅(qū)動 */// "**/drivers/bcma": true, /* 這些驅(qū)動用于使用基于AMBA協(xié)議的總線。AMBA是由博通公司開發(fā) */// "**/drivers/block": false, /* 這些驅(qū)動提供對塊設(shè)備的支持,像軟驅(qū)、SCSI磁帶、TCP網(wǎng)絡(luò)塊設(shè)備等等 */// "**/drivers/bluetooth": true, /* 藍牙驅(qū)動 */// "**/drivers/bus": true, /* 這個目錄包含了三個驅(qū)動。一個轉(zhuǎn)換ocp接口協(xié)議到scp協(xié)議。一個是設(shè)備間的互聯(lián)驅(qū)動,第三個是用于處理互聯(lián)中的錯誤處理 */// /* block 專門排除 */// "**/drivers/block/aoe": true,// "**/drivers/block/drbd": true,// "**/drivers/block/mtip32xx": true,// "**/drivers/block/paride": true,// "**/drivers/block/rsxx": true,// "**/drivers/block/xen-blkback": true,// "**/drivers/block/zram": true,// /* 隱藏沒用上的驅(qū)動 c */// "**/drivers/cdrom": true, /* 這個目錄包含兩個驅(qū)動。一個是cd-rom,包括DVD和CD的讀寫。第二個是gd-rom(只讀GB光盤),// GD光盤是1.2GB容量的光盤,這像一個更大的CD或者更小的DVD。GD通常用于世嘉游戲機中*/// "**/drivers/char": false, /* 字符設(shè)備驅(qū)動就在這里 */// "**/drivers/clk": false, /* 這些驅(qū)動用于系統(tǒng)時鐘 */// "**/drivers/clocksource": false, /* 這些驅(qū)動用于作為定時器的時鐘 */// "**/drivers/connector": true, /* 這些驅(qū)動使內(nèi)核知道當(dāng)進程fork并使用proc連接器更改UID(用戶ID)、GID(組ID)和SID(會話ID)。// 內(nèi)核需要知道什么時候進程fork(CPU中運行多個任務(wù))并執(zhí)行。否則,內(nèi)核可能會低效管理資源 */// "**/drivers/cpufreq": true, /* 這些驅(qū)動改變CPU的電源能耗 */// "**/drivers/cpuidle": true, /* 這些驅(qū)動用來管理空閑的CPU。一些系統(tǒng)使用多個CPU,其中一個驅(qū)動可以讓這些CPU負載相當(dāng) */// "**/drivers/crypto": false, /* 這些驅(qū)動提供加密功能 */// /* char 專門排除 */// "**/drivers/char/agp": true,// "**/drivers/char/ipmi": true,// "**/drivers/char/mwave": true,// "**/drivers/char/pcmcia": true,// "**/drivers/char/tpm": true,// "**/drivers/char/xilinx_hwicap": true,// "**/drivers/char/xillybus": true,// /* clk 專門排除 */// "**/drivers/clk/[a-b]*": true,// "**/drivers/clk/h8300": true,// "**/drivers/clk/[d-g]*": true,// "**/drivers/clk/[i-z]*": true,// /* crypto(加密) 專門排除 */// "**/drivers/crypto/hif*": true,// "**/drivers/crypto/[a-g]*": true,// "**/drivers/crypto/[i-z]*": true,// /* 驅(qū)動 d */// "**/drivers/dax": true,// "**/drivers/dca": true, /* 直接緩存訪問(DCA : Direct Cache Access)驅(qū)動允許內(nèi)核訪問CPU緩存。CPU緩存就像CPU內(nèi)置的RAM。// CPU緩存的速度比RAM更快。然而,CPU緩存的容量比RAM小得多。CPU在這個緩存系統(tǒng)上存儲了最重要的和執(zhí)行的代碼。 */// "**/drivers/devfreq": true, /* 這個驅(qū)動程序提供了一個通用的動態(tài)電壓和頻率調(diào)整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,// 可以根據(jù)需要改變CPU頻率來節(jié)約能源。這就是所謂的CPU節(jié)能。 */// "**/drivers/dio": true, /* 數(shù)字輸入/輸出(DIO :Digital Input/Output)總線驅(qū)動允許內(nèi)核可以使用DIO總線 */// "**/drivers/dma": false, /* 直接內(nèi)存訪問(DMA)驅(qū)動允許設(shè)備無需CPU直接訪問內(nèi)存。這減少了CPU的負載。 */// "**/drivers/dma-buf": true,// /* dma 專門排除 */// "**/drivers/dma/bestcomm": true,// "**/drivers/dma/dw": true,// "**/drivers/dma/hsu": true,// "**/drivers/dma/ioat": true,// "**/drivers/dma/ipu": true,// "**/drivers/dma/ppc4xx": true,// "**/drivers/dma/qcom": true,// "**/drivers/dma/sh": true,// "**/drivers/dma/xilinx": true,// /* 驅(qū)動 e */// "**/drivers/edac": true, /* 錯誤檢測和校正( Error Detection And Correction)驅(qū)動幫助減少和糾正錯誤 */// "**/drivers/eisa": true, /* 擴展工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)總線(Extended Industry Standard Architecture)驅(qū)動提供內(nèi)核對EISA總線的支持 */// "**/drivers/extcon": true, /* 外部連接器(EXTernal CONnectors)驅(qū)動用于檢測設(shè)備插入時的變化。例如,extcon會檢測用戶是否插入了USB驅(qū)動器 */// /* 驅(qū)動 f */// "**/drivers/firewire": true, /* 這些驅(qū)動用于控制蘋果制造的類似于USB的火線設(shè)備 */// "**/drivers/firmware": true, /* 這些驅(qū)動用于和像BIOS(計算機的基本輸入輸出系統(tǒng)固件)這樣的設(shè)備的固件通信 */// "**/drivers/fmc": true, /* 一種接口 */// "**/drivers/fpga": true, /* 一種接口 */// /* 驅(qū)動 g */// "**/drivers/gpio": false, /* 通用輸入/輸出(GPIO :General Purpose Input/Output)是可由用戶控制行為的芯片的管腳 */// "**/drivers/gpu": true, /* 這些驅(qū)動控制VGA、GPU和直接渲染管理 */// /* 驅(qū)動 h */// "**/drivers/hid": false, /* 這驅(qū)動用于對USB人機界面設(shè)備的支持 */// "**/drivers/hsi": true, /* 這個驅(qū)動用于內(nèi)核訪問像Nokia N900這樣的蜂窩式調(diào)制解調(diào)器 */// "**/drivers/hv": true, /* 這個驅(qū)動用于提供Linux中的鍵值對(KVP :Key Value Pair)功能 */// "**/drivers/hwmon": false, /* 硬件監(jiān)控驅(qū)動用于內(nèi)核讀取硬件傳感器上的信息。比如,CPU上有個溫度傳感器。那么內(nèi)核就可以追蹤溫度的變化并相應(yīng)地調(diào)節(jié)風(fēng)扇的速度。 */// "**/drivers/hwspinlock": true, /* 硬件轉(zhuǎn)鎖驅(qū)動允許系統(tǒng)同時使用兩個或者更多的處理器,或使用一個處理器上的兩個或更多的核心。 */// "**/drivers/hwtracing": true,// /* 驅(qū)動 i */// "**/drivers/i2c": false,// "**/drivers/ide": true, /* 這些驅(qū)動用來處理像CDROM和硬盤這些PATA/IDE設(shè)備 */// "**/drivers/idle": true, /* 這個驅(qū)動用來管理Intel處理器的空閑功能 */// "**/drivers/iio": true, /* 工業(yè)I/O核心驅(qū)動程序用來處理數(shù)模轉(zhuǎn)換器或模數(shù)轉(zhuǎn)換器 */// "**/drivers/infiniband": true, /* Infiniband是在企業(yè)數(shù)據(jù)中心和一些超級計算機中使用的一種高性能的端口。這個目錄中的驅(qū)動用來支持Infiniband硬件 */// "**/drivers/input": false, /* 這里包含了很多驅(qū)動,這些驅(qū)動都用于輸入處理,包括游戲桿、鼠標(biāo)、鍵盤、遙控器、觸控、耳麥按鈕和許多其他的驅(qū)動 */// "**/drivers/iommu": true, /* 輸入/輸出內(nèi)存管理單元(IOMMU :Input/Output Memory Management Unit)驅(qū)動用來管理內(nèi)存管理單元中的IOMMU。// IOMMU連接DMA IO總線到內(nèi)存上。IOMMU是設(shè)備在沒有CPU幫助下直接訪問內(nèi)存的橋梁。這有助于減少處理器的負載 */// "**/drivers/ipack": true, /* Ipack代表的是IndustryPack。 這個驅(qū)動是一個虛擬總線,允許在載體和夾板之間操作 */// "**/drivers/irqchip": false, /* 這些驅(qū)動程序允許硬件的中斷請求(IRQ)發(fā)送到處理器 */// "**/drivers/isdn": true, /* 這些驅(qū)動用于支持綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN),這是用于同步數(shù)字傳輸語音、視頻、數(shù)據(jù)和其他網(wǎng)絡(luò)服務(wù)使用傳統(tǒng)電話網(wǎng)絡(luò)的電路的通信標(biāo)準(zhǔn) */// /* i2c 專門排除 */// "**/drivers/i2c/busses/i2c-[a-c]*": true,// "**/drivers/i2c/busses/i2c-[e-g]*": true,// "**/drivers/i2c/busses/i2c-[i-z]*": true,// /* input 專門排除 */// "**/drivers/input/gameport": true,// "**/drivers/input/joystick": true,// "**/drivers/input/keyboard": true,// "**/drivers/input/misc": true,// "**/drivers/input/mouse": true,// "**/drivers/input/rmi4": true,// "**/drivers/input/tablet": true,// "**/drivers/input/touchscreen": true,// /* 驅(qū)動 l */// "**/drivers/leds": true, /* 用于LED的驅(qū)動 */// "**/drivers/lguest": true, /* 一種虛擬方案,lguest用于管理客戶機系統(tǒng)的中斷。*/// "**/drivers/lightnvm": true,// /* 驅(qū)動 m */// "**/drivers/macintosh": true, /* 蘋果設(shè)備的驅(qū)動在這個文件夾里 */// "**/drivers/mailbox": true, /* 這個文件夾(pl320-pci)中的驅(qū)動用于管理郵箱系統(tǒng)的連接 */// "**/drivers/mcb": true,// "**/drivers/md": true, /* 多設(shè)備驅(qū)動用于支持磁盤陣列,一種多塊硬盤間共享或復(fù)制數(shù)據(jù)的系統(tǒng) */// "**/drivers/memstick": true, /* 這個驅(qū)動用于支持Sony記憶棒 */// "**/drivers/message": true, /* 這些驅(qū)動用于運行LSI Fusion MPT(一種消息傳遞技術(shù))固件的LSI PCI芯片/適配器 */// "**/drivers/misc": true, /* 這個目錄包含了不適合在其他目錄的各種驅(qū)動。就像光線傳感器驅(qū)動 */// "**/drivers/media": true, /* 媒體驅(qū)動提供了對收音機、調(diào)諧器、視頻捕捉卡、DVB標(biāo)準(zhǔn)的數(shù)字電視等等的支持。驅(qū)動還提供了對不同通過USB或火線端口插入的多媒體設(shè)備的支持 */// "**/drivers/memory": true, /* 支持內(nèi)存的驅(qū)動 */// "**/drivers/mfd": false, /* 多用途設(shè)備(MFD)驅(qū)動提供了對可以提供諸如電子郵件、傳真、復(fù)印機、掃描儀、打印機功能的多用途設(shè)備的支持 */// "**/drivers/mmc": false, /* MMC卡驅(qū)動用于處理用于MMC標(biāo)準(zhǔn)的閃存卡 */// "**/drivers/mtd": false, /* 內(nèi)存技術(shù)設(shè)備(MTD :Memory technology devices) */// /* 驅(qū)動 n */// "**/drivers/net": false, /* 網(wǎng)絡(luò)驅(qū)動提供像AppleTalk、TCP和其他的網(wǎng)絡(luò)協(xié)議。這些驅(qū)動也提供對調(diào)制解調(diào)器、USB 2.0的網(wǎng)絡(luò)設(shè)備、和射頻設(shè)備的支持 */// "**/drivers/nfc": true, /* 這個驅(qū)動是德州儀器的共享傳輸層之間的接口和NCI核心 */// "**/drivers/ntb": true, /* 不透明的橋接驅(qū)動提供了在PCIe系統(tǒng)的不透明橋接。PCIe是一種高速擴展總線標(biāo)準(zhǔn) */// "**/drivers/nubus": true, /* NuBus是一種32位并行計算總線。用于支持蘋果設(shè)備 */// "**/drivers/nvdimm": true,// "**/drivers/nvme": true,// "**/drivers/nvmem": true,// /* net 專門排除 */// "**/drivers/net/arcnet": true,// "**/drivers/net/bonding": true,// "**/drivers/net/cris": true,// // "**/drivers/net/ethernet/[0-9]*": true,// // "**/drivers/net/ethernet/[a-g]*": true,// // "**/drivers/net/ethernet/[i-z]*": true,// "**/drivers/net/fddi": true,// "**/drivers/net/fjes": true,// "**/drivers/net/hamradio": true,// "**/drivers/net/hippi": true,// "**/drivers/net/hyperv": true,// "**/drivers/net/ieee802154": true,// "**/drivers/net/ipvlan": true,// "**/drivers/net/plip": true,// "**/drivers/net/team": true,// "**/drivers/net/vmxnet3": true,// "**/drivers/net/wan": true,// "**/drivers/net/wireless": true,// "**/drivers/net/xen-netback": true,// /* 驅(qū)動 o */// "**/drivers/of": false, /* 此驅(qū)動程序提供設(shè)備樹中創(chuàng)建、訪問和解釋程序的OF助手。設(shè)備樹是一種數(shù)據(jù)結(jié)構(gòu),用于描述硬件 */// "**/drivers/oprofile": true, /* 這個驅(qū)動用于從驅(qū)動到用戶空間進程(運行在用戶態(tài)下的應(yīng)用)評測整個系統(tǒng)。這幫助開發(fā)人員找到性能問題 */// /* 驅(qū)動 p */// "**/drivers/parisc": true, /* 這些驅(qū)動用于HP生產(chǎn)的PA-RISC架構(gòu)設(shè)備。PA-RISC是一種特殊指令集的處理器 */// "**/drivers/parport": true, /* 并口驅(qū)動提供了Linux下的并口支持 */// "**/drivers/pci": true, /* 這些驅(qū)動提供了PCI總線服務(wù) */// "**/drivers/pinctrl": true, /* 這些驅(qū)動用來處理引腳控制設(shè)備。引腳控制器可以禁用或啟用I/O設(shè)備 */// "**/drivers/pcmcia": true, /* 這些是筆記本的pc卡驅(qū)動 */// "**/drivers/platform": true, /* 這個文件夾包含了不同的計算機平臺的驅(qū)動像Acer、Dell、Toshiba、IBM、Intel、Chrombooks等等 */// "**/drivers/pnp": true, /* 即插即用驅(qū)動允許用戶在插入一個像USB的設(shè)備后可以立即使用而不必手動配置設(shè)備 */// "**/drivers/power": false, /* 電源驅(qū)動使內(nèi)核可以測量電池電量,檢測充電器和進行電源管理 */// "**/drivers/powercap": true,// "**/drivers/pps": true, /* Pulse-Per-Second驅(qū)動用來控制電流脈沖速率。這用于計時 */// "**/drivers/ptp": true, /* 圖片傳輸協(xié)議(PTP)驅(qū)動支持一種從數(shù)碼相機中傳輸圖片的協(xié)議 */// "**/drivers/ps3": true, /* 這是Sony的游戲控制臺驅(qū)動- PlayStation3 */// "**/drivers/pwm": false, /* 脈寬調(diào)制(PWM)驅(qū)動用于控制設(shè)備的電流脈沖 */// /* 驅(qū)動 r */// "**/drivers/rapidio": true, /* RapidIO驅(qū)動用于管理RapidIO架構(gòu),它是一種高性能分組交換,用于電路板上交互芯片的交互技術(shù),也用于互相使用底板的電路板 */// "**/drivers/ras": true,// "**/drivers/regulator": true, /* 一種電源管理芯片的驅(qū)動 */// "**/drivers/remoteproc": true, /* 這些驅(qū)動用來管理遠程處理器 */// "**/drivers/rpmsg": true, /* 這個驅(qū)動用來控制支持大量驅(qū)動的遠程處理器通訊總線(rpmsg)。這些總線提供消息傳遞設(shè)施,促進客戶端驅(qū)動程序編寫自己的連接協(xié)議消息 */// "**/drivers/reset": false,// "**/drivers/rtc": false,// /* 驅(qū)動 s */// "**/drivers/s390": true, /* 用于31/32位的大型機架構(gòu)的驅(qū)動 */// "**/drivers/sbus": true, /* 用于管理基于SPARC的總線驅(qū)動 */// "**/drivers/scsi": false, /* 允許內(nèi)核使用SCSI標(biāo)準(zhǔn)外圍設(shè)備 */// "**/drivers/sfi": true, /* 簡單固件接口(SFI)驅(qū)動允許固件發(fā)送信息表給操作系統(tǒng)。這些表的數(shù)據(jù)稱為SFI表 */// "**/drivers/sh": true, /* 該驅(qū)動用于支持SuperHway總線 */// "**/drivers/sn": true, /* 該驅(qū)動用于支持IOC3串口 */// "**/drivers/spi": false,// "**/drivers/soc": true,// "**/drivers/spmi": true,// "**/drivers/ssb": true, /* ssb(Sonics Silicon Backplane)驅(qū)動提供對在不同博通芯片和嵌入式設(shè)備上使用的迷你總線的支持 */// "**/drivers/staging": true, /* staging tree建立之目的是用來放置一些未充分測試或者因為一些其他原因未能進入內(nèi)核的新增驅(qū)動程序和新增文件系統(tǒng) */// /* scsi 專門排除 */// "**/drivers/scsi/aacraid": true,// "**/drivers/scsi/aic*": true,// "**/drivers/scsi/arcmsr": true,// "**/drivers/scsi/arm": true,// "**/drivers/scsi/be2iscsi": true,// "**/drivers/scsi/bfa": true,// "**/drivers/scsi/bnx*": true,// "**/drivers/scsi/csiostor": true,// "**/drivers/scsi/cx*": true,// "**/drivers/scsi/device_handler": true,// "**/drivers/scsi/dpt": true,// "**/drivers/scsi/esas2r": true,// "**/drivers/scsi/fcoe": true,// "**/drivers/scsi/fnic": true,// "**/drivers/scsi/hisi_sas": true,// "**/drivers/scsi/ibmvscsi": true,// "**/drivers/scsi/ibmvscsi_tgt": true,// "**/drivers/scsi/isci": true,// "**/drivers/scsi/libfc": true,// "**/drivers/scsi/libsas": true,// "**/drivers/scsi/lpfc": true,// "**/drivers/scsi/megaraid": true,// "**/drivers/scsi/mpt3sas": true,// "**/drivers/scsi/mvsas": true,// "**/drivers/scsi/osd": true,// "**/drivers/scsi/pcmcia": true,// "**/drivers/scsi/pm8001": true,// "**/drivers/scsi/qla*": true,// "**/drivers/scsi/smartpqi": true,// "**/drivers/scsi/snic": true,// "**/drivers/scsi/sym53c8xx_2": true,// "**/drivers/scsi/ufs": true,// // "**/drivers/scsi/[0-9]*":true,// /* spi 專門排除 */// "**/drivers/spi/spi-[a-g]*": true,// "**/drivers/spi/spi-[i-z]*": true,// /* 驅(qū)動 t */// "**/drivers/target": true, /* SCSI設(shè)備驅(qū)動 */// "**/drivers/tc": true, /* 這些驅(qū)動用于TURBOchannel,TURBOchannel是數(shù)字設(shè)備公司開發(fā)的32位開放總線。這主要用于DEC工作站 */// "**/drivers/thermal": true, /* Linux Thermal 是 Linux 系統(tǒng)下溫度控制相關(guān)的模塊,主要用來控制系統(tǒng)運行過程中芯片產(chǎn)生的熱量 */// "**/drivers/tty": false, /* tty驅(qū)動用于管理物理終端連接 */// "**/drivers/thunderbolt": true,// /* 驅(qū)動 u-v-w-x */// "**/drivers/uio": true, /* 該驅(qū)動允許用戶編譯運行在用戶空間而不是內(nèi)核空間的驅(qū)動。這使用戶驅(qū)動不會導(dǎo)致內(nèi)核崩潰 */// "**/drivers/usb": false,// "**/drivers/uwb": true, /* 室內(nèi)定位 */// "**/drivers/vdio": false, /* 這是用來管理顯卡和監(jiān)視器的視頻驅(qū)動 */// "**/drivers/vme": true, /* WMEbus最初是為摩托羅拉68000系列處理器開發(fā)的總線標(biāo)準(zhǔn) */// "**/drivers/vfio": true, /* 允許設(shè)備訪問用戶空間的VFIO驅(qū)動 */// "**/drivers/vhost": true, /* 這是用于宿主內(nèi)核中的virtio服務(wù)器驅(qū)動。用于虛擬化中 */// "**/drivers/virt*": true, /* 這些驅(qū)動用來虛擬化 */// "**/drivers/vlynq*": true, /* 這個驅(qū)動控制著由德州儀器開發(fā)的專有接口。這些都是寬帶產(chǎn)品,像WLAN和調(diào)制解調(diào)器,VOIP處理器,音頻和數(shù)字媒體信號處理芯片 */// "**/drivers/w1": true, /* 這些驅(qū)動用來控制one-wire總線。 */// "**/drivers/xen": true, /* 該驅(qū)動是Xen管理程序系統(tǒng)。這是個允許用戶運行多個操作系統(tǒng)在一臺計算機的軟件或硬件。// 這意味著xen的代碼將允許用戶在同一時間的一臺計算機上運行兩個或更多的Linux系統(tǒng)。// 用戶也可以在Linux上運行Windows、Solaris、FreeBSD、或其他操作系統(tǒng) */// "**/drivers/zorro": true, /* 該驅(qū)動提供Zorro Amiga總線支持 */// /* usb 專門排除 */// "**/drivers/usb/atm": true,// "**/drivers/usb/c67x00": true,// "**/drivers/usb/chipidea": true,// "**/drivers/usb/isp1730": true,// "**/drivers/usb/musb": true,// "**/drivers/usb/renesas_usbhs": true,// "**/drivers/usb/wusbcore": true,// /* video 專門排除 */// "**/drivers/video/backlight": true,// "**/drivers/video/logo": true,// "**/drivers/video/fbdev/aty": true,// "**/drivers/video/fbdev/geode": true,// "**/drivers/video/fbdev/i810": true,// "**/drivers/video/fbdev/intelfb": true,// "**/drivers/video/fbdev/kyro": true,// "**/drivers/video/fbdev/matrox": true,// "**/drivers/video/fbdev/mb862xx": true,// "**/drivers/video/fbdev/mbx": true,// "**/drivers/video/fbdev/mmp": true,// "**/drivers/video/fbdev/nvidia": true,// "**/drivers/video/fbdev/omap*": true,// "**/drivers/video/fbdev/riva": true,// "**/drivers/video/fbdev/savage": true,// "**/drivers/video/fbdev/sis": true,// "**/drivers/video/fbdev/vermilion": true,// "**/drivers/video/fbdev/via": true,// /* 屏蔽占時不用的文件系統(tǒng) */// "**/fs/9p": true,// "**/fs/adfs": true,// "**/fs/affs": true,// "**/fs/afs": true,// "**/fs/autofs*": true,// "**/fs/befs*": true,// "**/fs/bfs*": true,// "**/fs/btrfs*": true,// "**/fs/cache*": true,// "**/fs/ceph": true,// "**/fs/coda": true,// "**/fs/cramfs": true,// "**/fs/dlm": true,// "**/fs/ecryptfs": true,// "**/fs/efivarfs": true,// "**/fs/efs": true,// "**/fs/exofs": true,// "**/fs/f2fs": true,// "**/fs/freevxfs": true,// "**/fs/gfs2": true,// "**/fs/hfs*": true,// "**/fs/hostfs": true,// "**/fs/hpfs": true,// "**/fs/hugetlbfs": true,// "**/fs/isofs": true,// "**/fs/longfs": true,// "**/fs/minix": true,// "**/fs/ncpfs": true,// "**/fs/nilfs2": true,// "**/fs/nls": true,// "**/fs/ntfs": true,// "**/fs/ocfs*": true,// "**/fs/omfs": true,// "**/fs/openpromfs": true,// "**/fs/orangefs": true,// "**/fs/overlayfs": true,// "**/fs/pstore": true,// "**/fs/qnx*": true,// "**/fs/reiserfs": true,// "**/fs/romfs": true,// "**/fs/squashfs": true,// "**/fs/sysv": true,// "**/fs/tracefs": true,// "**/fs/udf": true,// "**/fs/ufs": true,// // "**/fs/xfs": true,// /* 屏蔽占時不用的net文件夾 */// "**/net/6lowpan": true,// "**/net/9p": true,// "**/net/appletalk": true,// "**/net/atm": true,// "**/net/ax25": true,// "**/net/batman-adv": true,// "**/net/bluetooth": true,// "**/net/caif": true,// "**/net/can": true,// "**/net/ceph": true,// "**/net/dab": true,// "**/net/dccp": true,// "**/net/decnet": true,// "**/net/dsa": true,// "**/net/ipx": true,// "**/net/irda": true,// "**/net/iucv": true,// "**/net/kcm": true,// "**/net/l2tp": true,// "**/net/l3mdev": true,// "**/net/lapd": true,// "**/net/mpls": true,// "**/net/ncsi": true,// "**/net/nfs": true,// "**/net/openvswitch": true,// "**/net/phonet": true,// "**/net/qrtr": true,// "**/net/rds": true,// "**/net/rfkill": true,// "**/net/rose": true,// "**/net/rxrpc": true,// "**/net/phtipconet": true,// "**/net/vmw-vsock": true,// "**/net/wimax": true,// "**/net/x25": true,// /* 額外新增 */// "**/arch/unicore32/mm":true,},"search.exclude": {/* 該選項專門為了去掉搜索文件 */".history": true,"**/node_modules": true,"**/bower_components": true,"**/*.o": true,"**/*.su": true,"**/*.cmd": true,/* 隱藏kernel下無關(guān)緊要的文件夾 */"**/Documentation": true,"**/firmware": true,"**/samples": true,"**/sound": true, /* 目前沒用上 *//* 屏蔽不用的架構(gòu)相關(guān)的文件 */"**/arch/alpha": true,"**/arch/arc": true,"**/arch/arm64": true,"**/arch/avr32": true,"**/arch/[b-z]*": true,"**/arch/arm/plat*": true,"**/arch/arm/mach-[a-g]*": true,"**/arch/arm/mach-[i-z]*": true,"**/arch/arm/mach-hi[a-j]*": true,"**/arch/arm/mach-hi[l-z]*": true,/* 屏蔽排除不用的配置文件 */"**/arch/arm/configs/[a-g]*": true,"**/arch/arm/configs/[i-z]*": true,"**/arch/arm/configs/imo*": true,"**/arch/arm/configs/in*": true,"**/arch/arm/configs/io*": true,"**/arch/arm/configs/ix*": true,/* 屏蔽掉不用的DTB文件 */"**/arch/arm/boot/dts/[a-g]*": true,"**/arch/arm/boot/dts/[i-z]*": true,"**/arch/arm/boot/dts/*.tmp": true,"**/.history": true,"**/.git": true,// "**/.svn": true,"**/.hg": true,"**/CVS": true,"**/.DS_Store": true,"**/*.ihex": true,//"**/*.o":true,"**/*.a": true,"**/*.order": true,"**/*.builtin": true,"**/*.gitignore": true,"**/*.tmp*": true,"**/*.mod.o": true,"**/*.mod.c": true,"**/built-in.o": true,"**/Module.symvers": true,},通過make編譯的方式
其實本質(zhì)上是因為內(nèi)核代碼太多導(dǎo)致,而實際上我們在看內(nèi)核代碼時很多是不需要的。
因此作為VSCODE 單推人,是時候解決如上問題了,思路就是make工具在make源碼時會自動根據(jù)makefile找到需要的文件,所以只要能夠修改make,只把需要的文件找出來,然后再搞個腳本,把需要的文件拷出來創(chuàng)建工作區(qū),然后再看代碼。就能解決上述各種問題
如下為make源碼下載地址。我這里使用的make4.4最新版源碼進行修改
http://ftp.gnu.org/gnu/make/
make代碼修改
1.修改make-4.4\src\file.c 在 enter_file 函數(shù)處修改
#include <sys/file.h> int gol_show = 0; char clist[256]={0}; char hlist[256]={0};int put_clist(const char *name) {char pwdbuf[256];char *pwd = NULL;FILE *fp; if(!name)return -1;if(clist[0]==0){pwd = getcwd(pwdbuf, 240);if (!pwd)return -1;sprintf(clist, "%s/clist", pwd);printf("clist:%s\n", clist);}fp = fopen(clist, "a+");fprintf(fp, "%s\n", name);fflush (fp);fclose (fp);return 0; }int put_hlist(const char *name) {char pwdbuf[256];char *pwd = NULL;FILE *fp; if(!name)return -1;if(hlist[0]==0){pwd = getcwd(pwdbuf, 240);if (!pwd)return -1;sprintf(hlist, "%s/hlist", pwd);printf("hlist:%s\n", hlist);}fp = fopen(hlist, "a+");fprintf(fp, "%s\n", name);fflush (fp);fclose (fp);return 0; }struct file *enter_file(const char *name) {struct file *f;struct file *new;struct file **file_slot;struct file file_key;char *tmp = NULL;int len = 0, tlen = 0;assert (*name != '\0');assert (! verify_flag || strcache_iscached (name));#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)if (*name != '.'){const char *n;char *lname, *ln;lname = xstrdup (name);for (n = name, ln = lname; *n != '\0'; ++n, ++ln)if (isupper ((unsigned char)*n))*ln = tolower ((unsigned char)*n);else*ln = *n;*ln = '\0';name = strcache_add (lname);free (lname);} #endiffile_key.hname = name;file_slot = (struct file **) hash_find_slot (&files, &file_key);f = *file_slot;if (! HASH_VACANT (f) && !f->double_colon){f->builtin = 0;return f;}new = xcalloc (sizeof (struct file));new->name = new->hname = name;new->update_status = us_none;if (HASH_VACANT (f)){new->last = new;hash_insert_at (&files, new, file_slot);if(gol_show){if(strstr(name, ".c")) {printf("gy make get c:%s\n", name);put_clist(name);} }len = strstr(name, ".h"); if (len){tlen = strlen(name);if(tlen!=2){tmp = name + tlen - 2;if(strncmp(tmp,".h",2)==0){if(!strstr(name, "%") && !strstr(name, "*")){printf("gy make get inc:%s\n", name);put_hlist(name);}} }}len = strstr(name, ".S"); if (len){tlen = strlen(name);if(tlen!=2){tmp = name + tlen - 2;if(strncmp(tmp,".S",2)==0){if(!strstr(name, "%") && !strstr(name, "*")){printf("gy make get ASM.S:%s\n", name);put_hlist(name);}} }}len = strstr(name, ".s"); if (len){tlen = strlen(name);if(tlen!=2){tmp = name + tlen - 2;if(strncmp(tmp,".s",2)==0){if(!strstr(name, "%") && !strstr(name, "*")){printf("gy make get asm.s:%s\n", name);put_hlist(name);}} }} }else{/* There is already a double-colon entry for this file. */new->double_colon = f;f->last->prev = new;f->last = new;}return new; }2.修改make-4.4\src\implicit.c 在 pattern_search 函數(shù)處修改
208 extern int gol_show; 209 static int pattern_search(struct file *file, int archive, unsigned int depth, unsigned int recursions, 210 int allow_compat_rules)783 DBS (DB_IMPLICIT, 784 (is_rule 785 ? _("Trying rule prerequisite '%s'.\n") 786 : _("Trying implicit prerequisite '%s'.\n"), d->name)); 787 788 df = lookup_file (d->name); 789 gol_show = 1; /* 在此處增加 */ 790 791 if (df && df->is_explicit) 792 pat->is_explicit = 1;make編譯
關(guān)于make的編譯,我這里使用的arm,因此進行如下配置,配置完成直接make即可編譯出make工具
./configure -target=arm-linux -program-prefix=arm-linux-
編譯參數(shù)說明:
注: -target=arm-linux 意思是說目標(biāo)平臺是運行于ARM體系結(jié)構(gòu)的linux內(nèi)核;
-program-prefix=arm-linux- 是指生成的可執(zhí)行文件的前綴,比如arm-linux-gdb,
-prefix 是指生成的可執(zhí)行文件安裝在哪個目錄,這個目錄需要根據(jù)實際情況作選擇。
如果該目錄不存在,會自動創(chuàng)建,當(dāng)然,權(quán)限足夠的話。
腳本代碼
然后是腳本:
#!/bin/shDist="" CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')#shell param parse if [ $# -lt 1 ]; thenecho "Please makesure Dist and Source" elseDist=$1 fifunction trim_path() {local _path="${1}"# 如果路徑最后有 '/',需要去掉,否則無法獲取絕對路徑while true; doif [[ ${_path} =~ /$ ]]; then_path=${_path:0:-1}elsebreakfidoneecho "${_path}" }function cpfun() {cat $1 | awk -F/ '{for ( i=1;i<NF;i++ ){ #NF表示字段數(shù)if (i == 1){sky = "." $i; #第一次循環(huán)加上 .}else{sky = sky "/" $i;}}print sky; #輸出路徑sky=""; #初始化路徑,準(zhǔn)備下一次循環(huán)}' | xargs mkdir -psum=$(cat $1 | wc -l)mod=$(expr $sum / 25)str='#'ch=('|' '\' '-' '/')i=0j=0echo "文件總數(shù)為:$sum"while read rows; doln "$Dist$rows" ./$rows >/dev/null 2>&1let j++if [ $mod = $j ]; thenj=0str+='#'let i++let index=i%4fiprintf "[%-26s][%d%%][%c]\r" $str $(($i * 4)) ${ch[$index]}done <$1printf "\n" }function get_abspath() {local _path="${1}"# 對于相對路徑,把他的絕對路徑補齊if [[ ${_path} =~ ^/ ]]; then_path=${_path}else_path="$(pwd)/${_path}"fi_path=$(trim_path ${_path})while [ -h "${_path}" ]; dolocal _topath=$(ls -ld ${_path} | awk '{print $NF}')local _frompath=$(ls -ld ${_path} | awk '{print $(NF-2)}')if [[ ${_topath} =~ ^/ ]]; then_path=${_topath}else_path="$(dirname ${_frompath})/${_topath}"fi_path=$(trim_path ${_path})doneif [ -e ${_path}/hlist_new ]; thenrm ${_path}/hlist_newfiif [ -e ${_path}/clist_new ]; thenrm ${_path}/clist_newfiif [ -e ${_path}/hlist ]; thensort -u ${_path}/hlist >${_path}/hlist_newmv ${_path}/hlist_new ${_path}/hlist_tmpwhile read line; doecho /$linedone <${_path}/hlist_tmp >>${_path}/hlist_newrm ${_path}/hlist_tmpecho -n "正在拷貝所需.h文件:"cpfun ${_path}/hlist_newelseecho "not find hlist!"exit 1fiif [ -e ${_path}/clist ]; thenwhile read line; doecho /$linedone <${_path}/clist >>${_path}/clist_newecho -n "正在拷貝所需.c文件:"cpfun ${_path}/clist_newelseecho "not find clist!"exit 1fi }function make_fun() {if [ -e ${Dist}/hlist ]; thenrm ${Dist}/hlistfiif [ -e ${Dist}/clist ]; thenrm ${Dist}/clistfi./make -j$CPU_JOB_NUM -C ${Dist}/ uImage }#刪除kernel結(jié)構(gòu)下的全部目錄文件 function del_dir() {if [ -d arch/ ]; thenrm -rf arch/fiif [ -d block/ ]; thenrm -rf block/fiif [ -d certs/ ]; thenrm -rf certs/fiif [ -d crypto/ ]; thenrm -rf crypto/fiif [ -d drivers/ ]; thenrm -rf drivers/fiif [ -d fs/ ]; thenrm -rf fs/fiif [ -d include/ ]; thenrm -rf include/fiif [ -d init/ ]; thenrm -rf init/fiif [ -d ipc/ ]; thenrm -rf ipc/fiif [ -d kernel/ ]; thenrm -rf kernel/fiif [ -d lib/ ]; thenrm -rf lib/fiif [ -d mm/ ]; thenrm -rf mm/fiif [ -d net/ ]; thenrm -rf net/fiif [ -d samples/ ]; thenrm -rf samples/fiif [ -d scripts/ ]; thenrm -rf scripts/fiif [ -d security/ ]; thenrm -rf security/fiif [ -d sound/ ]; thenrm -rf sound/fiif [ -d tools/ ]; thenrm -rf tools/fiif [ -d usr/ ]; thenrm -rf usr/fiif [ -d virt/ ]; thenrm -rf virt/fi }del_dir make_fun get_abspath ${1}使用方法:
最終效果
正在拷貝所需.h文件:文件總數(shù)為:3660
[##########################][100%][]
正在拷貝所需.c文件:文件總數(shù)為:2229
[##########################][100%][]
如下為未處理前
如下為處理后
總結(jié)
以上是生活随笔為你收集整理的用VSCODE看linux内核代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高等数学复习之二重积分
- 下一篇: linux qt 字体哪个好,QT的的字