Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -e
- # Check if script is run as root
- if [ "$EUID" -ne 0 ]; then
- echo "Please run as root"
- exit 1
- fi
- echo "Starting SD card to eMMC copy process..."
- # Backup bootloader
- echo "Backing up bootloader from eMMC..."
- dd if=/dev/mmcblk0 of=/tmp/bootloader.backup bs=1M count=8
- # Clear existing partitions but preserve bootloader
- echo "Clearing existing partitions (preserving bootloader)..."
- dd if=/dev/zero of=/dev/mmcblk0 bs=1M seek=8 count=1
- # Create new partition table and partitions
- echo "Creating new partition table and partitions..."
- parted /dev/mmcblk0 mklabel msdos
- parted /dev/mmcblk0 mkpart primary 8MiB 495MiB
- parted /dev/mmcblk0 mkpart primary 495MiB 100%
- # Create filesystems
- echo "Creating filesystems..."
- mkfs.ext2 /dev/mmcblk0p1
- mkfs.ext4 /dev/mmcblk0p2
- # Create mount points
- echo "Creating mount points..."
- mkdir -p /mnt/emmc_boot
- mkdir -p /mnt/emmc_root
- # Mount partitions
- echo "Mounting partitions..."
- mount /dev/mmcblk0p1 /mnt/emmc_boot
- mount /dev/mmcblk0p2 /mnt/emmc_root
- # Copy filesystems
- echo "Copying root filesystem..."
- cp -ax / /mnt/emmc_root/
- echo "Copying boot filesystem..."
- cp -ax /boot/* /mnt/emmc_boot/
- # Get new UUIDs
- BOOT_UUID=$(blkid -s UUID -o value /dev/mmcblk0p1)
- ROOT_UUID=$(blkid -s UUID -o value /dev/mmcblk0p2)
- # Update fstab
- echo "Updating fstab with new UUIDs..."
- cat << EOF > /mnt/emmc_root/etc/fstab
- # Static information about the filesystems.
- # See fstab(5) for details.
- # <file system> <dir> <type> <options> <dump> <pass>
- UUID=${BOOT_UUID} /boot ext2 defaults 0 1
- UUID=${ROOT_UUID} / ext4 defaults 0 1
- EOF
- # Update boot.cmd for eMMC
- echo "Updating boot configuration..."
- cat << EOF > /mnt/emmc_boot/boot.cmd
- setenv bootargs "root=UUID=${ROOT_UUID} rw rootwait console=tty1 console=ttyS2,1500000"
- # Load the DTB
- load \${devtype} \${devnum}:\${partition} \${fdt_addr_r} /dtbs/rockchip/rk3566-odroid-m1s.dtb
- fdt addr \${fdt_addr_r}
- # Load kernel and initramfs
- load \${devtype} \${devnum}:\${partition} \${kernel_addr_r} /Image
- load \${devtype} \${devnum}:\${partition} \${ramdisk_addr_r} /initramfs-linux.img
- setenv initrd_size \${filesize}
- # Boot with kernel and initramfs
- booti \${kernel_addr_r} \${ramdisk_addr_r}:\${initrd_size} \${fdt_addr_r}
- EOF
- # Generate new boot.scr
- echo "Generating new boot.scr..."
- mkimage -A arm64 -O linux -T script -C none -n "Boot Script" -d /mnt/emmc_boot/boot.cmd /mnt/emmc_boot/boot.scr
- # Sync and unmount
- echo "Syncing filesystems..."
- sync
- echo "Unmounting partitions..."
- umount /mnt/emmc_boot
- umount /mnt/emmc_root
- echo "Copy to eMMC complete!"
- echo "You can now power off the system and remove the SD card."
- echo "The system should boot from eMMC after restart."
- echo "Keep your SD card as a backup until you verify the eMMC boot works properly."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement