mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	RISC-V is a new CPU architecture aimed to be fully free and open. This
target will add support for it, based on 5.15.
Supports running on:
 - HiFive Unleashed - FU540, first generation
 - HiFive Unmatched - FU740, current latest generation, PCIe
SD-card images are generated, where the partitions are required to have
specific type codes. As it is commonplace nowadays, OpenSBI is used as the
first stage, with U-boot following as the proper bootloader.
Specifications:
HiFive Unleashed:
 - CPU: SiFive FU540 quad-core RISC-V (U54, RV64IMAFDC or RV64GC)
 - Memory: 8Gb
 - Ethernet: 1x 10/100/1000
 - Console: via microUSB
HiFive Unmatched:
 - CPU: SiFive FU740 quad-core RISC-V (U74, RV64IMAFDCB or RV64GCB)
 - Memory: 16Gb
 - Ethernet: 1x 10/100/1000
 - USB: 4x USB 3.2
 - PCIe:  - 1x PCIe Gen3 x8
          - 1x M.2 key M (PCIe x4)
          - 1x M.2 Key E (PCIe x1 / USB2.0)
 - Console: via microUSB
Installation:
Standard SD-card installation via dd-ing the generated image to
an SD-card of at least 256Mb.
Signed-off-by: Zoltan HERPAI <wigyori@uid0.hu>
		
	
			
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| platform_check_image() {
 | |
| 	local diskdev partdev diff
 | |
| 
 | |
| 	export_bootdevice && export_partdevice diskdev 0 || {
 | |
| 		echo "Unable to determine upgrade device"
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	get_partitions "/dev/$diskdev" bootdisk
 | |
| 
 | |
| 	#extract the boot sector from the image
 | |
| 	get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
 | |
| 
 | |
| 	get_partitions /tmp/image.bs image
 | |
| 
 | |
| 	#compare tables
 | |
| 	diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | |
| 
 | |
| 	rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
 | |
| 
 | |
| 	if [ -n "$diff" ]; then
 | |
| 		echo "Partition layout has changed. Full image will be written."
 | |
| 		ask_bool 0 "Abort" && exit 1
 | |
| 		return 0
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| platform_copy_config() {
 | |
| 	local partdev
 | |
| 
 | |
| 	if export_partdevice partdev 3; then
 | |
| 		mount -t vfat -o rw,noatime "/dev/$partdev" /mnt
 | |
| 		cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
 | |
| 		umount /mnt
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| platform_do_upgrade() {
 | |
| 	local diskdev partdev diff
 | |
| 
 | |
| 	export_bootdevice && export_partdevice diskdev 0 || {
 | |
| 		echo "Unable to determine upgrade device"
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	sync
 | |
| 
 | |
| 	if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
 | |
| 		get_partitions "/dev/$diskdev" bootdisk
 | |
| 
 | |
| 		#extract the boot sector from the image
 | |
| 		get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
 | |
| 
 | |
| 		get_partitions /tmp/image.bs image
 | |
| 
 | |
| 		#compare tables
 | |
| 		diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | |
| 	else
 | |
| 		diff=1
 | |
| 	fi
 | |
| 
 | |
| 	if [ -n "$diff" ]; then
 | |
| 		get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
 | |
| 
 | |
| 		# Separate removal and addtion is necessary; otherwise, partition 1
 | |
| 		# will be missing if it overlaps with the old partition 2
 | |
| 		partx -d - "/dev/$diskdev"
 | |
| 		partx -a - "/dev/$diskdev"
 | |
| 
 | |
| 		return 0
 | |
| 	fi
 | |
| 
 | |
| 	#iterate over each partition from the image and write it to the boot disk
 | |
| 	while read part start size; do
 | |
| 		if export_partdevice partdev $part; then
 | |
| 			echo "Writing image to /dev/$partdev..."
 | |
| 			get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
 | |
| 		else
 | |
| 			echo "Unable to find partition $part device, skipped."
 | |
| 		fi
 | |
| 	done < /tmp/partmap.image
 | |
| 
 | |
| 	#copy partition uuid
 | |
| 	echo "Writing new UUID to /dev/$diskdev..."
 | |
| 	get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
 | |
| }
 |