编辑:原来unifdef有一些限制(-I被忽略和-include不支持,后者用于包括生成的配置头)此时使用cat不会有太大变化:
274692 total # (was 274686)
脚本和过程已更新。
除了驱动程序,arch等外,还有很多条件代码是否编译取决于所选择的配置,这些代码不一定在动态加载的模块中而是在内核中构建。
因此,下载了linux-4.1.6的源代码,选择了tinyconfig,它没有启用模块,老实说,我不知道它启用了什么或用户可以在运行时使用它做什么,无论如何,请配置内核:
# tinyconfig - Configure the tiniest possible kernel
make tinyconfig
建立内核
time make V=1 # (should be fast)
#1049168 ./vmlinux (I'm using x86-32 on other arch the size may be different)
内核构建过程会*.cmd使用命令行调用隐藏文件,这些隐藏文件也用于构建.o文件,处理这些文件并提取script.sh下面的目标和依赖项副本,并将其与find一起使用:
find -name "*.cmd" -exec sh script.sh "{}" \;
这个创建目标的每一个依赖副本.o命名.o.c
.c代码
find -name "*.o.c" | grep -v "/scripts/" | xargs wc -l | sort -n
...
8285 ./kernel/sched/fair.o.c
8381 ./kernel/sched/core.o.c
9083 ./kernel/events/core.o.c
274692 total
.h标头(已清理)
make headers_install INSTALL_HDR_PATH=/tmp/test-hdr
find /tmp/test-hdr/ -name "*.h" | xargs wc -l
...
1401 /tmp/test-hdr/include/linux/ethtool.h
2195 /tmp/test-hdr/include/linux/videodev2.h
4588 /tmp/test-hdr/include/linux/nl80211.h
112445 total