|
1 | 1 | #!/bin/bash |
2 | 2 |
|
| 3 | +error() { |
| 4 | + echo "$@" 1>&2 |
| 5 | +} |
| 6 | + |
3 | 7 | if [[ "$(id -u)" -ne "0" ]]; then |
4 | | - echo "This script requires root." |
| 8 | + error "This script requires root." |
5 | 9 | exit 1 |
6 | 10 | fi |
7 | 11 |
|
8 | 12 | if ! which nandwrite &>/dev/null; then |
9 | | - echo "Install mtd-utils with 'apt-get install mtd-utils'" |
| 13 | + error "Install mtd-utils with 'apt-get install mtd-utils'" |
10 | 14 | exit 1 |
11 | 15 | fi |
12 | 16 |
|
13 | 17 | if ! which flash_erase &>/dev/null; then |
14 | | - echo "Install mtd-utils with 'apt-get install mtd-utils'" |
| 18 | + error "Install mtd-utils with 'apt-get install mtd-utils'" |
15 | 19 | exit 1 |
16 | 20 | fi |
17 | 21 |
|
18 | 22 | if ! PACKAGE_NAME=$(dpkg -S "$0" | cut -d: -f1); then |
19 | | - exit "Unknown package installed." |
| 23 | + error "Unknown package installed." |
20 | 24 | exit 1 |
21 | 25 | fi |
22 | 26 |
|
23 | 27 | if ! debsums -s "${PACKAGE_NAME}"; then |
24 | | - echo "Verification of '${PACKAGE_NAME}' failed." |
25 | | - echo "Your disk might have got corrupted." |
| 28 | + error "Verification of '${PACKAGE_NAME}' failed." |
| 29 | + error "Your disk might have got corrupted." |
26 | 30 | if [[ -z "IGNORE_VERIFICATION" ]]; then |
27 | | - echo "Use 'export IGNORE_VERIFICATION=1'" |
| 31 | + error "Use 'export IGNORE_VERIFICATION=1'" |
28 | 32 | exit 1 |
29 | 33 | fi |
30 | 34 | fi |
31 | 35 |
|
32 | 36 | case "$PACKAGE_NAME" in |
33 | | - *-rockchip-rock64-*) |
| 37 | + *-rock64-*) |
34 | 38 | SD_LOADER=/usr/lib/u-boot-rock64/rksd_loader.img |
35 | 39 | SPI_LOADER=/usr/lib/u-boot-rock64/rksd_loader.img |
36 | | - BOARD=rock64 |
| 40 | + SPI_OFFSET=$((64*512)) |
| 41 | + BOARD=pine64,rock64 |
37 | 42 | ;; |
38 | 43 |
|
39 | | - *-rockchip-rockpro64-*) |
| 44 | + *-rockpro64-*) |
40 | 45 | SD_LOADER=/usr/lib/u-boot-rockpro64/rksd_loader.img |
41 | 46 | SPI_LOADER=/usr/lib/u-boot-rockpro64/rkspi_loader.img |
42 | | - BOARD=rockpro64 |
| 47 | + SPI_OFFSET=$((64*512)) |
| 48 | + BOARD=pine64,rockpro64 |
43 | 49 | ;; |
44 | 50 |
|
45 | | - *-rockchip-pinebookpro-*) |
| 51 | + *-pinebookpro-*) |
46 | 52 | SD_LOADER=/usr/lib/u-boot-pinebookpro/rksd_loader.img |
47 | 53 | SPI_LOADER=/usr/lib/u-boot-pinebookpro/rkspi_loader.img |
48 | | - BOARD=pinebookpro |
| 54 | + SPI_OFFSET=$((64*512)) |
| 55 | + BOARD=pine64,pinebookpro |
49 | 56 | ;; |
50 | 57 |
|
51 | | - *-rockchip-rockpi4b-*) |
| 58 | + *-rockpi4b-*) |
52 | 59 | SD_LOADER=/usr/lib/u-boot-rockpi4b/rksd_loader.img |
53 | 60 | SPI_LOADER=/usr/lib/u-boot-rockpi4b/rkspi_loader.img |
54 | | - BOARD=rockpi4b |
| 61 | + SPI_OFFSET=$((64*512)) |
| 62 | + BOARD=radxa,rockpi4b |
| 63 | + ;; |
| 64 | + |
| 65 | + *-rock5b-*) |
| 66 | + SD_LOADER=/usr/lib/u-boot-rock5b/rksd_loader.img |
| 67 | + SPI_LOADER=/usr/lib/u-boot-rock5b/rksd_loader.img |
| 68 | + SPI_OFFSET=$((64*512)) |
| 69 | + BOARD=radxa,rock-5b |
55 | 70 | ;; |
56 | 71 |
|
57 | 72 | *) |
58 | | - echo "Cannot detect board from $PACKAGE_NAME." |
| 73 | + error "Cannot detect board from $PACKAGE_NAME." |
59 | 74 | exit 1 |
60 | 75 | ;; |
61 | 76 | esac |
62 | 77 |
|
63 | 78 | if ! grep -qi "$BOARD" /proc/device-tree/compatible; then |
64 | | - echo "You are currently running on different board:" |
65 | | - echo "$(cat /proc/device-tree/model || true)" |
66 | | - echo "It may brick your device or the system unless" |
67 | | - echo "you know what are you doing." |
68 | | - echo "" |
| 79 | + error "You are currently running on different board:" |
| 80 | + error "$(cat /proc/device-tree/model || true)" |
| 81 | + error "It may brick your device or the system unless" |
| 82 | + error "you know what are you doing." |
| 83 | + error "" |
| 84 | +fi |
| 85 | + |
| 86 | +if [[ -f "$SPI_LOADER" ]]; then |
| 87 | + SPI_SIZE=$(stat -c%s "$SPI_LOADER") |
| 88 | +elif [[ -n "$SPI_LOADER" ]]; then |
| 89 | + error "The '$SPI_LOADER' is missing." |
| 90 | + SPI_SIZE=0 |
69 | 91 | fi |
70 | 92 |
|
71 | 93 | confirm() { |
@@ -101,17 +123,37 @@ boot_device() { |
101 | 123 | esac |
102 | 124 | } |
103 | 125 |
|
104 | | -version() { |
105 | | - local DEVICE="$(boot_device "$1")" |
106 | | - |
107 | | - echo -n "Current version: " |
108 | | - if strings "$DEVICE" | grep "^U-Boot [a-z0-9.-]*$"; then |
109 | | - echo -n "Board: " |
110 | | - strings "$DEVICE" | grep -E "^board=" |
111 | | - echo -n "FDT: " |
112 | | - strings "$DEVICE" | grep -E "^fdtfile=" |
| 126 | +version2() { |
| 127 | + echo "$1:" |
| 128 | + if VER=$(strings "$2" | grep "^U-Boot [0-9]*.[0-9]*-[a-z0-9.-]*$"); then |
| 129 | + echo "- Version: $VER" |
| 130 | + echo "- Board: $(strings "$2" | grep -E "^board=")" |
| 131 | + echo "- FDT: $(strings "$2" | grep -E "^fdtfile=")" |
113 | 132 | else |
114 | | - echo "not installed on $DEVICE." |
| 133 | + echo "- Not installed on $2." |
115 | 134 | fi |
116 | 135 | echo |
117 | 136 | } |
| 137 | + |
| 138 | +version() { |
| 139 | + version2 "Current" "$(boot_device "$1")" |
| 140 | +} |
| 141 | + |
| 142 | +find_mtd() { |
| 143 | + for mtd in /sys/class/mtd/mtd?; do |
| 144 | + local offset=0 |
| 145 | + [[ ! -e "$mtd/offset" ]] || offset=$(cat "$mtd/offset") |
| 146 | + local size=$(cat "$mtd/size") |
| 147 | + |
| 148 | + [[ $offset -le $SPI_OFFSET ]] || continue |
| 149 | + [[ $(($offset+$size)) -ge $(($SPI_OFFSET+$SPI_SIZE)) ]] || continue |
| 150 | + |
| 151 | + MTD=$(basename "$mtd") |
| 152 | + MTD_DEV="/dev/$MTD" |
| 153 | + MTD_OFFSET="$(($SPI_OFFSET-$offset))" |
| 154 | + return 0 |
| 155 | + done |
| 156 | + |
| 157 | + error "Could not find MTD device to wrote $SPI_SIZE bytes at $SPI_OFFSET." |
| 158 | + return 1 |
| 159 | +} |
0 commit comments