ksud: Add support for boot patch

This commit is contained in:
weishu
2024-01-15 20:17:10 +08:00
parent decbdeb5d7
commit 653225bb5b
5 changed files with 323 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
use anyhow::{Ok, Result};
use clap::Parser;
use std::path::PathBuf;
#[cfg(target_os = "android")]
use android_logger::Config;
@@ -48,6 +49,40 @@ enum Commands {
command: Profile,
},
/// Patch boot or init_boot images to apply KernelSU
BootPatch {
/// boot image path, if not specified, will try to find the boot image automatically
#[arg(short, long)]
boot: Option<PathBuf>,
/// kernel image path to replace
#[arg(short, long)]
kernel: Option<PathBuf>,
/// LKM module path to replace
#[arg(short, long, requires("init"))]
module: Option<PathBuf>,
/// init to be replaced, if use LKM, this must be specified
#[arg(short, long, requires("module"))]
init: Option<PathBuf>,
/// will use another slot when boot image is not specified
#[arg(short = 'u', long, default_value = "false")]
ota: bool,
/// Flash it to boot partition after patch
#[arg(short, long, default_value = "false")]
flash: bool,
/// output path, if not specified, will use current directory
#[arg(short, long, default_value = None)]
out: Option<PathBuf>,
/// magiskboot path, if not specified, will use builtin one
#[arg(long, default_value = None)]
magiskboot: Option<PathBuf>,
},
/// For developers
Debug {
#[command(subcommand)]
@@ -244,6 +279,17 @@ pub fn run() -> Result<()> {
Debug::Mount => event::mount_systemlessly(defs::MODULE_DIR),
Debug::Test => todo!(),
},
Commands::BootPatch {
boot,
init,
kernel,
module,
ota,
flash,
out,
magiskboot,
} => crate::boot_patch::patch(boot, kernel, module, init, ota, flash, out, magiskboot),
};
if let Err(e) = &result {