Linux Kernel代码目录scripts下工具

1 bloat-o-meter

统计二进制函数、数据、只读数据的变化,可用于统计函数代码量。

效果如下:

1
2
3
4
5
6
7
8
9
10
11
hostname@linux:~/work/kernel/linux-nex/scripts> ./bloat-o-meter -c  test test2
add/remove: 1/0 grow/shrink: 0/0 up/down: 7/0 (7)
Function old new delta
test - 7 +7
Total: Before=355, After=362, chg +1.97%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Data old new delta
Total: Before=1, After=1, chg +0.00%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
RO Data old new delta
Total: Before=4, After=4, chg +0.00%

2 bootgraph.pl

启动时长统计

添加启动参数:initcall_debug printk.time=1

dmesg > tmp.txt

scripts/bootgraph.pl tmp.txt > tmp.svg

3 checkincludes.pl

检查是否包含重复头文件

4 checkstack.pl

内核栈大小检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
hostname@linux:~/work/kernel/linux-next> objdump -d vmlinux | scripts/checkstack.pl arm64
0xffff8000080128000 __bp_harden_el1_vectors [vmlinux]: 8320
0xffff8000080108000 vectors [vmlinux]: 5376
0xffff8000080758000 __bp_harden_hyp_vecs [vmlinux]: 1280
0xffff800008f8e8000 __kvm_nvhe___bp_harden_hyp_vecs [vmlinux]:1280
0xffff8000088422600 arm_smmu_atc_inv_domain.part.0 [vmlinux]:1168
0xffff8000088420d00 arm_smmu_sync_cd [vmlinux]: 1152
0xffff800008841ca00 __arm_smmu_tlb_inv_range [vmlinux]: 1136
0xffff8000088426700 arm_smmu_atc_inv_master.isra.0 [vmlinux]:1136
0xffff80000879dc800 gntdev_ioctl_grant_copy.constprop.0 [vmlinux]:1104
0xffff800008a763d00 hclge_dbg_dump_tm_pri [vmlinux]: 1104
0xffff80000832a0900 parse_elf_properties [vmlinux]: 1088
0xffff800008e189c00 __rtnl_newlink [vmlinux]: 1088
0xffff80000832c8440 parse_elf_properties.isra.0 [vmlinux]:1072
0xffff800008726c300 zynqmp_register_clocks.isra.0 [vmlinux]:1072
0xffff8000082c7f500 do_sys_poll [vmlinux]: 1056
0xffff8000087880800 update_balloon_stats [vmlinux]: 992
0xffff800008a583540 hns3_dbg_rx_bd_info [vmlinux]: 944
0xffff800008a75fb00 hclge_dbg_dump_vlan_offload_config [vmlinux]:928
0xffff8000082c74a00 do_select [vmlinux]: 912
0xffff800008510db00 HUF_readStats [vmlinux]: 912
0xffff8000088016f40 of_platform_serial_probe [vmlinux]: 912
0xffff800008a57bf40 hns3_dump_coal_info.isra.0 [vmlinux]:912
0xffff800008a76a300 hclge_dbg_dump_tm_qset [vmlinux]: 896

5 config

用于开启、关闭内核配置选项

1
2
3
4
5
6
7
hostname@linux:~/work/kernel/linux-next> scripts/config -e CONFIG_ARM64
hostname@linux:~/work/kernel/linux-next> scripts/config -s CONFIG_ARM64
y
hostname@linux:~/work/kernel/linux-next> scripts/config -d CONFIG_ARM64
hostname@linux:~/work/kernel/linux-next> scripts/config -s CONFIG_ARM64
n
hostname@linux:~/work/kernel/linux-next>

6 diffconfig

对比内核配置选项差异。效果如下:

1
2
3
hostname@linux:~/work/Linux_Kernel> scripts/diffconfig test/a_config test/b_config
+ACPI
+xxx

7 faddr2line

地址转换文件行

$ ./scripts/faddr2line ~/k/vmlinux meminfo_proc_show+0x5/0x568

meminfo_proc_show+0x5/0x568:

meminfo_proc_show at fs/proc/meminfo.c:27