blob: 440dcac7874d37d79f1943c0bf7e213c1293d92d (
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
# Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd
# Copyright (C) 2017 Trevor Woerner <twoerner@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
inherit image_types
# Use an uncompressed ext4 by default as rootfs
IMG_ROOTFS_TYPE = "ext4"
IMG_ROOTFS = "${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${IMG_ROOTFS_TYPE}"
# This image depends on the rootfs image
IMAGE_TYPEDEP:rockchip-gpt-img = "${IMG_ROOTFS_TYPE}"
GPTIMG = "${IMAGE_NAME}-gpt.img"
GPTIMG_SYMLK = "${IMAGE_BASENAME}-${MACHINE}-gpt.img"
GPTIMG_SIZE ?= "4096"
BOOT_IMG = "boot.img"
BOOTIMG_SYMLK = "${IMAGE_BASENAME}-${MACHINE}-${BOOT_IMG}"
MINILOADER = "loader.bin"
UBOOT = "u-boot.out"
TRUST = "trust.out"
GPTIMG_APPEND ?= "console=tty1 console=ttyS2,115200n8 rw root=/dev/mmcblk2p7 rootfstype=ext4 init=/sbin/init"
# default partitions [in Sectors]
# More info at http://rockchip.wikidot.com/partitions
LOADER1_SIZE = "8000"
RESERVED1_SIZE = "128"
RESERVED2_SIZE = "8192"
LOADER2_SIZE = "8192"
ATF_SIZE = "8192"
BOOT_SIZE = "229376"
do_image_rockchip_gpt_img[depends] = "parted-native:do_populate_sysroot \
u-boot-mkimage-native:do_populate_sysroot \
mtools-native:do_populate_sysroot \
dosfstools-native:do_populate_sysroot \
virtual/kernel:do_deploy \
virtual/bootloader:do_deploy"
PER_CHIP_IMG_GENERATION_COMMAND:rk3288 = "generate_rk3288_loader1_image"
PER_CHIP_IMG_GENERATION_COMMAND:rock2-square = "generate_rock2_loader1_image"
IMAGE_CMD:rockchip-gpt-img () {
# Change to image directory
cd ${DEPLOY_DIR_IMAGE}
# Remove the existing image symlinks
rm -f "${GPTIMG_SYMLK}"
rm -f "${BOOTIMG_SYMLK}"
create_rk_image
${PER_CHIP_IMG_GENERATION_COMMAND}
# create symlink to full GPT image
cd ${DEPLOY_DIR_IMAGE}
ln -s ${GPTIMG} ${GPTIMG_SYMLK}
# create per-build boot.img with symlink
cd ${DEPLOY_DIR_IMAGE}
rm -f ${IMAGE_NAME}-boot.img
if [ -f ${WORKDIR}/${BOOT_IMG} ]; then
cp ${WORKDIR}/${BOOT_IMG} ${IMAGE_NAME}-boot.img
fi
ln -s ${IMAGE_NAME}-boot.img ${BOOTIMG_SYMLK}
}
create_rk_image () {
# Initialize sdcard image file
dd if=/dev/zero of=${GPTIMG} bs=1M count=0 seek=${GPTIMG_SIZE}
# Create partition table
parted -s ${GPTIMG} mklabel gpt
# Create vendor defined partitions
LOADER1_START=64
RESERVED1_START=`expr ${LOADER1_START} + ${LOADER1_SIZE}`
RESERVED2_START=`expr ${RESERVED1_START} + ${RESERVED1_SIZE}`
LOADER2_START=`expr ${RESERVED2_START} + ${RESERVED2_SIZE}`
ATF_START=`expr ${LOADER2_START} + ${LOADER2_SIZE}`
BOOT_START=`expr ${ATF_START} + ${ATF_SIZE}`
ROOTFS_START=`expr ${BOOT_START} + ${BOOT_SIZE}`
parted -s ${GPTIMG} unit s mkpart loader1 ${LOADER1_START} `expr ${RESERVED1_START} - 1`
parted -s ${GPTIMG} unit s mkpart reserved1 ${RESERVED1_START} `expr ${RESERVED2_START} - 1`
parted -s ${GPTIMG} unit s mkpart reserved2 ${RESERVED2_START} `expr ${LOADER2_START} - 1`
parted -s ${GPTIMG} unit s mkpart loader2 ${LOADER2_START} `expr ${ATF_START} - 1`
parted -s ${GPTIMG} unit s mkpart atf ${ATF_START} `expr ${BOOT_START} - 1`
# Create boot partition and mark it as bootable
parted -s ${GPTIMG} unit s mkpart boot ${BOOT_START} `expr ${ROOTFS_START} - 1`
parted -s ${GPTIMG} set 6 boot on
# Create rootfs partition
parted -s ${GPTIMG} unit s mkpart root ${ROOTFS_START} 100%
parted ${GPTIMG} print
# Delete the boot image to avoid trouble with the build cache
rm -f ${WORKDIR}/${BOOT_IMG}
# Create boot partition image
BOOT_BLOCKS=$(LC_ALL=C parted -s ${GPTIMG} unit b print | awk '/ 6 / { print substr($4, 1, length($4 -1)) / 512 /2 }')
BOOT_BLOCKS=`expr $BOOT_BLOCKS / 63 \* 63`
mkfs.vfat -n "boot" -S 512 -C ${WORKDIR}/${BOOT_IMG} $BOOT_BLOCKS
mcopy -i ${WORKDIR}/${BOOT_IMG} -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::${KERNEL_IMAGETYPE}
DEVICETREE_DEFAULT=""
for DTS_FILE in $(echo ${KERNEL_DEVICETREE} | cut -d'/' -f2); do
[ -n "${DEVICETREE_DEFAULT}"] && DEVICETREE_DEFAULT="${DTS_FILE}"
mcopy -i ${WORKDIR}/${BOOT_IMG} -s ${DEPLOY_DIR_IMAGE}/${DTS_FILE} ::${DTS_FILE}
done
# Create extlinux config file
cat > ${WORKDIR}/extlinux.conf <<EOF
default yocto
label yocto
kernel /${KERNEL_IMAGETYPE}
devicetree /${DEVICETREE_DEFAULT}
append ${GPTIMG_APPEND}
EOF
mmd -i ${WORKDIR}/${BOOT_IMG} ::/extlinux
mcopy -i ${WORKDIR}/${BOOT_IMG} -s ${WORKDIR}/extlinux.conf ::/extlinux/
# Burn Boot Partition
dd if=${WORKDIR}/${BOOT_IMG} of=${GPTIMG} conv=notrunc,fsync seek=${BOOT_START}
# Burn Rootfs Partition
dd if=${IMG_ROOTFS} of=${GPTIMG} seek=${ROOTFS_START}
}
generate_rk3288_loader1_image () {
dd if=${DEPLOY_DIR_IMAGE}/idbloader.img-${MACHINE} of=${GPTIMG} conv=notrunc,fsync seek=64
dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.bin of=${GPTIMG} conv=notrunc,fsync seek=16384
}
generate_rock2_loader1_image () {
# Burn bootloader
mkimage -n rk3288 -T rksd -d ${DEPLOY_DIR_IMAGE}/${SPL_BINARY} ${WORKDIR}/${UBOOT}
cat ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.bin >> ${WORKDIR}/${UBOOT}
dd if=${WORKDIR}/${UBOOT} of=${GPTIMG} conv=notrunc,fsync seek=64
}
|