Initial commit
This commit is contained in:
commit
85e58e5d32
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
./dtb-6.1.10-nabu
|
||||
./generate_gki_certificate.py
|
||||
./linux.boot.img
|
||||
./mkbootimg.py
|
||||
./vmlinuz-6.1.10-nabu
|
107
mklonimg.cmd
Executable file
107
mklonimg.cmd
Executable file
|
@ -0,0 +1,107 @@
|
|||
@(set "0=%~f0"^)#) & powershell -nop -c iex([io.file]::ReadAllText($env:0)) & exit /b
|
||||
$CMDLINE = "root=PARTLABEL=linux loglevel=3"
|
||||
|
||||
function Log {
|
||||
Write-Host -NoNewline "==> " -ForegroundColor Green
|
||||
Write-Host "$args"
|
||||
}
|
||||
|
||||
function LogErr {
|
||||
Write-Host -NoNewline "==> " -ForegroundColor Red
|
||||
Write-Host "$args"
|
||||
}
|
||||
|
||||
|
||||
$PYTHON = if (Get-Command python -ErrorAction SilentlyContinue) {
|
||||
"python"
|
||||
} else {
|
||||
LogErr "Python 3 not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Begin script
|
||||
|
||||
if ($args.Count -eq 2) {
|
||||
$VMLINUZ = $args[0]
|
||||
$DTB = $args[1]
|
||||
$INTERACTIVE = $false
|
||||
} else {
|
||||
$VMLINUZ = Read-Host "Drag and drop vmlinuz here and press enter"
|
||||
$DTB = Read-Host "Drag and drop dtb here and press enter"
|
||||
$INTERACTIVE = $true
|
||||
}
|
||||
|
||||
# Check if files exist
|
||||
if (-not (Test-Path $VMLINUZ)) {
|
||||
LogErr "vmlinuz not found at $VMLINUZ"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $DTB)) {
|
||||
LogErr "dtb not found at $DTB"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Download mkbootimg and related files if not present
|
||||
if (-not (Test-Path ./mkbootimg.py) -or -not (Test-Path ./generate_gki_certificate.py)) {
|
||||
Log "Downloading mkbootimg from Google"
|
||||
|
||||
$err = $false
|
||||
|
||||
try {
|
||||
$mkbootimgUrl = "https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/main/mkbootimg.py?format=text"
|
||||
$mkbootimgContent = (Invoke-WebRequest -Uri $mkbootimgUrl).Content
|
||||
$mkbootimgDecoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($mkbootimgContent))
|
||||
$mkbootimgDecoded = $mkbootimgDecoded -replace 'from gki.generate_gki_certificate import generate_gki_certificate', 'from generate_gki_certificate import generate_gki_certificate'
|
||||
$mkbootimgDecoded | Out-File -FilePath ./mkbootimg.py -Encoding UTF8
|
||||
} catch {
|
||||
$err = $true
|
||||
}
|
||||
|
||||
try {
|
||||
$gkiCertUrl = "https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/main/gki/generate_gki_certificate.py?format=text"
|
||||
$gkiCertContent = (Invoke-WebRequest -Uri $gkiCertUrl).Content
|
||||
$gkiCertDecoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($gkiCertContent))
|
||||
$gkiCertDecoded | Out-File -FilePath ./generate_gki_certificate.py -Encoding UTF8
|
||||
} catch {
|
||||
$err = $true
|
||||
}
|
||||
|
||||
if ($err) {
|
||||
LogErr "Failed to download mkbootimg"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Combine vmlinuz and dtb into a single zImage file
|
||||
try {
|
||||
Get-Content -Path $VMLINUZ, $DTB -AsByteStream -Read 1024 | Set-Content -Path .\zImage -AsByteStream
|
||||
} catch {
|
||||
try {
|
||||
Get-Content -Path $VMLINUZ, $DTB -Encoding Byte -Read 1024 | Set-Content -Path .\zImage -Encoding Byte
|
||||
} catch {
|
||||
LogErr "Failed to create zImage"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Create the boot image using Python script
|
||||
$pythonCmd = "$PYTHON mkbootimg.py --kernel zImage --cmdline `"$CMDLINE`" --base 0x00000000 --kernel_offset 0x00008000 --tags_offset 0x00000100 --pagesize 4096 --id -o linux.boot.img"
|
||||
Invoke-Expression $pythonCmd | Out-Null
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
LogErr "Failed to create boot image"
|
||||
Remove-Item .\zImage
|
||||
exit 1
|
||||
} else {
|
||||
Log "Created: linux.boot.img"
|
||||
}
|
||||
|
||||
# Clean up
|
||||
Remove-Item .\zImage
|
||||
Remove-Item -Recurse -Force .\__pycache__
|
||||
|
||||
if ($INTERACTIVE) {
|
||||
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
|
||||
}
|
105
mklonimg.sh
Executable file
105
mklonimg.sh
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# mkbootimg is the property of The Android Open Source Project and licensed under the Apache License, Version 2.0
|
||||
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
CMDLINE="root=PARTLABEL=linux loglevel=3"
|
||||
|
||||
VMLINUZ="/boot/efi/vmlinuz-6.1.10-nabu"
|
||||
DTB="/boot/efi/dtb-6.1.10-nabu"
|
||||
|
||||
function log() {
|
||||
printf "\e[1m\e[92m==>\e[0m \e[1m%s\e[0m\n" "$*"
|
||||
}
|
||||
|
||||
function log_err() {
|
||||
printf "\e[1m\e[31m==>\e[0m \e[1m%s\e[0m\n" "$*"
|
||||
}
|
||||
|
||||
function sigterm_handler() {
|
||||
printf "\e[1m\e[31m>\e[0m \e[1m%s\e[0m\n" "Shutdown signal received."
|
||||
exit 1
|
||||
}
|
||||
|
||||
trap 'trap " " SIGINT SIGTERM SIGHUP; kill 0; wait; sigterm_handler' SIGINT SIGTERM SIGHUP
|
||||
|
||||
which base64 > /dev/null 2>&1 || {
|
||||
log_err "base64 not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
which curl > /dev/null 2>&1 || {
|
||||
log_err "curl not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if which python3 > /dev/null 2>&1; then
|
||||
PYTHON="python3"
|
||||
elif which python > /dev/null 2>&1 && [[ "$(python -V)" =~ "Python 3" ]]; then
|
||||
PYTHON="python"
|
||||
else
|
||||
log_err "python 3 not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if which doas > /dev/null 2>&1; then
|
||||
SUDO=doas
|
||||
elif which sudo > /dev/null 2>&1; then
|
||||
SUDO=sudo
|
||||
elif [ "$(id -u)" -eq "0" ]; then
|
||||
SUDO=""
|
||||
else
|
||||
log_err "sudo/doas not found"
|
||||
fi
|
||||
|
||||
|
||||
# Begin script
|
||||
|
||||
if [ $# -eq 2 ]; then
|
||||
VMLINUZ="$1"
|
||||
DTB="$2"
|
||||
else
|
||||
log "Using default vmlinuz and dtb path"
|
||||
log "vmlinuz: $VMLINUZ"
|
||||
log "dtb: $DTB"
|
||||
fi
|
||||
|
||||
[ -f "$VMLINUZ" ] || {
|
||||
log_err "vmlinuz not found at $VMLINUZ"
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ -f "$DTB" ] || {
|
||||
log_err "dtb not found at $DTB"
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ -r "$VMLINUZ" ] && [ -r "$DTB" ] && SUDO=""
|
||||
|
||||
{ [ -f ./mkbootimg.py ] && [ -f ./generate_gki_certificate.py ]; } || {
|
||||
log "Downloading mkbootimg from google"
|
||||
curl -s "https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/main/mkbootimg.py?format=text" \
|
||||
| base64 -d \
|
||||
| sed "s/from gki.generate_gki_certificate import generate_gki_certificate/from generate_gki_certificate import generate_gki_certificate/g" \
|
||||
> mkbootimg.py || ERR="1"
|
||||
curl -s "https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/main/gki/generate_gki_certificate.py?format=text" \
|
||||
| base64 -d \
|
||||
> generate_gki_certificate.py || ERR="1"
|
||||
[[ "$ERR" -eq "1" ]] && {
|
||||
log_err "Failed to download mkbootimg"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
$SUDO cat "$VMLINUZ" "$DTB" > zImage || {
|
||||
log_err "Failed to create zImage"
|
||||
exit 1
|
||||
}
|
||||
$PYTHON mkbootimg.py --kernel zImage --cmdline "$CMDLINE" --base 0x00000000 --kernel_offset 0x00008000 --tags_offset 0x00000100 --pagesize 4096 --id -o linux.boot.img > /dev/null || {
|
||||
log_err "Failed to create boot image"
|
||||
rm ./zImage
|
||||
exit 1
|
||||
}
|
||||
rm ./zImage
|
||||
rm -r ./__pycache__
|
||||
log "Created ./linux.boot.img"
|
Loading…
Reference in a new issue