最近在调试板子的kernel过程中,如何查看驱动注册调用先后顺序。用下面这个命令,将对应kernel下面的System.map的调用表__initcal里面的函数列表排序出来,
objdump -t ./vmlinux | grep __initcall | sort > testobjdump.txt
打开testobjdump
前面是下面这样:
最后面大概是:
如果你是从kernel git上下载的,那么基本这个文件里面的顺序就是各个驱动模块的加载顺序了。且观察发现每一段函数前面的地址都是4字节连续偏移的。地址最末位很规律都是0、4、8、C结尾,没有空缺项。init/main.c会根据这个数据项依次调用。