CaryStudio

 找回密码
 立即注册
搜索
查看: 40971|回复: 0

ASUS N14U 源码编译过程分析(下)

[复制链接]
发表于 2017-11-17 14:02:37 | 显示全部楼层 |阅读模式

请先登录

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
router中这个Makefile看起很大(有两千多行),仔细分析后,发现更简单。
all目标
  1. all: clean-build kernel_header libc version obj_prelibs kernel $(obj-y)
复制代码
这里面的kernel和$(obj-y)目标最为关键
kernel目标
  1. kernel: $(LINUXDIR)/.config  
  2.     @$(SEP)
复制代码
翻看前面的代码,SEP用来显示一个红底亮色的文字标题(详细描述可以参看我另一篇文章:ANSI/VT100 Terminal Control Escape Sequences),
  1. SEP=echo "\033[41;1m   $@   \033[0m"
复制代码
然后,进入linux目录,进行kernel的编译
  1. ifeq ($(RTCONFIG_RALINK),y)  
  2.     @if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \  
  3.         $(MAKE) -C $(LINUXDIR) vmlinux CC=$(KERNELCC) LD=$(KERNELLD); \  
  4.     fi  
  5.     if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \  
  6.         $(MAKE) -C $(LINUXDIR) modules CC=$(KERNELCC) LD=$(KERNELLD); \  
  7.     fi  
  8. else
复制代码

$(obj-y)目标
用gctwimax对象来举例
  1. gctwimax-0.0.3rc4/stamp-h1:  
  2.     touch $@  
  3.   
  4. gctwimax-0.0.3rc4: $@/stamp-h1  
  5.     $(MAKE) -C $@  
  6.   
  7. gctwimax-0.0.3rc4-install: gctwimax-0.0.3rc4  
  8.     install -D gctwimax-0.0.3rc4/gctwimax $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/sbin/gctwimax  
  9.     $(STRIP) $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/sbin/gctwimax  
  10.     #install -D gctwimax-0.0.3rc4/src/event.sh $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/share/event.sh  
  11.     #install -D gctwimax-0.0.3rc4/src/gctwimax.conf $(INSTALLDIR)/gctwimax-0.0.3rc4/usr/share/gctwimax.conf  
  12.   
  13. gctwimax-0.0.3rc4-clean:  
  14.     -@$(MAKE) -C gctwimax-0.0.3rc4 clean  
  15.     @rm -f gctwimax-0.0.3rc4/stamp-h1
复制代码
如果你对中间出现的-install和-clean后缀有点搞不懂的话,可以翻到Makefile的最后面
  1. %:  
  2.     @[ ! -d $* ] || ( $(SEP); $(MAKE) -C $* )  
  3.   
  4.   
  5. %-clean:  
  6.     -@[ ! -d $* ] || $(MAKE) -C $* clean  
  7.   
  8. %-install: %  
  9.     @echo $*  
  10.     @[ ! -d $* ] || $(MAKE) -C $* install INSTALLDIR=$(INSTALLDIR)/$*  
  11.   
  12. %-stage: %  
  13.     @echo $*  
  14.     @[ ! -d $* ] || $(MAKE) -C $* install DESTDIR=$(STAGEDIR)  
  15.   
  16. %-build:  
  17.     $(MAKE) $*-clean $*
复制代码
该Makefile中,剩下的大量的篇幅就是这些包含这些-install,-clean的目标,读者可以自行下载源码研究。

install目标
  1. install package: $(obj-install) $(LINUXDIR)/.config gen_target
复制代码
里面最关键的依赖目标是gen_target

gen_target目标

  1. gen_target:  
  2.     @$(SEP)  
  3.   
  4.     install -d $(TARGETDIR)
复制代码
还是故技重施,先显示彩色的标题,这样显得既专业又好看,可以模仿一下:)
最后,我们要转到image目标(哪里有提及?见我上一篇文章;-)

image目标
  1. image:  
  2. ifneq ($(RTCONFIG_BCMARM),y)  
  3.     @$(MAKE) -C $(LINUXDIR)/scripts/squashfs $(MKSQUASHFS_TARGET)  
  4.     @$(LINUXDIR)/scripts/squashfs/$(MKSQUASHFS) $(TARGETDIR) $(PLATFORMDIR)/target.image -all-root -noappend -nopad | tee target.info  
  5. else  
  6.     +$(MAKE) -C squashfs-4.2 mksquashfs  
  7.     squashfs-4.2/mksquashfs $(TARGETDIR) $(PLATFORMDIR)/$(ROOT_IMG) -noappend -all-root  
  8. endif
复制代码

至此,整个rt-n14u的编译过程也就能大概了解了。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|CaryStudio ( 粤ICP备16022806号 )

GMT+8, 2023-6-8 09:01 , Processed in 0.088317 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表