Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/build-manager.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ name: Build Manager
on:
workflow_dispatch:
push:
branches: [ "main", "dev", "ci", "sync-upstream" ]
paths:
- '.github/workflows/build-manager.yml'
- '.github/workflows/build-lkm.yml'
Expand Down
9 changes: 3 additions & 6 deletions kernel/build-all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ else
KMIS=$1
fi

cd "$(dirname "$(readlink -f "$0")")/.."

# Some patch is required to use separate build dir when building for android16-6.12, see:
# https://github.com/5ec1cff/ddk#local-%E6%A8%A1%E5%BC%8F%E6%9E%84%E5%BB%BA%E9%80%82%E7%94%A8%E4%BA%8E%E5%A4%9A%E4%B8%AA-target-%E7%89%88%E6%9C%AC%E7%9A%84%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97

Expand All @@ -17,10 +15,10 @@ mv .ddk-version .ddk-version.bak 2> /dev/null || true
for kmi in $KMIS; do
echo "========== Building $kmi =========="
ODIR="$(realpath .)/out/$kmi"
if ddk build "$kmi" "ODIR=$ODIR" -e CONFIG_KSU=m -e CONFIG_KSU_TRACEPOINT_HOOK=y -e CONFIG_KSU_MULTI_MANAGER_SUPPORT=y -- -C kernel; then
if ddk build "$kmi" "ODIR=$ODIR" -e CONFIG_KSU=m -e CONFIG_KSU_TRACEPOINT_HOOK=y -e CONFIG_KSU_MULTI_MANAGER_SUPPORT=y; then
if [ -f "$ODIR/kernelsu.ko" ]; then
cp "$ODIR/kernelsu.ko" "kernel/kernelsu-${kmi}.ko"
llvm-strip -d "kernel/kernelsu-${kmi}.ko"
cp "$ODIR/kernelsu.ko" "kernelsu-${kmi}.ko"
llvm-strip -d "kernelsu-${kmi}.ko"
echo "✓ Built kernelsu-${kmi}.ko"
fi
else
Expand All @@ -32,5 +30,4 @@ done
mv .ddk-version.bak .ddk-version 2> /dev/null || true

echo "========== Final output =========="
cd kernel
ls -l kernelsu-*.ko
Original file line number Diff line number Diff line change
Expand Up @@ -1355,12 +1355,6 @@ private fun createColorScheme(
isDark = darkTheme,
style = ThemeConfig.dynamicPaletteStyle,
specVersion = ThemeConfig.dynamicColorSpec,
modifyColorScheme = { scheme ->
scheme.copy(
background = if (CardConfig.isCustomBackgroundEnabled) Color.Transparent else scheme.background,
surface = if (CardConfig.isCustomBackgroundEnabled) Color.Transparent else scheme.surface,
)
}
)
}

Expand Down
12 changes: 12 additions & 0 deletions manager/app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
<string name="home_not_installed">Не встановлено</string>
<string name="home_click_to_install">Натисніть, щоб встановити</string>
<string name="home_working">Працює</string>
<string name="home_version_info">Інформація про версію</string>
<string name="home_status_info">Інформація про стан</string>
<string name="home_short_info">Суперкористувач: %1$d, Модулі: %2$d</string>
<string name="home_unsupported">Не підтримується</string>
<string name="home_unsupported_reason">Драйвер KernelSU не виявлено у вашому ядрі. Можливо, у вас неправильне ядро.</string>
<string name="home_kernel">Версія ядра</string>
<string name="home_susfs_version">Версія SuSFS</string>
<string name="home_manager_version">Версія менеджера</string>
<string name="home_kernel_version">Версія драйвера ядра</string>
<string name="home_selinux_status">Статус SELinux</string>
<string name="selinux_status_disabled">Вимкнено</string>
<string name="selinux_status_enforcing">Примусовий</string>
Expand Down Expand Up @@ -42,6 +46,7 @@
<string name="module_failed_to_enable">Не вдалося ввімкнути модуль: %s</string>
<string name="module_failed_to_disable">Не вдалося вимкнути модуль: %s</string>
<string name="module_empty">Немає встановлених модулів</string>
<string name="search_no_any_match">Жодного збігу не знайдено</string>
<string name="module">Модулі</string>
<string name="module_repo">Репозиторій модулів</string>
<string name="module_sort_action_first">Сортувати (Спочатку дії)</string>
Expand Down Expand Up @@ -124,6 +129,11 @@
<string name="module_start_downloading">Початок завантаження: %s</string>
<string name="module_action_success">Дію модуля виконано успішно.</string>
<string name="new_version_available">Доступна нова версія %s, натисніть для оновлення.</string>
<string name="beta_version_available">Доступна нова бета-версія %1$d. Натисніть, щоб оновити</string>
<string name="beta_update_check_failed">Не вдалося перевірити бета-оновлення. Потягніть, щоб оновити, і спробуйте ще раз.</string>
<string name="manager_update_stable">Стабільне оновлення</string>
<string name="manager_update_beta">Бета-оновлення</string>
<string name="manager_update_details">Версія: %1$s (%2$d)\nАрхітектура: %3$s</string>
<string name="launch_app">Запустити</string>
<string name="force_stop_app" formatted="false">Примусово зупинити</string>
<string name="restart_app">Перезапустити</string>
Expand Down Expand Up @@ -156,6 +166,8 @@
<string name="module_changelog_failed">Не вдалося завантажити список змін: %s</string>
<string name="settings_check_update">Сповіщення про оновлення</string>
<string name="settings_check_update_summary">Автоматично перевіряти наявність оновлень модуля та менеджера</string>
<string name="settings_check_beta_update">Перевірити бета-оновлення</string>
<string name="settings_check_beta_update_summary">Автоматично перевіряти бета-збірки з головної гілки</string>
<string name="grant_root_failed">Не вдалося надати root-права!</string>
<string name="home_pr_build_warning">Це PR debug-збірка. НЕ використовуйте її в робочому середовищі!</string>
<string name="action">Дія</string>
Expand Down
2 changes: 1 addition & 1 deletion manager/app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
<string name="home_unsupported_reason">内核上未检测到 KernelSU 驱动程序,内核错误?</string>
<string name="home_kernel">内核版本</string>
<string name="home_susfs_version">SuSFS 版本</string>
<string name="home_kernel_version">内核驱动版本</string>
<string name="home_manager_version">管理器版本</string>
<string name="home_kernel_version">内核驱动版本</string>
<string name="home_selinux_status">SELinux 状态</string>
<string name="selinux_status_disabled">被禁用</string>
<string name="selinux_status_enforcing">强制执行</string>
Expand Down
49 changes: 24 additions & 25 deletions userspace/ksud/src/boot_patch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
use std::os::unix::fs::PermissionsExt;
use std::{
fs::File,
io::{BufReader, Cursor, Read, Seek, SeekFrom},
io::{Cursor, Seek, SeekFrom},
path::PathBuf,
};

