Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
targets
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Feed
targets
Commits
f51d6ff2
Commit
f51d6ff2
authored
6 months ago
by
Mikhail Kshevetskiy
Browse files
Options
Downloads
Patches
Plain Diff
airoha: write gpt partitions during first upgrade from pre-GPT_on_eMMC era
parent
cf81164b
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!1364
airoha: GPT support
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
airoha/image/upgrade-bundle/upgrade
+83
-0
83 additions, 0 deletions
airoha/image/upgrade-bundle/upgrade
with
83 additions
and
0 deletions
airoha/image/upgrade-bundle/upgrade
+
83
−
0
View file @
f51d6ff2
#!/bin/sh
#!/bin/sh
source
/lib/functions.sh
source
/lib/functions/iopsys-system-layout.sh
source
/lib/upgrade/platform.sh
invocation
=
$1
invocation
=
$1
image
=
$2
image
=
$2
log_tag
=
"
$0
$1
"
log_tag
=
"
$0
$1
"
gpt_era_bootloader_version
=
8000
old_bootloader_marker
=
"/tmp/_pre_GPT_on_eMMC_bootloader_detected"
log
()
{
log
()
{
logger
-s
-p
daemon.info
-t
"
$log_tag
"
--
"
$@
"
logger
-s
-p
daemon.info
-t
"
$log_tag
"
--
"
$@
"
}
}
do_pre_upgrade
()
{
do_pre_upgrade
()
{
local
image
=
$1
local
image
=
$1
local
bootloader_dev
local
bootloader_version
log
"- pre_upgrade -"
log
"- pre_upgrade -"
if
[
!
-d
/sys/bus/platform/drivers/en75xx-spi
]
;
then
if
[
!
-d
/sys/bus/platform/drivers/en75xx-spi
]
;
then
log
"ERROR: en7xx-spi bus driver is not detected. For upgrade from IOWRT 6.5, please upgrade to IOWRT 7.3.x (or 7.2.x or 7.1.x) first."
log
"ERROR: en7xx-spi bus driver is not detected. For upgrade from IOWRT 6.5, please upgrade to IOWRT 7.3.x (or 7.2.x or 7.1.x) first."
...
@@ -19,15 +29,88 @@ do_pre_upgrade() {
...
@@ -19,15 +29,88 @@ do_pre_upgrade() {
log
"ERROR: spi-nand flash driver is not detected. For upgrade from IOWRT 6.5, please upgrade to IOWRT 7.3.x (or 7.2.x or 7.1.x) first."
log
"ERROR: spi-nand flash driver is not detected. For upgrade from IOWRT 6.5, please upgrade to IOWRT 7.3.x (or 7.2.x or 7.1.x) first."
exit
1
exit
1
fi
fi
if
[
"
$(
get_root_device_type
)
"
=
emmc
]
;
then
# booted from eMMC
bootloader_dev
=
$(
get_bootloader_dev
)
if
[
-e
"
${
bootloader_dev
}
"
]
;
then
bootloader_version
=
$(
get_bootloader_version
$bootloader_dev
)
if
[
${
bootloader_version
}
-lt
${
gpt_era_bootloader_version
}
]
;
then
# old bootloader detected, create a mark for post_upgrade
touch
${
old_bootloader_marker
}
else
# no additional steps required, remove mark (if someone create it)
rm
-f
${
old_bootloader_marker
}
fi
fi
fi
return
0
return
0
}
}
do_post_upgrade
()
{
do_post_upgrade
()
{
local
image
=
$1
local
image
=
$1
local
bootloader_dev
local
bootloader_version
log
"- post_upgrade -"
log
"- post_upgrade -"
if
[
"
$(
get_root_device_type
)
"
=
emmc
]
;
then
# booted from eMMC
bootloader_dev
=
$(
get_bootloader_dev
)
if
[
-e
"
${
bootloader_dev
}
"
]
;
then
bootloader_version
=
$(
get_bootloader_version
$bootloader_dev
)
if
[
${
bootloader_version
}
-ge
${
gpt_era_bootloader_version
}
]
&&
[
-e
${
old_bootloader_marker
}
]
;
then
# bootloader was just upgraded from pre-GPT_on_eMMC era.
# GPT partitions on eMMC needs to be created
do_gpt_partitions_create
$image
fi
fi
fi
return
0
return
0
}
}
get_bootloader_dev
()
{
local
dev
dev
=
$(
system_layout_device_spec_to_device block:bootloader 2>/dev/null
)
[
!
-e
"
$dev
"
]
&&
dev
=
$(
__get_bootloader_device 2>/dev/null
)
[
!
-e
"
$dev
"
]
&&
dev
=
""
echo
"
$dev
"
}
get_bootloader_version
()
{
local
iopsys_bootloader_version
=
"0"
local
loader_device
=
"
$1
"
json_init
json_load
"
$(
strings
"
$loader_device
"
|
awk
'/938f0820-2ffb-11e7-bbc9-2f21351ee6fb:/ {$1=""; print $0}'
2> /dev/null |
head
-n1
|
awk
'{$1=$1; print}'
)
"
json_get_vars iopsys_bootloader_version
iopsys_bootloader_version
=
$((
iopsys_bootloader_version
))
echo
"
${
iopsys_bootloader_version
}
"
}
do_gpt_partitions_create
()
{
local
image
=
"
$1
"
local
board_name
=
$(
board_name
)
local
block_dev
=
$(
get_real_root_device |
sed
's/p[0-9]*$//'
)
local
gpt_primary_header gpt_primary_entry gpt_alternate
local
gpt_primary_entry_offset gpt_alternate_offset
gpt_primary_header
=
$(
fdtget
-t
s
"
$image
"
"/configurations/
${
board_name
}
"
gpt-primary-header 2>/dev/null
)
gpt_primary_entry
=
$(
fdtget
-t
s
"
$image
"
"/configurations/
${
board_name
}
"
gpt-primary-entry 2>/dev/null
)
gpt_primary_entry_offset
=
$(
fdtget
-t
u
"
$image
"
"/configurations/
${
board_name
}
"
gpt-primary-entry-offset 2>/dev/null
)
gpt_alternate
=
$(
fdtget
-t
s
"
$image
"
"/configurations/
${
board_name
}
"
gpt-alternate 2>/dev/null
)
gpt_alternate_offset
=
$(
fdtget
-t
u
"
$image
"
"/configurations/
${
board_name
}
"
gpt-alternate-offset 2>/dev/null
)
if
[
0
-lt
${
gpt_primary_entry_offset
}
]
&&
[
0
-lt
${
gpt_alternate_offset
}
]
;
then
log
"Writing GPT partition table to
${
block_dev
}
device..."
[
$?
-eq
0
]
&&
fdtextract
-e
${
gpt_primary_header
}
${
image
}
|
dd
of
=
${
block_dev
}
bs
=
512
count
=
2
[
$?
-eq
0
]
&&
fdtextract
-e
${
gpt_primary_entry
}
${
image
}
|
dd
of
=
${
block_dev
}
bs
=
512
count
=
32
seek
=
${
gpt_primary_entry_offset
}
[
$?
-eq
0
]
&&
fdtextract
-e
${
gpt_alternate
}
${
image
}
|
dd
of
=
${
block_dev
}
bs
=
512
count
=
33
seek
=
${
gpt_alternate_offset
}
[
$?
-eq
0
]
&&
sync
"
${
block_dev
}
"
fi
return
$?
;
}
case
$invocation
in
case
$invocation
in
pre_upgrade
)
pre_upgrade
)
do_pre_upgrade
$image
do_pre_upgrade
$image
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment