124 lines
4.2 KiB
Bash
Executable File
124 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# This script inserts NAND simulator module to emulate NAND flash of specified
|
|
# size.
|
|
#
|
|
# Author: Artem Bityutskiy
|
|
#
|
|
|
|
# Check if nandsim module is loaded
|
|
function nandsim_loaded()
|
|
{
|
|
local NANDSIM=`lsmod | grep nandsim`
|
|
if [ -n "$NANDSIM" ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
nandsim_loaded
|
|
if (( $? != 0 )); then
|
|
echo "Error: nandsim is already loaded"
|
|
exit 1
|
|
fi
|
|
|
|
if (( $# < 1 )); then
|
|
echo "Load NAND simulator to simulate flash of a specified size."
|
|
echo ""
|
|
echo "Usage: ./load_nandsim.sh <size in MiB> <eraseblock size in KiB>"
|
|
echo " <page size (512 or 2048)>"
|
|
echo ""
|
|
echo "Only the first parameter is mandatory. Default eraseblock size"
|
|
echo "is 16KiB, default NAND page size is 512 bytes."
|
|
echo ""
|
|
echo "Only the following combinations are supported:"
|
|
echo "--------------------------------------------------"
|
|
echo "| size (MiB) | EB size (KiB) | Page size (bytes) |"
|
|
echo "--------------------------------------------------"
|
|
echo "| 16 | 16 | 512 |"
|
|
echo "| 32 | 16 | 512 |"
|
|
echo "| 64 | 16 | 512 |"
|
|
echo "| 128 | 16 | 512 |"
|
|
echo "| 256 | 16 | 512 |"
|
|
echo "| 64 | 64 | 2048 |"
|
|
echo "| 64 | 128 | 2048 |"
|
|
echo "| 64 | 256 | 2048 |"
|
|
echo "| 64 | 512 | 2048 |"
|
|
echo "| 128 | 64 | 2048 |"
|
|
echo "| 128 | 128 | 2048 |"
|
|
echo "| 128 | 256 | 2048 |"
|
|
echo "| 128 | 512 | 2048 |"
|
|
echo "| 256 | 64 | 2048 |"
|
|
echo "| 256 | 128 | 2048 |"
|
|
echo "| 256 | 256 | 2048 |"
|
|
echo "| 256 | 512 | 2048 |"
|
|
echo "| 512 | 64 | 2048 |"
|
|
echo "| 512 | 128 | 2048 |"
|
|
echo "| 512 | 256 | 2048 |"
|
|
echo "| 512 | 512 | 2048 |"
|
|
echo "| 1024 | 64 | 2048 |"
|
|
echo "| 1024 | 128 | 2048 |"
|
|
echo "| 1024 | 256 | 2048 |"
|
|
echo "| 1024 | 512 | 2048 |"
|
|
echo "--------------------------------------------------"
|
|
exit 1
|
|
fi
|
|
|
|
SZ=$1
|
|
EBSZ=$2
|
|
PGSZ=$3
|
|
if [[ $# == '1' ]]; then
|
|
EBSZ=16
|
|
PGSZ=512
|
|
elif [[ $# == '2' ]]; then
|
|
PGSZ=512
|
|
fi
|
|
|
|
if (( $PGSZ == 512 && $EBSZ != 16 )); then
|
|
echo "Error: only 16KiB eraseblocks are possible in case of 512 bytes page"
|
|
exit 1
|
|
fi
|
|
|
|
if (( $PGSZ == 512 )); then
|
|
case $SZ in
|
|
16) modprobe nandsim first_id_byte=0x20 second_id_byte=0x33 ;;
|
|
32) modprobe nandsim first_id_byte=0x20 second_id_byte=0x35 ;;
|
|
64) modprobe nandsim first_id_byte=0x20 second_id_byte=0x36 ;;
|
|
128) modprobe nandsim first_id_byte=0x20 second_id_byte=0x78 ;;
|
|
256) modprobe nandsim first_id_byte=0x20 second_id_byte=0x71 ;;
|
|
*) echo "Flash size ${SZ}MiB is not supported, try 16, 32, 64 or 256"
|
|
exit 1 ;;
|
|
esac
|
|
elif (( $PGSZ == 2048 )); then
|
|
case $EBSZ in
|
|
64) FOURTH=0x05 ;;
|
|
128) FOURTH=0x15 ;;
|
|
256) FOURTH=0x25 ;;
|
|
512) FOURTH=0x35 ;;
|
|
*) echo "Eraseblock ${EBSZ}KiB is not supported"
|
|
exit 1
|
|
esac
|
|
|
|
case $SZ in
|
|
64) modprobe nandsim first_id_byte=0x20 second_id_byte=0xa2 third_id_byte=0x00 fourth_id_byte=$FOURTH ;;
|
|
128) modprobe nandsim first_id_byte=0xec second_id_byte=0xa1 third_id_byte=0x00 fourth_id_byte=$FOURTH ;;
|
|
256) modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=$FOURTH ;;
|
|
512) modprobe nandsim first_id_byte=0x20 second_id_byte=0xac third_id_byte=0x00 fourth_id_byte=$FOURTH ;;
|
|
1024) modprobe nandsim first_id_byte=0xec second_id_byte=0xd3 third_id_byte=0x51 fourth_id_byte=$FOURTH ;;
|
|
*) echo "Unable to emulate ${SZ}MiB flash with ${EBSZ}KiB eraseblock"
|
|
exit 1
|
|
esac
|
|
else
|
|
echo "Error: bad NAND page size ${PGSZ}KiB, it has to be either 512 or 2048"
|
|
exit 1
|
|
fi
|
|
|
|
if (( $? != 0 )); then
|
|
echo "Error: cannot load nandsim"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Loaded NAND simulator (${SZ}MiB, ${EBSZ}KiB eraseblock, $PGSZ bytes NAND page)"
|
|
exit 0
|