Expand Down Expand Up @@ -293,14 +293,29 @@ rm -f /data/adb/post-fs-data.d/post_ota.sh
#[cfg(target_os = "android")]
pub use android::*;

fn map_file(file: &PathBuf) -> Result<Mmap> {
let mut f = File::open(file).with_context(|| format!("open {}", file.display()))?;
let len = f
.seek(SeekFrom::End(0))
.with_context(|| format!("seek end of {}", file.display()))? as usize;
let mmap = unsafe { MmapOptions::new().len(len).map(&f)? };
Ok(mmap)
}

#[allow(clippy::needless_pass_by_value)]
fn parse_kmi(buffer: Vec<u8>) -> Result<String> {
let re = Regex::new(r"(\d+\.\d+)(?:\S+)?(android\d+)").context("Failed to compile regex")?;
buffer
.windows(3)
.windows(4)
.enumerate()
.filter(|(_, x)| {
x[1] == b'.' && (x[0] == b'5' || x[0] == b'6') && (x[2] >= b'0' && x[2] <= b'9')
x[1] == b'.'
&& x[2].is_ascii_digit()
&& match x[0] {
b'5' => x[3].is_ascii_digit(),
b'6'..=b'9' => true,
_ => false,
}
})
.find_map(|(i, _)| {
let a = &buffer[i..buffer.len().min(i + 100)];
Expand All @@ -325,19 +340,13 @@ fn parse_kmi(buffer: Vec<u8>) -> Result<String> {
}

fn parse_kmi_from_kernel(kernel: &PathBuf) -> Result<String> {
let file = File::open(kernel).context("Failed to open kernel file")?;
let mut reader = BufReader::new(file);
let mut buffer = Vec::new();
reader
.read_to_end(&mut buffer)
.context("Failed to read kernel file")?;

parse_kmi(buffer)
let data = std::fs::read(kernel).context("Failed to read kernel file")?;

parse_kmi(data)
}

fn parse_kmi_from_boot(image: &PathBuf) -> Result<String> {
let image = unsafe { Mmap::map(&File::open(image)?)? };

let image = map_file(image)?;
let bootimage = BootImage::parse(&image)?;
if let Some(kernel) = bootimage.get_blocks().get_kernel() {
let mut output = Vec::<u8>::new();
Expand Down Expand Up @@ -505,11 +514,9 @@ pub fn patch(args: BootPatchArgs) -> Result<()> {
if ota {
let slot_suffix = get_slot_suffix(true);
println!("- Trying to auto detect KMI version from boot");
if let Ok(kmi) = parse_kmi_from_boot(&PathBuf::from(&format!(
return parse_kmi_from_boot(&PathBuf::from(&format!(
"/dev/block/by-name/boot{slot_suffix}"
))) {
return Ok(kmi);
}
)));
}
#[cfg(target_os = "android")]
match get_current_kmi() {
Expand Down Expand Up @@ -912,11 +919,3 @@ fn rebuild_without_ksu(
patcher.patch(&mut buf)?;
Ok(buf.into_inner())
}
fn map_file(file: &PathBuf) -> Result<Mmap> {
unsafe {
let mut file = File::open(file)?;
Ok(MmapOptions::new()
.len(file.seek(SeekFrom::End(0))? as usize)
.map(&file)?)
}
}
Loading
Loading