128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh -euf
 | |
| 
 | |
| #
 | |
| # This script inserts NAND simulator module to emulate NAND flash of specified
 | |
| # size.
 | |
| #
 | |
| # Author: Artem Bityutskiy
 | |
| #
 | |
| 
 | |
| fatal()
 | |
| {
 | |
|         echo "Error: $1" 1>&2
 | |
|         exit 1
 | |
| }
 | |
| 
 | |
| usage()
 | |
| {
 | |
| 	cat 1>&2 <<EOF
 | |
| Load NAND simulator to simulate flash of a specified size.
 | |
| 
 | |
| Usage: ${0##*/} <size in MiB> <eraseblock size in KiB> \\
 | |
|        <page size (512 or 2048)>
 | |
| 
 | |
| Only the first parameter is mandatory. Default eraseblock size
 | |
| is 16KiB, default NAND page size is 512 bytes.
 | |
| 
 | |
| Only the following combinations are supported:
 | |
| --------------------------------------------------
 | |
| | size (MiB) | EB size (KiB) | Page size (bytes) |
 | |
| --------------------------------------------------
 | |
| | 16         | 16            | 512               |
 | |
| | 32         | 16            | 512               |
 | |
| | 64         | 16            | 512               |
 | |
| | 128        | 16            | 512               |
 | |
| | 256        | 16            | 512               |
 | |
| | 64         | 64            | 2048              |
 | |
| | 64         | 128           | 2048              |
 | |
| | 64         | 256           | 2048              |
 | |
| | 64         | 512           | 2048              |
 | |
| | 128        | 64            | 2048              |
 | |
| | 128        | 128           | 2048              |
 | |
| | 128        | 256           | 2048              |
 | |
| | 128        | 512           | 2048              |
 | |
| | 256        | 64            | 2048              |
 | |
| | 256        | 128           | 2048              |
 | |
| | 256        | 256           | 2048              |
 | |
| | 256        | 512           | 2048              |
 | |
| | 512        | 64            | 2048              |
 | |
| | 512        | 128           | 2048              |
 | |
| | 512        | 256           | 2048              |
 | |
| | 512        | 512           | 2048              |
 | |
| | 1024       | 64            | 2048              |
 | |
| | 1024       | 128           | 2048              |
 | |
| | 1024       | 256           | 2048              |
 | |
| | 1024       | 512           | 2048              |
 | |
| --------------------------------------------------
 | |
| EOF
 | |
| }
 | |
| 
 | |
| if grep -q "NAND simulator" /proc/mtd; then
 | |
| 	fatal "nandsim is already loaded"
 | |
| fi
 | |
| 
 | |
| if [ "$#" -lt "1" ]; then
 | |
| 	usage
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| size="$1"
 | |
| eb_size="$2"
 | |
| page_size="$3"
 | |
| if [ "$#" = "1" ]; then
 | |
| 	eb_size="16"
 | |
| 	page_size="512"
 | |
| elif [ "$#" = "2" ]; then
 | |
| 	page_size="512"
 | |
| fi
 | |
| 
 | |
| if [ "$page_size" -eq 512 ] && [ "$eb_size" -ne "16" ]; then
 | |
| 	fatal "only 16KiB eraseblocks are possible in case of 512 bytes page"
 | |
| fi
 | |
| 
 | |
| first=
 | |
| second=
 | |
| third=
 | |
| fourth=
 | |
| 
 | |
| if [ "$page_size" -eq "512" ]; then
 | |
| 	first="0x20"
 | |
| 	case "$size" in
 | |
| 	16)  second=0x33 ;;
 | |
| 	32)  second=0x35 ;;
 | |
| 	64)  second=0x36 ;;
 | |
| 	128) second=0x78 ;;
 | |
| 	256) second=0x71 ;;
 | |
| 	*) fatal "flash size ${size}MiB is not supported, try 16, 32, 64 or 256"
 | |
| 	esac
 | |
| elif [ "$page_size" -eq "2048" ]; then
 | |
| 	case "$eb_size" in
 | |
| 	64)  fourth="0x05" ;;
 | |
| 	128) fourth="0x15" ;;
 | |
| 	256) fourth="0x25" ;;
 | |
| 	512) fourth="0x35" ;;
 | |
| 	*)   fatal "eraseblock ${eb_size}KiB is not supported"
 | |
| 	esac
 | |
| 
 | |
| 
 | |
| 	case "$size" in
 | |
| 	64)   first="0x20"; second="0xa2"; third="0x00 ";;
 | |
| 	128)  first="0xec"; second="0xa1"; third="0x00 ";;
 | |
| 	256)  first="0x20"; second="0xaa"; third="0x00 ";;
 | |
| 	512)  first="0x20"; second="0xac"; third="0x00 ";;
 | |
| 	1024) first="0xec"; second="0xd3"; third="0x51 ";;
 | |
| 	*) fatal "unable to emulate ${size}MiB flash with ${eb_size}KiB eraseblock"
 | |
| 	esac
 | |
| else
 | |
| 	fatal "bad NAND page size ${page_size}KiB, it has to be either 512 or 2048"
 | |
| fi
 | |
| 
 | |
| first="first_id_byte=$first"
 | |
| second="second_id_byte=$second"
 | |
| [ -z "$third" ]  || third="third_id_byte=$third"
 | |
| [ -z "$fourth" ] || fourth="fourth_id_byte=$fourth"
 | |
| 
 | |
| modprobe nandsim "$first" "$second" $third $fourth
 | |
| 
 | |
| echo "Loaded NAND simulator (${size}MiB, ${eb_size}KiB eraseblock, $page_size bytes NAND page)"
 | 
