请先登录
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
router中这个Makefile看起很大(有两千多行),仔细分析后,发现更简单。 all目标- all: clean-build kernel_header libc version obj_prelibs kernel $(obj-y)
复制代码 这里面的kernel和$(obj-y)目标最为关键
kernel目标
- kernel: $(LINUXDIR)/.config
- @$(SEP)
复制代码 翻看前面的代码,SEP用来显示一个红底亮色的文字标题(详细描述可以参看我另一篇文章:ANSI/VT100 Terminal Control Escape Sequences),
- SEP=echo "\033[41;1m $@ \033[0m"
复制代码 然后,进入linux目录,进行kernel的编译
- ifeq ($(RTCONFIG_RALINK),y)
- @if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
- $(MAKE) -C $(LINUXDIR) vmlinux CC=$(KERNELCC) LD=$(KERNELLD); \
- fi
- if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
- $(MAKE) -C $(LINUXDIR) modules CC=$(KERNELCC) LD=$(KERNELLD); \
- fi
- else
复制代码
$(obj-y)目标
用gctwimax对象来举例 - gctwimax-0.0.3rc4/stamp-h1:
- touch $@
-
- gctwimax-0.0.3rc4: $@/stamp-h1
- $(MAKE) -C $@
-
- gctwimax-0.0.3rc4-install: gctwimax-0.0.3rc4
- install -D gctwimax-0.0.3rc4/gctwimax $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/sbin/gctwimax
- $(STRIP) $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/sbin/gctwimax
- #install -D gctwimax-0.0.3rc4/src/event.sh $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/share/event.sh
- #install -D gctwimax-0.0.3rc4/src/gctwimax.conf $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/share/gctwimax.conf
-
- gctwimax-0.0.3rc4-clean:
- -@$(MAKE) -C gctwimax-0.0.3rc4 clean
- @rm -f gctwimax-0.0.3rc4/stamp-h1
复制代码 如果你对中间出现的-install和-clean后缀有点搞不懂的话,可以翻到Makefile的最后面- %:
- @[ ! -d $* ] || ( $(SEP); $(MAKE) -C $* )
-
-
- %-clean:
- -@[ ! -d $* ] || $(MAKE) -C $* clean
-
- %-install: %
- @echo $*
- @[ ! -d $* ] || $(MAKE) -C $* install INSTALLDIR=$(INSTALLDIR)/$*
-
- %-stage: %
- @echo $*
- @[ ! -d $* ] || $(MAKE) -C $* install DESTDIR=$(STAGEDIR)
-
- %-build:
- $(MAKE) $*-clean $*
复制代码 该Makefile中,剩下的大量的篇幅就是这些包含这些-install,-clean的目标,读者可以自行下载源码研究。
install目标
- install package: $(obj-install) $(LINUXDIR)/.config gen_target
复制代码 里面最关键的依赖目标是gen_target
gen_target目标
- gen_target:
- @$(SEP)
-
- install -d $(TARGETDIR)
复制代码 还是故技重施,先显示彩色的标题,这样显得既专业又好看,可以模仿一下:)
最后,我们要转到image目标(哪里有提及?见我上一篇文章;-)
image目标
- image:
- ifneq ($(RTCONFIG_BCMARM),y)
- @$(MAKE) -C $(LINUXDIR)/scripts/squashfs $(MKSQUASHFS_TARGET)
- @$(LINUXDIR)/scripts/squashfs/$(MKSQUASHFS) $(TARGETDIR) $(PLATFORMDIR)/target.image -all-root -noappend -nopad | tee target.info
- else
- +$(MAKE) -C squashfs-4.2 mksquashfs
- squashfs-4.2/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root
- endif
复制代码
至此,整个rt-n14u的编译过程也就能大概了解了。
|