Use VFAT partition to boot
This commit is contained in:
parent
5a4194ed9a
commit
a7fe2b1720
8 changed files with 98 additions and 113 deletions
BIN
tulip-chiphd/bootloader/boot0.bin
Normal file
BIN
tulip-chiphd/bootloader/boot0.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
tulip-chiphd/bootloader/pine64/sun50i-a64-pine64-plus.dtb
Executable file
BIN
tulip-chiphd/bootloader/pine64/sun50i-a64-pine64-plus.dtb
Executable file
Binary file not shown.
BIN
tulip-chiphd/bootloader/pine64/sun50i-a64-pine64.dtb
Executable file
BIN
tulip-chiphd/bootloader/pine64/sun50i-a64-pine64.dtb
Executable file
Binary file not shown.
BIN
tulip-chiphd/bootloader/u-boot-with-dtb.bin
Normal file
BIN
tulip-chiphd/bootloader/u-boot-with-dtb.bin
Normal file
Binary file not shown.
|
@ -1,12 +1,7 @@
|
|||
# Android fstab file.
|
||||
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
|
||||
# The filesystem that contains the filesystem checker binary (typically /system) cannot
|
||||
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
|
||||
/dev/block/mmcblk0p2 /system ext4 ro,barrier=1 wait
|
||||
/dev/block/mmcblk0p3 /cache ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,formattable
|
||||
/dev/block/mmcblk0p4 /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,formattable
|
||||
|
||||
/dev/block/mmcblk0p7 /system ext4 ro,barrier=1 wait,check
|
||||
/dev/block/mmcblk0p10 /cache ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,formattable
|
||||
/dev/block/mmcblk0p13 /logger ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,formattable
|
||||
/dev/block/mmcblk0p1 /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,formattable,encryptable=/dev/block/by-name/metadata
|
||||
/devices/soc.0/1c0f000.sdmmc/mmc_host/mmc* auto auto defaults voldmanaged=extsd:auto
|
||||
/devices/soc.0/1c10000.sdmmc/mmc_host/mmc* auto auto defaults voldmanaged=extsd:auto
|
||||
/devices/soc.0/1c1a000.ehci0-controller/usb* auto auto defaults voldmanaged=usb:auto
|
||||
|
|
|
@ -3,17 +3,12 @@
|
|||
# The filesystem that contains the filesystem checker binary (typically /system) cannot
|
||||
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
|
||||
|
||||
/dev/block/mmcblk0p2 /bootloader vfat defaults defaults
|
||||
/dev/block/mmcblk0p5 /env emmc defaults defaults
|
||||
/dev/block/mmcblk0p6 /boot emmc defaults defaults
|
||||
/dev/block/mmcblk0p7 /system ext4 defaults defaults
|
||||
/dev/block/mmcblk0p1 /data ext4 defaults defaults
|
||||
/dev/block/mmcblk0p8 /misc emmc defaults defaults
|
||||
/dev/block/mmcblk0p9 /recovery emmc defaults defaults
|
||||
/dev/block/mmcblk0p10 /cache ext4 defaults defaults
|
||||
/dev/block/mmcblk0p1 /bootloader vfat defaults defaults
|
||||
/dev/block/mmcblk0p2 /system ext4 defaults defaults
|
||||
/dev/block/mmcblk0p3 /cache ext4 defaults defaults
|
||||
/dev/block/mmcblk0p4 /data ext4 defaults defaults
|
||||
|
||||
/dev/block/mmcblk1p1 /extsd vfat defaults defaults
|
||||
/dev/block/mmcblk1 /extsd vfat defaults defaults
|
||||
/dev/block/mmcblk0p1 /extsd vfat defaults defaults
|
||||
/dev/block/mmcblk0 /extsd vfat defaults defaults
|
||||
/dev/block/sda1 /usbhost vfat defaults defaults
|
||||
/dev/block/sda /usbhost vfat defaults defaults
|
||||
|
|
|
@ -25,107 +25,102 @@ add_lunch_combo tulip_chiphd-user
|
|||
add_lunch_combo tulip_chiphd_atv-eng
|
||||
add_lunch_combo tulip_chiphd_atv-user
|
||||
|
||||
|
||||
SDCARD_BLOCK_SIZE=512
|
||||
|
||||
sdcard_command() {
|
||||
echo -n "$1 " 1>&2
|
||||
shift
|
||||
if eval "$@"; then
|
||||
echo "success" 1>&2
|
||||
return 0
|
||||
else
|
||||
echo "failed" 1>&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
sdcard_file_size() {
|
||||
stat -c%s "$1" 2>/dev/null
|
||||
}
|
||||
|
||||
sdcard_append_file() {
|
||||
IN_SIZE="$(sdcard_file_size $2)" &&
|
||||
MAX_IN_SIZE="$(($3*$SDCARD_BLOCK_SIZE))" &&
|
||||
sdcard_command "Validating a size of $(basename $2)..." "test $IN_SIZE -le $MAX_IN_SIZE" &&
|
||||
sdcard_command "Appending $(basename $2) of $IN_SIZE..." dd if="$2" of="$1" bs=$SDCARD_BLOCK_SIZE count="$3" oflag=append conv=notrunc status=none &&
|
||||
( [[ $MAX_IN_SIZE == $IN_SIZE ]] || sdcard_command "Aligning $(basename $2)..." dd if="$2" of="$1" bs="$((MAX_IN_SIZE-$IN_SIZE))" count="1" oflag=append conv=notrunc status=none )
|
||||
}
|
||||
|
||||
sdcard_append_size() {
|
||||
sdcard_command "Appending zero-space $2..." dd if=/dev/zero of="$1" bs="$SDCARD_BLOCK_SIZE" count="$3" oflag=append conv=notrunc status=none
|
||||
}
|
||||
|
||||
sdcard_append_mkfs4() {
|
||||
file="$ANDROID_PRODUCT_OUT/$2.raw.img"
|
||||
sdcard_command "Creating $2..." fallocate -l "$(($3*$SDCARD_BLOCK_SIZE))" "$file" &&
|
||||
sdcard_command "Formatting $2..." mkfs.ext4 -q "$file" &&
|
||||
sdcard_append_file "$1" "$file" "$3"
|
||||
result="$?"
|
||||
rm "$file" 2>/dev/null
|
||||
return $result
|
||||
}
|
||||
|
||||
sdcard_append_vfat() {
|
||||
file="$ANDROID_PRODUCT_OUT/$2.raw.img"
|
||||
sdcard_command "Creating $2..." fallocate -l "$(($3*$SDCARD_BLOCK_SIZE))" "$file" &&
|
||||
sdcard_command "Formatting $2..." mkfs.vfat "$file" &&
|
||||
sdcard_append_file "$1" "$file" "$3"
|
||||
result="$?"
|
||||
rm "$file" 2>/dev/null
|
||||
return $result
|
||||
}
|
||||
|
||||
sdcard_append_system() {
|
||||
sdcard_command "Unpacking system partition..." simg2img "$ANDROID_PRODUCT_OUT/system.img" "$ANDROID_PRODUCT_OUT/system.raw.img" &&
|
||||
sdcard_append_file "$1" "$ANDROID_PRODUCT_OUT/system.raw.img" "$2"
|
||||
result="$?"
|
||||
rm "$ANDROID_PRODUCT_OUT/system.raw.img" 2>/dev/null
|
||||
return $result
|
||||
}
|
||||
|
||||
sdcard_init_bootloader() {
|
||||
sdcard_command "Unpacking bootloader..." gunzip -c "$DEVICE/bootloader/bootloader.img.gz"
|
||||
}
|
||||
|
||||
sdcard_create_image() {
|
||||
sdcard_init_bootloader &&
|
||||
sdcard_append_file "$1" "$ANDROID_PRODUCT_OUT/boot.img" 32768 &&
|
||||
sdcard_append_system "$1" 3145728 &&
|
||||
sdcard_append_size "$1" misc 32768 &&
|
||||
sdcard_append_file "$1" "$ANDROID_PRODUCT_OUT/recovery.img" 65536 &&
|
||||
sdcard_append_mkfs4 "$1" cache 1572864 &&
|
||||
sdcard_append_size "$1" metadata 32768 &&
|
||||
sdcard_append_vfat "$1" private 32768 &&
|
||||
sdcard_append_mkfs4 "$1" alog 163840 &&
|
||||
sdcard_append_mkfs4 "$1" UDISK 9943039
|
||||
ninja_tulip() {
|
||||
(
|
||||
. out/env-$TARGET_PRODUCT.sh
|
||||
exec prebuilts/ninja/linux-x86/ninja -C "$(gettop)" -f out/build-$TARGET_PRODUCT.ninja "$@"
|
||||
)
|
||||
}
|
||||
|
||||
sdcard_image() {
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "Usage: $0 <output-image>"
|
||||
if [[ $# -ne 1 ]] && [[ $# -ne 2 ]]; then
|
||||
echo "Usage: $0 <output-image> [data-size-in-MB]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$ANDROID_PRODUCT_OUT" ]]; then
|
||||
echo "Define ANDROID_PRODUCT_OUT"
|
||||
return 1
|
||||
fi
|
||||
out_gz="$1"
|
||||
out="$(dirname "$out_gz")/$(basename "$out_gz" .gz)"
|
||||
|
||||
get_device_dir
|
||||
|
||||
if sdcard_create_image "/dev/stdout" | gzip -c > "$1"
|
||||
then
|
||||
echo "Done: $1"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
boot0="$DEVICE/bootloader/boot0.bin"
|
||||
uboot="$DEVICE/bootloader/u-boot-with-dtb.bin"
|
||||
kernel="$ANDROID_PRODUCT_OUT/kernel"
|
||||
ramdisk="$ANDROID_PRODUCT_OUT/ramdisk.img"
|
||||
ramdisk_recovery="$ANDROID_PRODUCT_OUT/ramdisk-recovery.img"
|
||||
|
||||
boot0_position=8 # KiB
|
||||
uboot_position=19096 # KiB
|
||||
part_position=20 # MiB
|
||||
boot_size=50 # MiB
|
||||
cache_size=768 # MiB
|
||||
data_size=${2:-1024} # MiB
|
||||
mbs=$((1024*1024/512)) # MiB to sector
|
||||
|
||||
ninja_tulip() {
|
||||
(
|
||||
. out/env-tulip_chiphd.sh
|
||||
exec prebuilts/ninja/linux-x86/ninja -C "$(gettop)" -f out/build-tulip_chiphd.ninja "$@"
|
||||
set -eo pipefail
|
||||
|
||||
echo "Create beginning of disk..."
|
||||
dd if=/dev/zero bs=1M count=$part_position of="$out" status=none
|
||||
dd if="$boot0" conv=notrunc bs=1k seek=$boot0_position of="$out" status=none
|
||||
dd if="$uboot" conv=notrunc bs=1k seek=$uboot_position of="$out" status=none
|
||||
|
||||
echo "Create boot file system... (VFAT)"
|
||||
dd if=/dev/zero bs=1M count=${boot_size} of="${out}.boot" status=none
|
||||
mkfs.vfat -n BOOT "${out}.boot"
|
||||
|
||||
mcopy -v -m -i "${out}.boot" "$kernel" ::
|
||||
mcopy -v -m -i "${out}.boot" "$ramdisk" ::
|
||||
mcopy -v -m -i "${out}.boot" "$ramdisk_recovery" ::
|
||||
mcopy -v -s -m -i "${out}.boot" "$DEVICE/bootloader/pine64" ::
|
||||
cat <<"EOF" > uEnv.txt
|
||||
console=ttyS0,115200n8
|
||||
selinux=permissive
|
||||
optargs=enforcing=0 cma=384M no_console_suspend
|
||||
kernel_filename=kernel
|
||||
initrd_filename=ramdisk.img
|
||||
hardware=sun50iw1p1
|
||||
EOF
|
||||
|
||||
cat <<"EOF" > boot.script
|
||||
setenv set_cmdline set bootargs console=${console} ${optargs} androidboot.serialno=${sunxi_serial} androidboot.hardware=${hardware} androidboot.selinux=${selinux} earlyprintk=sunxi-uart,0x01c28000 loglevel=8 root=${root}
|
||||
run mmcboot
|
||||
EOF
|
||||
mkimage -C none -A arm -T script -d boot.script boot.scr
|
||||
mcopy -v -m -i "${out}.boot" "boot.scr" ::
|
||||
mcopy -m -i "${out}.boot" "uEnv.txt" ::
|
||||
rm -f boot.script boot.scr uEnv.txt
|
||||
|
||||
dd if="${out}.boot" conv=notrunc oflag=append bs=1M of="$out" status=none
|
||||
rm -f "${out}.boot"
|
||||
|
||||
echo "Append system..."
|
||||
simg2img "$ANDROID_PRODUCT_OUT/system.img" "${out}.system"
|
||||
dd if="${out}.system" conv=notrunc oflag=append bs=1M of="$out" status=none
|
||||
system_size=$(stat -c%s "${out}.system")
|
||||
rm -f "${out}.system"
|
||||
|
||||
echo "Append cache..."
|
||||
dd if=/dev/zero bs=1M conv=notrunc oflag=append count="$cache_size" of="$out" status=none
|
||||
|
||||
echo "Append data..."
|
||||
dd if=/dev/zero bs=1M conv=notrunc oflag=append count="$data_size" of="$out" status=none
|
||||
|
||||
echo "Partition table..."
|
||||
cat <<EOF | sfdisk "$out"
|
||||
$((part_position*mbs)),$((boot_size*mbs)),6
|
||||
$(((part_position+boot_size)*mbs)),$((system_size/512)),L
|
||||
$(((part_position+boot_size)*mbs+system_size/512)),$((cache_size*mbs)),L
|
||||
$(((part_position+boot_size)*mbs+system_size/512)),$((data_size*mbs)),L
|
||||
EOF
|
||||
|
||||
size=$(stat -c%s "$out")
|
||||
|
||||
if [[ "$(basename "$out_gz" .gz)" != "$(basename "$out_gz")" ]]; then
|
||||
gzip "$out"
|
||||
echo "Compressed image: $out (size: $size)."
|
||||
else
|
||||
echo "Uncompressed image: $out (size: $size)."
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue