过段时间板子就要到了,虽然之前做过A8的,但那已是三年前的事情了,现在必须的再温习一下,一下为分析概要
顶层的Makefile先包含
一、
110
111 MKCONFIG := $(SRCTREE)/mkconfig
112 export MKCONFIG
mkconfig里通过传递的参数配置板子
28 echo "Configuring for ${BOARD_NAME} board..."
Makefile里传递的参数
3309 mx6dl_arm2_config \
3310 mx6dl_arm2_iram_config \
3311 mx6dl_arm2_mfg_config \
3312 mx6dl_arm2_lpddr2_config \
3313 mx6q_arm2_config \
3314 mx6q_arm2_nand_config \
3315 mx6q_arm2_android_config \
3316 mx6q_arm2_mfg_config \
3317 mx6q_arm2_lpddr2_config \
3318 mx6q_arm2_lpddr2pop_config \
3319 mx6q_arm2_iram_config : unconfig
3320 @[ -z "$(findstring iram_,$@)" ] || \
3321 { echo "TEXT_BASE = 0x00907000" >$(obj)board/freescale/mx6q_arm2/config.tmp ; \
3322 echo "... with iram configuration" ; \
3323 }
3324 @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx6q_arm2 freescale mx6
建立相应的文件链接,包含相应的头文件
46 cd ./include
47 rm -f asm
48 ln -s asm-$2 asm
49 fi
50
51 rm -f asm-$2/arch
52
53 if [ -z "$6" -o "$6" = "NULL" ] ; then
54 ln -s ${LNPREFIX}arch-$3 asm-$2/arch
55 else
56 ln -s ${LNPREFIX}arch-$6 asm-$2/arch
57 fi
58
59 if [ "$2" = "arm" ] ; then
60 rm -f asm-$2/proc
61 ln -s ${LNPREFIX}proc-armv asm-$2/proc
62 fi
63
64 #
65 # Create include file for Make
66 #
67 echo "ARCH = $2" > config.mk
68 echo "CPU = $3" >> config.mk
69 echo "BOARD = $4" >> config.mk
70
71 [ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
72
73 [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
74
75 #
76 # Create board specific header file
77 #
78 if [ "$APPEND" = "yes" ] # Append to existing config file
79 then
80 echo >> config.h
81 else
82 > config.h # Create new config file
83 fi
84 echo "/* Automatically generated - do not edit */" >>config.h
85 echo "#include <configs/$1.h>" >>config.h
86 echo "#include <asm/config.h>" >>config.h
87
88 exit 0
这里主要
1、建立的include 目录下的asm proc目录链接,
2、建立include 目录下的config.mk
3、建立include目录下的config.h
arm/arch-mx6目录下的文件
jolinery@jolinery:~/myandroid/bootable/bootloader/uboot-imx/include/asm/arch-mx6$ ls
gpio.h iomux.h mmu.h mx6.h mx6_secure.h regs-anadig.h
imx-regs.h iomux-v3.h mx6dl_pins.h mx6_pins.h mx6sl_pins.h regs-ocotp.h
二、包含mkconfig里生存的include目录下的config.mk里的东东,然后全局他
151 # to all top level build files. We need the dummy all: target to prevent the
152 # dependency target in autoconf.mk.dep from being the default.
153 all:
154 sinclude $(obj)include/autoconf.mk.dep
155 sinclude $(obj)include/autoconf.mk
156
157 # load ARCH, BOARD, and CPU configuration
158 include $(obj)include/config.mk
159 export ARCH CPU BOARD VENDOR SOC
三、包含顶层的config.mk
165
166 # load other configuration
167 include $(TOPDIR)/config.mk
config.mk里的东东
1、工具的指定
65 #
66 # Include the make variables (CC, etc...)
67 #
68 AS = $(CROSS_COMPILE)as
69 LD = $(CROSS_COMPILE)ld
70 CC = $(CROSS_COMPILE)gcc
71 CPP = $(CC) -E
72 AR = $(CROSS_COMPILE)ar
73 NM = $(CROSS_COMPILE)nm
74 LDR = $(CROSS_COMPILE)ldr
75 STRIP = $(CROSS_COMPILE)strip
76 OBJCOPY = $(CROSS_COMPILE)objcopy
77 OBJDUMP = $(CROSS_COMPILE)objdump
78 RANLIB = $(CROSS_COMPILE)RANLIB
79
2、包含相关目录下的.mk文件
82 # Load generated board configuration
83 sinclude $(OBJTREE)/include/autoconf.mk
84
85 ifdef ARCH
86 sinclude $(TOPDIR)/lib_$(ARCH)/config.mk # include architecture dependend rules
87 endif
88 ifdef CPU
89 sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules
90 endif
91 ifdef SOC
92 sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules
93 endif
94 ifdef VENDOR
95 BOARDDIR = $(VENDOR)/$(BOARD)
96 else
97 BOARDDIR = $(BOARD)
98 endif
99 ifdef BOARD
100 sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules
3、链接脚本的指定
104
105 ifneq (,$(findstring s,$(MAKEFLAGS)))
106 ARFLAGS = cr
107 else
108 ARFLAGS = crv
109 endif
110 RELFLAGS= $(PLATFORM_RELFLAGS)
111 DBGFLAGS= -g # -DDEBUG
112 OPTFLAGS= -Os #-fomit-frame-pointer
113 ifndef LDSCRIPT
114 #LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
115 ifeq ($(CONFIG_NAND_U_BOOT),y)
116 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
117 else
118 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
119 endif
120 endif
121 OBJCFLAGS += --gap-fill=0xff
122
四、目标文件、依赖文件的建立
170 # U-Boot objects....order is important (i.e. start must be first)
171
172 OBJS = cpu/$(CPU)/start.o
173 ifeq ($(CPU),i386)
174 OBJS += cpu/$(CPU)/start16.o
175 OBJS += cpu/$(CPU)/resetvec.o
176 endif
177 ifeq ($(CPU),ppc4xx)
178 OBJS += cpu/$(CPU)/resetvec.o
179 endif
180 ifeq ($(CPU),mpc85xx)
181 OBJS += cpu/$(CPU)/resetvec.o
182 endif
183
184 OBJS := $(addprefix $(obj),$(OBJS))
185
186 LIBS = lib_generic/libgeneric.a
187 LIBS += lib_generic/lzma/liblzma.a
188 LIBS += lib_generic/lzo/liblzo.a
189 LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
190 "board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
191 LIBS += cpu/$(CPU)/lib$(CPU).a
192 ifdef SOC
193 LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
194 endif
195 ifeq ($(CPU),ixp)
196 LIBS += cpu/ixp/npe/libnpe.a
197 endif
198 LIBS += lib_$(ARCH)/lib$(ARCH).a
199 LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \
200 fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a fs/yaffs2/libyaffs2.a \
201 fs/ubifs/libubifs.a
202 LIBS += net/libnet.a
203 LIBS += disk/libdisk.a
204 LIBS += drivers/bios_emulator/libatibiosemu.a
205 LIBS += drivers/block/libblock.a
206 LIBS += drivers/dma/libdma.a
207 LIBS += drivers/fpga/libfpga.a
208 LIBS += drivers/gpio/libgpio.a
209 LIBS += drivers/hwmon/libhwmon.a
210 LIBS += drivers/i2c/libi2c.a
211 LIBS += drivers/input/libinput.a
212 LIBS += drivers/misc/libmisc.a
213 LIBS += drivers/mmc/libmmc.a
214 LIBS += drivers/mtd/libmtd.a
215 LIBS += drivers/mtd/nand/libnand.a
216 LIBS += drivers/mtd/onenand/libonenand.a
217 LIBS += drivers/mtd/ubi/libubi.a
218 LIBS += drivers/mtd/spi/libspi_flash.a
219 LIBS += drivers/net/libnet.a
220 LIBS += drivers/net/phy/libphy.a
221 LIBS += drivers/net/sk98lin/libsk98lin.a
222 LIBS += drivers/pci/libpci.a
223 LIBS += drivers/pcmcia/libpcmcia.a
224 LIBS += drivers/power/libpower.a
225 LIBS += drivers/spi/libspi.a
226 LIBS += drivers/fastboot/libfastboot.a
227 ifeq ($(CPU),mpc83xx)
228 LIBS += drivers/qe/qe.a
229 endif
230 ifeq ($(CPU),mpc85xx)
231 LIBS += drivers/qe/qe.a
232 LIBS += cpu/mpc8xxx/ddr/libddr.a
233 TAG_SUBDIRS += cpu/mpc8xxx
234 endif
235 ifeq ($(CPU),mpc86xx)
236 LIBS += cpu/mpc8xxx/ddr/libddr.a
237 TAG_SUBDIRS += cpu/mpc8xxx
238 endif
239 LIBS += drivers/rtc/librtc.a
240 LIBS += drivers/serial/libserial.a
241 LIBS += drivers/twserial/libtws.a
242 LIBS += drivers/usb/gadget/libusb_gadget.a
243 LIBS += drivers/usb/host/libusb_host.a
244 LIBS += drivers/usb/musb/libusb_musb.a
245 LIBS += drivers/video/libvideo.a
246 LIBS += drivers/watchdog/libwatchdog.a
247 LIBS += common/libcommon.a
248 LIBS += libfdt/libfdt.a
249 LIBS += api/libapi.a
250 LIBS += post/libpost.a
251
252 LIBS := $(addprefix $(obj),$(LIBS))
253 .PHONY : $(LIBS) $(TIMESTAMP_FILE) $(VERSION_FILE)
254
255 LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a
256 LIBBOARD := $(addprefix $(obj),$(LIBBOARD))
257
258 # Add GCC lib
259 ifdef USE_PRIVATE_LIBGCC
260 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
261 PLATFORM_LIBGCC = -L $(OBJTREE)/lib_$(ARCH) -lgcc
262 else
263 PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
264 endif
265 else
266 PLATFORM_LIBGCC = -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
267 endif
268 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
269 export PLATFORM_LIBS
270
271 # Special flags for CPP when processing the linker script.
272 # Pass the version down so we can handle backwards compatibility
273 # on the fly.
274 LDPPFLAGS += \
275 -include $(TOPDIR)/include/u-boot/u-boot.lds.h \
276 $(shell $(LD) --version | \
277 sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
278
279 ifeq ($(CONFIG_NAND_U_BOOT),y)
280 NAND_SPL = nand_spl
281 U_BOOT_NAND = $(obj)u-boot-nand.bin
282 endif
283
284 ifeq ($(CONFIG_ONENAND_U_BOOT),y)
285 ONENAND_IPL = onenand_ipl
286 U_BOOT_ONENAND = $(obj)u-boot-onenand.bin
287 endif
288
289 __OBJS := $(subst $(obj),,$(OBJS))
290 __LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
291
295 # Always append ALL so that arch config.mk's can add custom ones
296 ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND)
297
298 all: $(ALL)
299
300 $(obj)u-boot.hex: $(obj)u-boot
301 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
302
303 $(obj)u-boot.srec: $(obj)u-boot
304 $(OBJCOPY) -O srec $< $@
305
306 $(obj)u-boot.bin: $(obj)u-boot
307 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
308
309 $(obj)u-boot.ldr: $(obj)u-boot
310 $(obj)tools/envcrc --binary > $(obj)env-ldr.o
311 $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
312
313 $(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
314 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
315
316 $(obj)u-boot.ldr.srec: $(obj)u-boot.ldr
317 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
318
319 $(obj)u-boot.img: $(obj)u-boot.bin
320 ./tools/mkimage -A $(ARCH) -T firmware -C none \
321 -a $(TEXT_BASE) -e 0 \
322 -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
323 sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
324 -d $< $@
325
326 $(obj)u-boot.sha1: $(obj)u-boot.bin
327 $(obj)tools/ubsha1 $(obj)u-boot.bin
328
329 $(obj)u-boot.dis: $(obj)u-boot
330 $(OBJDUMP) -d $< > $@
331
332 GEN_UBOOT = \
333 UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
334 sed -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
335 cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
@
336 --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
337 -Map u-boot.map -o u-boot
338 $(obj)u-boot: depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
339 $(GEN_UBOOT)
340 ifeq ($(CONFIG_KALLSYMS),y)
341 smap=`$(call SYSTEM_MAP,u-boot) | \
342 awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
343 $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \
344 -c common/system_map.c -o $(obj)common/system_map.o
345 $(GEN_UBOOT) $(obj)common/system_map.o
346 endif
347
348 $(OBJS): depend
349 $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))
350
351 $(LIBS): depend $(SUBDIRS)
352 $(MAKE) -C $(dir $(subst $(obj),,$@))
353
354 $(LIBBOARD): depend $(LIBS)
355 $(MAKE) -C $(dir $(subst $(obj),,$@))
356
357 $(SUBDIRS): depend
358 $(MAKE) -C $@ all
359
360 $(LDSCRIPT): depend
361 $(MAKE) -C $(dir $@) $(notdir $@)
362
363 $(obj)u-boot.lds: $(LDSCRIPT)
364 $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
365
366 $(NAND_SPL): $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
367 $(MAKE) -C nand_spl/board/$(BOARDDIR) all
368
369 $(U_BOOT_NAND): $(NAND_SPL) $(obj)u-boot.bin
370 cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
371
372 $(ONENAND_IPL): $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
373 $(MAKE) -C onenand_ipl/board/$(BOARDDIR) all
374
375 $(U_BOOT_ONENAND): $(ONENAND_IPL) $(obj)u-boot.bin
376 cat $(obj)onenand_ipl/onenand-ipl-2k.bin $(obj)u-boot.bin > $(obj)u-boot-onenand.bin
377 cat $(obj)onenand_ipl/onenand-ipl-4k.bin $(obj)u-boot.bin > $(obj)u-boot-flexonenand.bin
378
379 $(VERSION_FILE):
380 @( printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' "$(U_BOOT_VERSION)" \
381 '$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ) > $@.tmp
382 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
383
384 $(TIMESTAMP_FILE):
385 @date +'#define U_BOOT_DATE "%b %d %C%y"' > $@
386 @date +'#define U_BOOT_TIME "%T"' >> $@
387
388 gdbtools:
389 $(MAKE) -C tools/gdb all || exit 1
390
391 updater:
392 $(MAKE) -C tools/updater all || exit 1
393
394 env:
395 $(MAKE) -C tools/env all MTD_VERSION=${MTD_VERSION} || exit 1
396
397 depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
398 for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done
399
400 TAG_SUBDIRS += include
401 TAG_SUBDIRS += lib_generic board/$(BOARDDIR)
402 TAG_SUBDIRS += cpu/$(CPU)
403 TAG_SUBDIRS += lib_$(ARCH)
404 TAG_SUBDIRS += fs/cramfs
405 TAG_SUBDIRS += fs/fat
406 TAG_SUBDIRS += fs/fdos
407 TAG_SUBDIRS += fs/jffs2
408 TAG_SUBDIRS += fs/yaffs2
409 TAG_SUBDIRS += net
410 TAG_SUBDIRS += disk
411 TAG_SUBDIRS += common
412 TAG_SUBDIRS += drivers/bios_emulator
413 TAG_SUBDIRS += drivers/block
414 TAG_SUBDIRS += drivers/gpio
415 TAG_SUBDIRS += drivers/hwmon
416 TAG_SUBDIRS += drivers/i2c
417 TAG_SUBDIRS += drivers/input
418 TAG_SUBDIRS += drivers/misc
419 TAG_SUBDIRS += drivers/mmc
420 TAG_SUBDIRS += drivers/mtd
421 TAG_SUBDIRS += drivers/mtd/nand
422 TAG_SUBDIRS += drivers/mtd/onenand
423 TAG_SUBDIRS += drivers/mtd/spi
424 TAG_SUBDIRS += drivers/net
425 TAG_SUBDIRS += drivers/net/sk98lin
426 TAG_SUBDIRS += drivers/pci
427 TAG_SUBDIRS += drivers/pcmcia
428 TAG_SUBDIRS += drivers/qe
429 TAG_SUBDIRS += drivers/rtc
430 TAG_SUBDIRS += drivers/serial
431 TAG_SUBDIRS += drivers/spi
432 TAG_SUBDIRS += drivers/usb
433 TAG_SUBDIRS += drivers/video
434
435 tags ctags:
436 ctags -w -o $(obj)ctags `find $(SUBDIRS) $(TAG_SUBDIRS) \
437 -name '*.[ch]' -print`
438
439 etags:
440 etags -a -o $(obj)etags `find $(SUBDIRS) $(TAG_SUBDIRS) \
441 -name '*.[ch]' -print`
442 cscope:
443 find $(SUBDIRS) $(TAG_SUBDIRS) -name '*.[ch]' -print \
444 > cscope.files
445 cscope -b -q -k
446
447 SYSTEM_MAP = \
448 $(NM) $1 | \
449 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
450 LC_ALL=C sort
451 $(obj)System.map: $(obj)u-boot
452 @$(call SYSTEM_MAP,$<) > $(obj)System.map
453
454 #
455 # Auto-generate the autoconf.mk file (which is included by all makefiles)
456 #
457 # This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
458 # the dep file is only include in this top level makefile to determine when
459 # to regenerate the autoconf.mk file.
460 $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
461 @$(XECHO) Generating $@ ; \
462 set -e ; \
463 : Generate the dependancies ; \
464 $(CC) -x c -DDO_DEPS_ONLY -M $(HOSTCFLAGS) $(CPPFLAGS) \
465 -MQ $(obj)include/autoconf.mk include/common.h > $@
466
467 $(obj)include/autoconf.mk: $(obj)include/config.h
468 @$(XECHO) Generating $@ ; \
469 set -e ; \
470 : Extract the config macros ; \
471 $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
472 sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
473 mv $@.tmp $@
475 #########################################################################
476 else # !config.mk
477 all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
478 $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
479 $(SUBDIRS) $(TIMESTAMP_FILE) $(VERSION_FILE) gdbtools updater env depend \
480 dep tags ctags etags cscope $(obj)System.map:
481 @echo "System not configured - see README" >&2
482 @ exit 1
483 endif # config.mk
jolinery@jolinery:~/myandroid/bootable/bootloader/uboot-imx/board/freescale/mx6q_sabreauto$ ls
config.mk lowlevel_init.S mx6q_sabreauto.c
flash_header.S Makefile u-boot.lds
392 $(MAKE) -C tools/updater all || exit 1
393
394 env:
395 $(MAKE) -C tools/env all MTD_VERSION=${MTD_VERSION} || exit 1
396
397 depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
398 for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done
399
400 TAG_SUBDIRS += include
401 TAG_SUBDIRS += lib_generic board/$(BOARDDIR)
402 TAG_SUBDIRS += cpu/$(CPU)
403 TAG_SUBDIRS += lib_$(ARCH)
404 TAG_SUBDIRS += fs/cramfs
405 TAG_SUBDIRS += fs/fat
406 TAG_SUBDIRS += fs/fdos
407 TAG_SUBDIRS += fs/jffs2
408 TAG_SUBDIRS += fs/yaffs2
409 TAG_SUBDIRS += net
410 TAG_SUBDIRS += disk
411 TAG_SUBDIRS += common