blob: 57916badf6b645c4cc0425b80d88c69d7b1632f3 (
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
|
inherit image_types
BOOT_START = "4"
BOOT_SIZE = "32"
BOOT_END = "36"
ROOTFS_START = "36"
ROOTFS_SIZE = "700"
ROOTFS_END = "736"
APPFS_START = "740"
APPFS_SIZE = "2856"
APPFS_END = "3596"
SDCARD_SIZE = "3600"
SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.sdcard"
IMAGE_BOOTLOADER = "u-boot"
IMAGE_DEPENDS_boundary = "parted-native:do_populate_sysroot \
dosfstools-native:do_populate_sysroot \
mtools-native:do_populate_sysroot \
virtual/kernel:do_deploy \
${@d.getVar('IMAGE_BOOTLOADER', True) and d.getVar('IMAGE_BOOTLOADER', True) + ':do_deploy' or ''}"
create_blank_sdcard_file () {
# Initialize a sparse file
dd if=/dev/zero of=${SDCARD} bs=1M count=0 seek=${SDCARD_SIZE}
# Create partition table
parted -s ${SDCARD} mklabel msdos
}
create_and_burn_boot () {
# create boot partition
parted -s ${SDCARD} unit MiB mkpart primary fat32 ${BOOT_START} ${BOOT_END}
# Create boot partition image
[ -e ${WORKDIR}/boot.img ] && rm ${WORKDIR}/boot.img
dd if=/dev/zero of=${WORKDIR}/boot.img bs=1M count=0 seek=${BOOT_SIZE}
mkfs.vfat -n "BOOT" -S 512 ${WORKDIR}/boot.img
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE}
# Copy boot scripts
for item in ${BOOT_SCRIPTS}; do
src=`echo $item | awk -F':' '{ print $1 }'`
dst=`echo $item | awk -F':' '{ print $2 }'`
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/$src ::/$dst
## FIXME in the class code ---------^
done
# Copy device tree file
for DTS_FILE in ${KERNEL_DEVICETREE}; do
DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then
kernel_bin="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin`"
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"`"
if [ $kernel_bin = $kernel_bin_for_dtb ]; then
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb
fi
fi
done
# Burn Partition
dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=${BOOT_START} bs=1M
}
create_and_burn_rootfs () {
# Create Partition
parted -s ${SDCARD} unit MiB mkpart primary ${ROOTFS_START} ${ROOTFS_END}
# Temporarily move the app&boot folders away and leave empty mount point for partition creation
[ -d ${IMAGE_ROOTFS}/../app ] && rm -rf ${IMAGE_ROOTFS}/../app
mv ${IMAGE_ROOTFS}/app ${IMAGE_ROOTFS}/../
mkdir ${IMAGE_ROOTFS}/app
[ -d ${IMAGE_ROOTFS}/../boot ] && rm -rf ${IMAGE_ROOTFS}/../boot
mv ${IMAGE_ROOTFS}/boot ${IMAGE_ROOTFS}/../
mkdir ${IMAGE_ROOTFS}/boot
# Create rootfs image
rootfs=`mktemp`
dd if=/dev/zero of=$rootfs seek=${ROOTFS_SIZE} count=0 bs=1M
mkfs.ext4 -F -i 4096 -L "rootfs" ${rootfs} -d ${IMAGE_ROOTFS}
dd if=${rootfs} of=${SDCARD} conv=notrunc seek=${ROOTFS_START} bs=1M
rm $rootfs
rm -rf ${IMAGE_ROOTFS}/app
mv ${IMAGE_ROOTFS}/../app ${IMAGE_ROOTFS}/app
rm -rf ${IMAGE_ROOTFS}/boot
mv ${IMAGE_ROOTFS}/../boot ${IMAGE_ROOTFS}/boot
}
create_and_burn_appfs () {
# Create Partition
parted -s ${SDCARD} unit MiB mkpart primary ${APPFS_START} ${APPFS_END}
# write the application partition
appfs=`mktemp`
dd if=/dev/zero of=$appfs bs=1M count=0 seek=${APPFS_SIZE}
mkfs.ext4 -L "app" -F -i 4096 ${appfs} -d ${IMAGE_ROOTFS}/app
dd if=${appfs} of=${SDCARD} conv=notrunc seek=${APPFS_START} bs=1M
rm $appfs
}
create_sdcard_symlink() {
SDCARD_LINK=`echo ${IMAGE_NAME} | awk -F "-${MACHINE}" '{ print $1 }'`
[ -e ${DEPLOY_DIR_IMAGE}/${SDCARD_LINK}.sdcard ] && rm ${DEPLOY_DIR_IMAGE}/${SDCARD_LINK}.sdcard
ln -s ${SDCARD} ${DEPLOY_DIR_IMAGE}/${SDCARD_LINK}.sdcard
}
IMAGE_CMD_boundary () {
if [ -z "${SDCARD_ROOTFS}" ]; then
bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined."
exit 1
fi
create_blank_sdcard_file
create_and_burn_boot
create_and_burn_rootfs
create_and_burn_appfs
create_sdcard_symlink
}
|