summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDalon Westergreen <dwesterg@gmail.com>2016-04-18 20:37:49 -0700
committerDalon Westergreen <dwesterg@gmail.com>2016-04-18 20:37:49 -0700
commitbfdb9464380d36330ded10a10ac8339d818d43b5 (patch)
tree3e5eb125620ae237cb24fd6fae5e5662c12641d3
parenteb352fc6168b382bebd4587baadaecd754c96229 (diff)
downloadmeta-altera-bfdb9464380d36330ded10a10ac8339d818d43b5.tar.gz
Add support for sdcard generation for C5/A5
-rw-r--r--classes/image_types_socfpga.bbclass123
-rw-r--r--conf/machine/arria5.conf5
-rw-r--r--conf/machine/cyclone5.conf8
3 files changed, 133 insertions, 3 deletions
diff --git a/classes/image_types_socfpga.bbclass b/classes/image_types_socfpga.bbclass
new file mode 100644
index 0000000..579bc5a
--- /dev/null
+++ b/classes/image_types_socfpga.bbclass
@@ -0,0 +1,123 @@
1inherit image_types
2
3IMAGE_BOOTLOADER ?= "u-boot-socfpga"
4SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
5
6# Boot partition size [in KiB]
7IMAGE_ROOTFS_ALIGNMENT_cyclone5 ?= "2048"
8IMAGE_ROOTFS_ALIGNMENT_arria5 ?= "2048"
9IMAGE_ROOTFS_ALIGNMENT_arria10 ?= "10240"
10
11BOOT_SPACE ?= "102400"
12
13IMAGE_DEPENDS_sdcard = "parted-native:do_populate_sysroot \
14 dosfstools-native:do_populate_sysroot \
15 mtools-native:do_populate_sysroot \
16 virtual/kernel:do_deploy \
17 ${@d.getVar('IMAGE_BOOTLOADER', True) and d.getVar('IMAGE_BOOTLOADER', True) + ':do_deploy' or ''}"
18
19SDCARD_GENERATION_COMMAND_cyclone5 = "generate_28nm_sdcard"
20SDCARD_GENERATION_COMMAND_arria5 = "generate_28nm_sdcard"
21
22#
23# Generate the boot image with the boot scripts and required Device Tree
24# files
25_generate_boot_image() {
26 local boot_part=$1
27
28 # Create boot partition image
29 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \
30 | awk "/ $boot_part / { print substr(\$4, 1, length(\$4 -1)) / 1024 }")
31
32 # mkdosfs will sometimes use FAT16 when it is not appropriate,
33 # resulting in a boot failure from SYSLINUX. Use FAT32 for
34 # images larger than 512MB, otherwise let mkdosfs decide.
35 if [ $(expr $BOOT_BLOCKS / 1024) -gt 512 ]; then
36 FATSIZE="-F 32"
37 fi
38
39 rm -f ${WORKDIR}/boot.img
40 mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 ${FATSIZE} -C ${WORKDIR}/boot.img $BOOT_BLOCKS
41
42 mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE}
43
44 # Copy boot scripts
45 for item in ${BOOT_SCRIPTS}; do
46 src=`echo $item | awk -F':' '{ print $1 }'`
47 dst=`echo $item | awk -F':' '{ print $2 }'`
48
49 mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/$src ::/$dst
50 done
51
52 # Copy device tree file
53 if test -n "${KERNEL_DEVICETREE}"; then
54 for DTS_FILE in ${KERNEL_DEVICETREE}; do
55 DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
56 if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then
57 kernel_bin="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin`"
58 kernel_bin_for_dtb="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb | sed "s,$DTS_BASE_NAME,${MACHINE},g;s,\.dtb$,.bin,g"`"
59 if [ $kernel_bin = $kernel_bin_for_dtb ]; then
60 mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb
61 fi
62 else
63 bbfatal "${DTS_FILE} does not exist."
64 fi
65 done
66 fi
67}
68
69generate_28nm_sdcard () {
70 # Create partition table
71 parted -s ${SDCARD} mklabel msdos
72 parted -s ${SDCARD} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED})
73 parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE)
74 parted -s ${SDCARD} unit KiB mkpart primary 1024 2048
75
76 #set part 3 to type a2 for spl / uboot image
77 echo -ne "\xa2" | dd of=${SDCARD} bs=1 count=1 seek=482 conv=notrunc
78
79
80 if [ -e "${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG}" ]
81 then
82 dd if=${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG} of=${SDCARD} conv=notrunc seek=1 bs=$(expr 1024 \* 1024)
83 elsif [ -e "${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG}" ]
84 then
85 dd if=${DEPLOY_DIR_IMAGE}/${SPL_BINARY} of=${SDCARD} conv=notrunc seek=1 bs=$(expr 1024 \* 1024)
86 else
87 bbfatal "${SPL_BINARY} does not exist."
88 fi
89
90 parted ${SDCARD} print
91
92 _generate_boot_image 1
93 # Burn Partition
94 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024)
95 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024)
96}
97
98IMAGE_CMD_sdcard () {
99 if [ -z "${SDCARD_ROOTFS}" ]; then
100 bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined."
101 exit 1
102 fi
103
104 # Align boot partition and calculate total SD card image size
105 BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
106 BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
107 SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
108
109 # Initialize a sparse file
110 if [ "x${UBOOT_CONFIG}" != "x" ]
111 then
112 SDCARD="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-${UBOOT_CONFIG}.rootfs.sdcard"
113 else
114 SDCARD="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.sdcard"
115 fi
116 dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1024 \* ${SDCARD_SIZE})
117
118 ${SDCARD_GENERATION_COMMAND}
119}
120
121# The sdcard requires the rootfs filesystem to be built before using
122# it so we must make this dependency explicit.
123IMAGE_TYPEDEP_sdcard = "${@d.getVar('SDCARD_ROOTFS', 1).split('.')[-1]}" \ No newline at end of file
diff --git a/conf/machine/arria5.conf b/conf/machine/arria5.conf
index 1cd460d..f3a0a34 100644
--- a/conf/machine/arria5.conf
+++ b/conf/machine/arria5.conf
@@ -6,7 +6,7 @@ require conf/machine/include/socfpga.inc
6 6
7PREFERRED_VERSION_u-boot-socfpga ?= "2016.03%" 7PREFERRED_VERSION_u-boot-socfpga ?= "2016.03%"
8 8
9UBOOT_CONFIG ?= "arria5-socdk" 9UBOOT_CONFIG ??= "arria5-socdk"
10 10
11UBOOT_CONFIG[arria5-socdk] = "socfpga_arria5_defconfig,sdcard" 11UBOOT_CONFIG[arria5-socdk] = "socfpga_arria5_defconfig,sdcard"
12 12
@@ -14,3 +14,6 @@ KMACHINE = "arria5"
14 14
15# Default kernel devicetrees 15# Default kernel devicetrees
16KERNEL_DEVICETREE_arria5 ?= "socfpga_arria5_socdk.dtb" 16KERNEL_DEVICETREE_arria5 ?= "socfpga_arria5_socdk.dtb"
17
18# Add support for SDCARD creation
19IMAGE_CLASSES += "image_types_socfpga
diff --git a/conf/machine/cyclone5.conf b/conf/machine/cyclone5.conf
index 7f39d39..941005b 100644
--- a/conf/machine/cyclone5.conf
+++ b/conf/machine/cyclone5.conf
@@ -8,8 +8,8 @@ PREFERRED_VERSION_u-boot-socfpga ?= "2016.03%"
8 8
9UBOOT_CONFIG ??= "cyclone5-socdk" 9UBOOT_CONFIG ??= "cyclone5-socdk"
10 10
11UBOOT_CONFIG[cyclone5-socdk] = "socfpga_cyclone5_defconfig" 11UBOOT_CONFIG[cyclone5-socdk] = "socfpga_cyclone5_defconfig,sdcard"
12UBOOT_CONFIG[de0-nano-soc] = "socfpga_de0_nano_soc_defconfig" 12UBOOT_CONFIG[de0-nano-soc] = "socfpga_de0_nano_soc_defconfig,sdcard"
13UBOOT_CONFIG[mcvevk] = "socfpga_mcvevk_defconfig" 13UBOOT_CONFIG[mcvevk] = "socfpga_mcvevk_defconfig"
14UBOOT_CONFIG[sockit] = "socfpga_sockit_defconfig" 14UBOOT_CONFIG[sockit] = "socfpga_sockit_defconfig"
15UBOOT_CONFIG[socrates] = "socfpga_socrates_defconfig" 15UBOOT_CONFIG[socrates] = "socfpga_socrates_defconfig"
@@ -19,3 +19,7 @@ KMACHINE = "cyclone5"
19 19
20# Default kernel devicetrees 20# Default kernel devicetrees
21KERNEL_DEVICETREE ?= "socfpga_cyclone5_socdk.dtb socfpga_cyclone5_sockit.dtb socfpga_cyclone5_socrates.dtb socfpga_cyclone5_de0_sockit.dtb" 21KERNEL_DEVICETREE ?= "socfpga_cyclone5_socdk.dtb socfpga_cyclone5_sockit.dtb socfpga_cyclone5_socrates.dtb socfpga_cyclone5_de0_sockit.dtb"
22
23# Add support for SDCARD creation
24IMAGE_CLASSES += "image_types_socfpga"
25