blob: 96b451228076623c472c7d65f2557e8f9e37ceac (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/usr/bin/env bash
# script flash: utilise flashrom pour flasher une image ROM de Libreboot.
#
# Copyright (C) 2014, 2015 Leah Rowe <info@minifree.org>
# Ce programme est un logiciel libre: vous pouvez le redistribuer et/ou
# le modifier sous les termes de la License Publique GNU Générale publiée
# comme telle par la Free Software Foundation, soit la version 3 de la License,
# ou (selon votre choix) n'importe quelle version plus récente.
#
# Ce programme est fournit dans l'espoir qu'il sera utile, mais SANS AUCUNE
# GARANTIE; sans même la garantie implicite de MARCHANBILITÉ ou de RÉPONSE
# À UN BUT PARTICULIER. Voyez la License Publique GNU générale pour plus
# de détails.
#
# Vous devriez avoir reçu une copie de la License Publique GNU générale
# avec ce programme. Si ce n'est pas le cas, visitez
# <http://www.gnu.org/licenses/>.
#
# So that I one day find it again
# http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
## Don't add here. errors are expected.
[ "x${DEBUG+set}" = 'xset' ] && set -v
# set -u -e
if [ ${EUID} -ne 0 ]; then
printf "Ce script doit être lancé en tant que root\n"
exit 1
fi
arch="unknown"
if [ "$(uname -i)" = "i686" ] || [ "$(uname -m)" = "i686" ]; then
arch="i686"
elif [ "$(uname -i)" = "x86_64" ] || [ "$(uname -m)" = "x86_64" ]; then
arch="x86_64"
else
printf "Ce script doit être exécuté sur un hôte i686 ou x86_64. x86_64 est recommandé.\n"
exit 1
fi
usage="usage: ./flash mode path/to/yourrom.rom"
availablemodes="update, forceupdate, i945lenovo_firstflash, i945lenovo_secondflash, i945apple_firstflash"
mode="unknown"
rompath="unknown"
# User specified no or too few/many parameters
if [ $# -lt 2 ]; then
printf "%s\n" "${usage}"
printf "Vous avez besoin de spécifier exactement un mode et un fichier.\n"
printf "%s\n" "${availablemodes}"
exit 1
fi
mode="${1}"
rompath="${2}"
# User specified an invalid mode of operation
if [ "${mode}" != "update" ] && [ "${mode}" != "forceupdate" ] && [ "${mode}" != "i945lenovo_firstflash" ] && [ "${mode}" != "i945lenovo_secondflash" ] && [ "${mode}" != "i945apple_firstflash" ]; then
printf "%s\n" "${usage}"
printf "Mode invalide. Modes disponibles: %s\n" "${availablemodes}"
exit 1
else
printf "Mode sélectionné: %s\n" "${mode}"
fi
# The specified file does not exist
if [ ! -f "${rompath}" ]; then
printf "Fichier non trouvé!\n"
exit 1
fi
flashrom="unknown"
if [ -f "build" ]; then
# git or libreboot_src
flashrom="./flashrom/flashrom"
else
# libreboot_util
flashrom="./flashrom/${arch}/flashrom"
fi
if [ ! -f "${flashrom}" ]; then
printf "L'exécutable flashrom n'est pas présent.\n"
exit 1
fi
# i945 lenovobios
bucts="unknown"
flashrom_lenovobios_sst="unknown"
flashrom_lenovobios_macronix="unknown"
if [ "${mode}" = "i945lenovo_firstflash" ] || [ "${mode}" = "i945lenovo_secondflash" ]; then
if [ -f "build" ]; then
# git or libreboot_src
bucts="./bucts/bucts"
flashrom_lenovobios_sst="./flashrom/flashrom_lenovobios_sst"
flashrom_lenovobios_macronix="./flashrom/flashrom_lenovobios_macronix"
else
# libreboot_util
bucts="./bucts/${arch}/bucts"
flashrom_lenovobios_sst="./flashrom/${arch}/flashrom_lenovobios_sst"
flashrom_lenovobios_macronix="./flashrom/${arch}/flashrom_lenovobios_macronix"
fi
# anti-bricking precaution
if [ ! -f "${bucts}" ]; then
printf "L'exécutable bucts n'est pas présent. ABANDON pour protéger le système du bousillage (bricking).\n"
exit 1
fi
# fail if flashrom is not present
if [ ! -f "${flashrom_lenovobios_sst}" ] || [ ! -f "${flashrom_lenovobios_macronix}" ]; then
printf "Les exécutables flashrom ne sont pas présentes.\n"
exit 1
fi
fi
if [ "${mode}" = "update" ]; then
${flashrom} -p internal -w "${rompath}"
elif [ "${mode}" = "forceupdate" ]; then
${flashrom} -p internal:boardmismatch=force,laptop=force_I_want_a_brick -w "${rompath}"
elif [ "${mode}" = "i945apple_firstflash" ]; then
${flashrom} -p internal:laptop=force_I_want_a_brick -w "${rompath}"
elif [ "${mode}" = "i945lenovo_firstflash" ]; then
${bucts} 1 # needed to prevent bricks.
# One will fail (this is harmless), and the other will succeed.
${flashrom_lenovobios_sst} -p internal -w "${rompath}"
${flashrom_lenovobios_macronix} -p internal -w "${rompath}"
elif [ "${mode}" = "i945lenovo_secondflash" ]; then
${flashrom} -p internal:laptop=force_I_want_a_brick -w "${rompath}"
${bucts} 0
fi
|