linux内核-2-linux内核makefile编译过程

编译Linux内核makefile的过程主要分为两步:编译vmlinux和生成zImage。
编译vmlinux时,makefile的_all目标作为默认目标,对应make或makeall命令。
由于KBUILD_EXTMOD为空,所以在_all上运行代码取决于一切,而一切都取决于vmlinux。
然后vmlinux开始编译。
编译vmlinux依赖于scripts/link-vmlinux.sh$(vmlinux-deps)FORCE。
vmlinux-deps包含arch/arm/kernel/vmlinux.lds、KBUILD_VMLINUX_INIT和KBUILD_VMLINUX_MAIN等变量,它们指向应该编译和链接的文件。
在链接过程中,通过调用shell脚本scripts/link-vmlinux.sh来完成。
链接脚本为arch/arm/kernel/vmlinux.lds,链接过程由该脚本控制。
将每个子目录中嵌入的.o和.a文件链接在一起,最终生成vmlinux。
编译zImage时,运行命令makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-all,该命令将编译vmlinux、zImage、dtb和ko文件。
zImage是一个gzip压缩的镜像,压缩后的大小在6MB左右,vmlinux编译完成后,生成的zImage是通过arch/arm/Makefile中的代码依赖$(KBUILD_IMAGE)$(KBUILD_DTBS)完成的,其中KBUILD_IMAGE是zImage,KBUILD_DTBS是dtbs。
一般来说,Linux内核makefile编译过程遵循依赖关系,通过调用特定脚本和链接过程,最终生成可执行的内核映像文件。

哪位大神帮我下,怎么编写linux下makefile文件?

例如,如果您有一个hello.c文件:#includemain(){printf("Hello,world!\n");}然后编写另一个Makefile:Hello:hello.cgcchello.c-oHello之后,直接发出命令:make,就会得到一个名为Hello的可执行文件。
最后,发出命令:./Hello,可以看到执行结果:Hello,World注意:“gcc”前面必须有一个Tab键作为执行命令。