aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/atheros/image/Makefile
blob: 5a8d93deb5951af00192adee665fbdc924631abf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk

define Image/BuildKernel
	cp $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.elf
	gzip -9 -c $(KDIR)/vmlinux > $(KDIR)/vmlinux.bin.gz
	$(STAGING_DIR_HOST)/bin/lzma e $(KDIR)/vmlinux $(KDIR)/vmlinux.bin.l7
	dd if=$(KDIR)/vmlinux.bin.l7 of=$(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma bs=65536 conv=sync
	dd if=$(KDIR)/vmlinux.bin.gz of=$(BIN_DIR)/openwrt-$(BOARD)-vmlinux.gz bs=65536 conv=sync
endef

define Image/Build/squashfs
    $(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
endef

define Image/Build
	$(call Image/Build/$(1))
	dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-root.$(1) bs=128k conv=sync

	echo -en "kernel\t\t0x01\t0xBE030000\t0x" > $(BIN_DIR)/ls5-parts
	echo -en "$(shell printf "%08X\n" $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c))" >> $(BIN_DIR)/ls5-parts
	echo -e "\t0x80041000\t0x80041000\t$(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma" >> $(BIN_DIR)/ls5-parts 
	echo -en "rootfs\t\t0x02\t0x" >> $(BIN_DIR)/ls5-parts
	echo -en "$(shell printf "%08X\n" $(shell expr $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c) + 3187867648 ) )" >> $(BIN_DIR)/ls5-parts
	echo -en "\t0x$(shell printf "%08X\n" $(shell expr 3735552 - $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c) ) )" >> $(BIN_DIR)/ls5-parts
	echo -e "\t0x00000000\t0x00000000\t$(BIN_DIR)/openwrt-$(BOARD)-root.$(1)" >> $(BIN_DIR)/ls5-parts
	
	echo -en "kernel\t\t0x01\t0xBFC30000\t0x" > $(BIN_DIR)/ls2-parts
	echo -en "$(shell printf "%08X\n" $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c))" >> $(BIN_DIR)/ls2-parts
	echo -e "\t0x80041000\t0x80041000\t$(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma" >> $(BIN_DIR)/ls2-parts
	echo -en "rootfs\t\t0x02\t0x" >> $(BIN_DIR)/ls2-parts
	echo -en "$(shell printf "%08X\n" $(shell expr $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c) + 3217227776 ) )" >> $(BIN_DIR)/ls2-parts
	echo -en "\t0x$(shell printf "%08X\n" $(shell expr 3866624 - $(shell cat $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.lzma | wc -c) ) )" >> $(BIN_DIR)/ls2-parts
	echo -e "\t0x00000000\t0x00000000\t$(BIN_DIR)/openwrt-$(BOARD)-root.$(1)" >> $(BIN_DIR)/ls2-parts

	$(STAGING_DIR_HOST)/bin/mkfwimage -i $(BIN_DIR)/ls2-parts -v XS2.ar2316.OpenWRT -o $(BIN_DIR)/openwrt-$(BOARD)-litestation2-$(1).bin
	$(STAGING_DIR_HOST)/bin/mkfwimage -i $(BIN_DIR)/ls5-parts -v XS5.ar2313.OpenWRT -o $(BIN_DIR)/openwrt-$(BOARD)-litestation5-$(1).bin
	cp $(BIN_DIR)/openwrt-$(BOARD)-litestation5-$(1).bin $(BIN_DIR)/openwrt-$(BOARD)-nanostation5-$(1).bin
	cp $(BIN_DIR)/openwrt-$(BOARD)-litestation2-$(1).bin $(BIN_DIR)/openwrt-$(BOARD)-nanostation2-$(1).bin
	rm $(BIN_DIR)/ls2-parts $(BIN_DIR)/ls5-parts
endef

$(eval $(call BuildImage))
> /dev/null if [ "$?" != "0" ] ; then echo "Please install a stable version of flashrom in your path." echo "This will be used to compare the test flashrom binary and " echo "restore your firmware image at the end of the test." exit $EXIT_FAILURE fi # Keep a copy of flashrom with the test data cp "$FLASHROM" "${TMPDIR}/" cd "$TMPDIR" echo "Running test in ${TMPDIR}" # Make 4k worth of 0xff bytes echo "begin 640 $FF_4K" > "$FF_4K_TEXT" i=0 while [ $i -le 90 ] ; do echo "M____________________________________________________________" >> "$FF_4K_TEXT" i=$((${i} + 1)) done echo "!_P``" >> "$FF_4K_TEXT" echo "\`" >> "$FF_4K_TEXT" echo "end" >> "$FF_4K_TEXT" uudecode -o "$FF_4K" "$FF_4K_TEXT" rm -f "$FF_4K_TEXT" # Make 4k worth of 0x00 bytes dd if=/dev/zero of="$ZERO_4K" bs=1 count=4096 2> /dev/null echo "ffh pattern written in ${FF_4K}" echo "00h pattern written in ${ZERO_4K}" echo "Reading BIOS image" BIOS="bios.bin" flashrom ${FLASHROM_PARAM} -r "$BIOS" > /dev/null echo "Original image saved as ${BIOS}" # $1: exit code do_exit() { if [ ${1} -eq ${EXIT_FAILURE} ] ; then echo "Result: FAILED" else echo "Result: PASSED" fi echo "restoring original bios image using system's flashrom" flashrom ${FLASHROM_PARAM} -w "$BIOS" echo "test files remain in ${TMPDIR}" cd "$OLDDIR" exit "$1" } # # Actual tests are performed below. # NUM_REGIONS=16 # Make a layout - 4K regions on 4K boundaries. This will test basic # functionality of erasing and writing specific blocks. echo " 0x000000:0x000fff 00_0 0x001000:0x001fff ff_0 0x002000:0x002fff 00_1 0x003000:0x003fff ff_1 0x004000:0x004fff 00_2 0x005000:0x005fff ff_2 0x006000:0x006fff 00_3 0x007000:0x007fff ff_3 0x008000:0x008fff 00_4 0x009000:0x009fff ff_4 0x00a000:0x00afff 00_5 0x00b000:0x00bfff ff_5 0x00c000:0x00cfff 00_6 0x00d000:0x00dfff ff_6 0x00e000:0x00efff 00_7 0x00f000:0x00ffff ff_7 0x010000:0x010fff 00_8 0x011000:0x011fff ff_8 0x012000:0x012fff 00_9 0x013000:0x013fff ff_9 0x014000:0x014fff 00_10 0x015000:0x015fff ff_10 0x016000:0x016fff 00_11 0x017000:0x017fff ff_11 0x018000:0x018fff 00_12 0x019000:0x019fff ff_12 0x01a000:0x01afff 00_13 0x01b000:0x01bfff ff_13 0x01c000:0x01cfff 00_14 0x01d000:0x01dfff ff_14 0x01e000:0x01efff 00_15 0x01f000:0x01ffff ff_15 " > layout_4k_aligned.txt cp "$BIOS" "$TESTFILE" i=0 while [ $i -lt $NUM_REGIONS ] ; do echo -n "aligned region ${i} test: " offset=$((${i} * 8192)) dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) 2> /dev/null ./flashrom ${FLASHROM_PARAM} -l layout_4k_aligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null if [ "$?" != "0" ] ; then echo "failed to flash region" do_exit "$EXIT_FAILURE" fi # download the entire ROM image and use diff to compare to ensure # flashrom logic does not violate user-specified regions flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null diff -q difftest.bin "$TESTFILE" if [ "$?" != "0" ] ; then echo "failed diff test" do_exit "$EXIT_FAILURE" fi rm -f difftest.bin i=$((${i} + 1)) echo "passed" done # Make a layout - 4K regions on 4.5K boundaries. This will help find problems # with logic that only operates on part of a block. For example, if a user # wishes to re-write a fraction of a block, then: # 1. The whole block must be erased. # 2. The old content must be restored at unspecified offsets. # 3. The new content must be written at specified offsets. # # Note: The last chunk of 0xff bytes is only 2k as to avoid overrunning a 128kB # test image. # echo " 0x000800:0x0017ff 00_0 0x001800:0x0027ff ff_0 0x002800:0x0037ff 00_1 0x003800:0x0047ff ff_1 0x004800:0x0057ff 00_2 0x005800:0x0067ff ff_2 0x006800:0x0077ff 00_3 0x007800:0x0087ff ff_3 0x008800:0x0097ff 00_4 0x009800:0x00a7ff ff_4 0x00a800:0x00b7ff 00_5 0x00b800:0x00c7ff ff_5 0x00c800:0x00d7ff 00_6 0x00d800:0x00e7ff ff_6 0x00e800:0x00f7ff 00_7 0x00f800:0x0107ff ff_7 0x010800:0x0117ff 00_8 0x011800:0x0127ff ff_8 0x012800:0x0137ff 00_9 0x013800:0x0147ff ff_9 0x014800:0x0157ff 00_10 0x015800:0x0167ff ff_10 0x016800:0x0177ff 00_11 0x017800:0x0187ff ff_11 0x018800:0x0197ff 00_12 0x019800:0x01a7ff ff_12 0x01a800:0x01b7ff 00_13 0x01b800:0x01c7ff ff_13 0x01c800:0x01d7ff 00_14 0x01d800:0x01e7ff ff_14 0x01e800:0x01f7ff 00_15 0x01f800:0x01ffff ff_15 " > layout_unaligned.txt # reset the test file and ROM to the original state flashrom ${FLASHROM_PARAM} -w "$BIOS" > /dev/null cp "$BIOS" "$TESTFILE" i=0 while [ $i -lt $NUM_REGIONS ] ; do echo -n "unaligned region ${i} test: " offset=$(($((${i} * 8192)) + 2048)) # Protect against too long write writelen=4096 if [ $((${offset} + 4096 + 4096)) -ge 131072 ]; then writelen=$((131072 - $((${offset} + 4096)))) if [ ${writelen} -lt 0 ]; then writelen=0 fi fi dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) count=writelen 2> /dev/null ./flashrom ${FLASHROM_PARAM} -l layout_unaligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null if [ "$?" != "0" ] ; then echo "failed to flash region" do_exit "$EXIT_FAILURE" fi # download the entire ROM image and use diff to compare to ensure # flashrom logic does not violate user-specified regions flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null diff -q difftest.bin "$TESTFILE" if [ "$?" != "0" ] ; then echo "failed diff test" do_exit "$EXIT_FAILURE" fi rm -f difftest.bin i=$((${i} + 1)) echo "passed" done do_exit "$EXIT_SUCCESS"