Skip to content

Commit

Permalink
Merge branch 'main' into drop_nongki
Browse files Browse the repository at this point in the history
  • Loading branch information
tiann authored May 31, 2024
2 parents c8f1db8 + b766b98 commit 7cc35d4
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 21 deletions.
5 changes: 4 additions & 1 deletion kernel/throne_tracker.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,11 @@ FILLDIR_RETURN_TYPE my_actor(struct dir_context *ctx, const char *name,
} else {
if ((namelen == 8) && (strncmp(name, "base.apk", namelen) == 0)) {
struct apk_path_hash *pos, *n;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0)
unsigned int hash = full_name_hash(dirpath, strlen(dirpath));
#else
unsigned int hash = full_name_hash(NULL, dirpath, strlen(dirpath));

#endif
list_for_each_entry(pos, &apk_path_hash_list, list) {
if (hash == pos->hash) {
pos->exists = true;
Expand Down
7 changes: 4 additions & 3 deletions userspace/ksud/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 7 additions & 4 deletions userspace/ksud/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ pub fn has_magisk() -> bool {
}

fn is_ok_empty(dir: &str) -> bool {
use std::result::Result::{Err, Ok};
use std::result::Result::Ok;

match fs::read_dir(dir) {
Ok(mut entries) => entries.next().is_none(),
Expand All @@ -199,7 +199,7 @@ fn is_ok_empty(dir: &str) -> bool {
}

fn find_temp_path() -> String {
use std::result::Result::{Err, Ok};
use std::result::Result::Ok;

if is_ok_empty(defs::TEMP_DIR) {
return defs::TEMP_DIR.to_string();
Expand Down Expand Up @@ -286,8 +286,11 @@ pub fn uninstall(magiskboot_path: Option<PathBuf>) -> Result<()> {
module::prune_modules()?;
}
println!("- Removing directories..");
std::fs::remove_dir_all(defs::WORKING_DIR)?;
std::fs::remove_file(defs::DAEMON_PATH)?;
std::fs::remove_dir_all(defs::WORKING_DIR).ok();
std::fs::remove_file(defs::DAEMON_PATH).ok();
crate::mount::umount_dir(defs::MODULE_DIR).ok();
std::fs::remove_dir_all(defs::MODULE_DIR).ok();
std::fs::remove_dir_all(defs::MODULE_UPDATE_TMP_DIR).ok();
println!("- Restore boot image..");
boot_patch::restore(None, magiskboot_path, true)?;
println!("- Uninstall KernelSU manager..");
Expand Down
2 changes: 1 addition & 1 deletion website/docs/.vitepress/locales/pt_BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ function sidebarGuide() {
text: 'Guia',
items: [
{ text: 'O que é KernelSU?', link: '/pt_BR/guide/what-is-kernelsu' },
{ text: 'Diferença com Magisk', link: '/pt_BR/guide/difference-with-magisk' },
{ text: 'Diferenças com Magisk', link: '/pt_BR/guide/difference-with-magisk' },
{ text: 'Instalação', link: '/pt_BR/guide/installation' },
{ text: 'Como compilar?', link: '/pt_BR/guide/how-to-build' },
{ text: 'Integração para dispositivos não GKI', link: '/pt_BR/guide/how-to-integrate-for-non-gki'},
Expand Down
4 changes: 4 additions & 0 deletions website/docs/guide/how-to-integrate-for-non-gki.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,9 @@ index 32f6f1c68..d69d8eca2 100644
return dentry;
}

+#ifdef CONFIG_KSU
+extern int ksu_handle_devpts(struct inode*);
+#endif
+
/**
* devpts_get_priv -- get private data for a slave
Expand All @@ -325,7 +327,9 @@ index 32f6f1c68..d69d8eca2 100644
*/
void *devpts_get_priv(struct dentry *dentry)
{
+ #ifdef CONFIG_KSU
+ ksu_handle_devpts(dentry->d_inode);
+ #endif
if (dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC)
return NULL;
return dentry->d_fsdata;
Expand Down
7 changes: 4 additions & 3 deletions website/docs/guide/module.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,11 @@ In KernelSU, startup scripts are divided into two types based on their storage l
All boot scripts will run in KernelSU's BusyBox `ash` shell with "Standalone Mode" enabled.

### Boot scripts process explanation

The following is the relevant boot process for Android (some parts are omitted), which includes the operation of KernelSU (with leading asterisks), and can help you better understand the purpose of these module scripts:

```txt
0. BootLoader (nothing on sceen)
0. Bootloader (nothing on screen)
load patched boot.img
load kernel:
- GKI mode: GKI kernel with KernelSU integrated
Expand All @@ -292,7 +293,7 @@ post-fs-data
*mount tmpfs
*execute module scripts post-fs-data.sh
**(Zygisk)./bin/zygisk-ptrace64 monitor
*(pre)load system.prop (same as `resetprop -n`)
*(pre)load system.prop (same as resetprop -n)
*remount modules /system
*execute general scripts in post-mount.d/
*execute module scripts post-mount.sh
Expand Down Expand Up @@ -323,4 +324,4 @@ input password to decrypt /data/data
start user apps (autostart)
```

If you are interested in Android init Language, it is recommended to read its [documentation](https://android.googlesource.com/platform/system/core/+/master/init/README.md)
If you are interested in Android Init Language, it is recommended to read its [documentation](https://android.googlesource.com/platform/system/core/+/master/init/README.md).
2 changes: 1 addition & 1 deletion website/docs/pt_BR/guide/difference-with-magisk.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Diferença com Magisk
# Diferenças com Magisk

Embora existam muitas semelhanças entre os módulos KernelSU e os módulos Magisk, existem inevitavelmente algumas diferenças devido aos seus mecanismos de implementação completamente diferentes. Se você deseja que seu módulo seja executado no Magisk e no KernelSU, você deve entender essas diferenças.

Expand Down
4 changes: 4 additions & 0 deletions website/docs/pt_BR/guide/how-to-integrate-for-non-gki.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,9 @@ index 32f6f1c68..d69d8eca2 100644
return dentry;
}

+#ifdef CONFIG_KSU
+extern int ksu_handle_devpts(struct inode*);
+#endif
+
/**
* devpts_get_priv -- get private data for a slave
Expand All @@ -325,7 +327,9 @@ index 32f6f1c68..d69d8eca2 100644
*/
void *devpts_get_priv(struct dentry *dentry)
{
+ #ifdef CONFIG_KSU
+ ksu_handle_devpts(dentry->d_inode);
+ #ifdef CONFIG_KSU
if (dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC)
return NULL;
return dentry->d_fsdata;
Expand Down
71 changes: 66 additions & 5 deletions website/docs/pt_BR/guide/module.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

O KernelSU fornece um mecanismo de módulo que consegue modificar o diretório do sistema enquanto mantém a integridade da partição do sistema. Este mecanismo é conhecido como "sem sistema".

O mecanismo de módulos do KernelSU é quase o mesmo do Magisk. Se você está familiarizado com o desenvolvimento de módulos Magisk, o desenvolvimento de módulos KernelSU é muito semelhante. Você pode pular a introdução dos módulos abaixo e só precisa ler [Diferença com Magisk](difference-with-magisk.md).
O mecanismo de módulos do KernelSU é quase o mesmo do Magisk. Se você está familiarizado com o desenvolvimento de módulos Magisk, o desenvolvimento de módulos KernelSU é muito semelhante. Você pode pular a introdução dos módulos abaixo e só precisa ler [Diferenças com Magisk](difference-with-magisk.md).

## WebUI

Expand All @@ -21,7 +21,7 @@ Para aqueles que desejam usar o recurso Modo Autônomo fora do KernelSU, existem

Para garantir que todos os shells `sh` subsequentes executados também sejam executados no Modo Autônomo, a opção 1 é o método preferido (e é isso que o KernelSU e o gerenciador do KernelSU usam internamente), pois as variáveis ​​de ambiente são herdadas para os subprocesso.

::: tip DIFERENÇA COM MAGISK
::: tip DIFERENÇAS COM MAGISK

O BusyBox do KernelSU agora está usando o arquivo binário compilado diretamente do projeto Magisk. **Obrigado ao Magisk!** Portanto, você não precisa se preocupar com problemas de compatibilidade entre scripts BusyBox no Magisk e KernelSU porque eles são exatamente iguais!
:::
Expand Down Expand Up @@ -82,7 +82,7 @@ Um módulo KernelSU é uma pasta colocada em `/data/adb/modules` com a estrutura
├── .
```

::: tip DIFERENÇA COM MAGISK
::: tip DIFERENÇAS COM MAGISK
O KernelSU não possui suporte integrado para o Zygisk, portanto não há conteúdo relacionado ao Zygisk no módulo. No entanto, você pode usar [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext) para suportar módulos Zygisk. Neste caso, o conteúdo do módulo Zygisk é idêntico ao suportado pelo Magisk.
:::

Expand Down Expand Up @@ -112,7 +112,7 @@ Por favor, leia a seção [Scripts de inicialização](#scripts-de-inicializacao

Em todos os scripts do seu módulo, use `MODDIR=${0%/*}` para obter o caminho do diretório base do seu módulo, **NÃO** codifique o caminho do seu módulo nos scripts.

::: tip DIFERENÇA COM MAGISK
::: tip DIFERENÇAS COM MAGISK
Você pode usar a variável de ambiente `KSU` para determinar se um script está sendo executado no KernelSU ou Magisk. Se estiver executando no KernelSU, esse valor será definido como `true`.
:::

Expand Down Expand Up @@ -149,7 +149,7 @@ REPLACE="

Esta lista criará automaticamente os diretórios `$MODPATH/system/app/YouTube` e `$MODPATH/system/app/Bloatware` e, em seguida, executará `setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/YouTube` e `setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/Bloatware`. Após o módulo entrar em vigor, `/system/app/YouTube` e `/system/app/Bloatware` serão substituídos por diretórios vazios.

::: tip DIFERENÇA COM MAGISK
::: tip DIFERENÇAS COM MAGISK

O mecanismo sem sistema do KernelSU é implementado através do OverlayFS do kernel, enquanto o Magisk atualmente usa montagem mágica (montagem de ligação). Os dois métodos de implementação têm diferenças significativas, mas o objetivo final é o mesmo: modificar os arquivos /system sem modificar fisicamente a partição /system.
:::
Expand Down Expand Up @@ -261,3 +261,64 @@ No KernelSU, os scripts de inicialização são divididos em dois tipos com base
- `post-fs-data.sh` é executado no modo post-fs-data, `service.sh` é executado no modo de serviço late_start, `boot-completed.sh` é executado na inicialização concluída e `post-mount.sh` é executado no OverlayFS montado.

Todos os scripts de inicialização serão executados no shell BusyBox `ash` do KernelSU com o Modo Autônomo ativado.

### Explicação do processo de scripts de inicialização

A seguir está o processo de inicialização relevante para o Android (algumas partes foram omitidas), que inclui a operação do KernelSU (com asteriscos iniciais) e pode ajudá-lo a entender melhor o propósito desses scripts de módulo:

```txt
0. Bootloader (nada nesta tela)
load patched boot.img
load kernel:
- Modo GKI: kernel GKI com KernelSU integrado
- Modo LKM: kernel stock
...
1. kernel exec init (logotipo oem na tela):
- Modo GKI: stock init
- Modo LKM: exec ksuinit, insmod kernelsu.ko, exec stock init
mount /dev, /dev/pts, /proc, /sys, etc.
property-init -> read default props
read init.rc
...
early-init -> init -> late_init
early-fs
start vold
fs
montar /vendor, /system, /persist, etc.
post-fs-data
*verificação do modo de segurança
*executar scripts gerais em post-fs-data.d/
*carregar sepolicy.rule
*montar tmpfs
*executar scripts de módulo post-fs-data.sh
**(Zygisk)./bin/zygisk-ptrace64 monitor
*(pré)carregamento de system.prop (igual a resetprop -n)
*remontar módulos em /system
*executar scripts gerais em post-mount.d/
*executar scripts de módulo post-mount.sh
zygote-start
load_all_props_action
*executar resetprop (defina adereços reais para resetprop com a opção -n)
... -> boot
class_start core
start-service logd, console, vold, etc.
class_start main
start-service adb, netd (iptables), zygote, etc.
2. kernel2user init (animação da rom na tela, inicie pelo serviço bootanim)
*executar scripts gerais em service.d/
*executar scripts de módulo service.sh
*definir adereços para resetprop sem a opção -p
**(Zygisk) hook zygote (iniciar o zygiskd)
**(Zygisk) montar zygisksu/module.prop
iniciar apps do sistema (início automático)
...
inicialização completa (transmitir evento ACTION_BOOT_COMPLETED)
*executar scripts gerais em boot-completed.d/
*executar scripts de módulo boot-completed.sh
3. Operável pelo usuário (tela de bloqueio)
insira a senha para descriptografar /data/data
*conjunto real de adereços para resetprop com opção -p
iniciar apps de usuário (início automático)
```

Se você estiver interessado na linguagem de inicialização do Android, é recomendável ler sua [documentação](https://android.googlesource.com/platform/system/core/+/master/init/README.md).
7 changes: 4 additions & 3 deletions website/docs/zh_CN/guide/module.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,10 +269,11 @@ set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission>
所有启动脚本都将在 KernelSU 的 BusyBox ash shell 中运行,并启用“独立模式”。

### 启动脚本的流程解疑 {#Boot-scripts-process-explanation}

以下是 Android 的相关启动流程(部分省略),其中包括了 KernelSU 的操作(带前导星号),应该能帮助你更好地理解这些启动脚本的用途:

```txt
0. BootLoader (nothing on sceen)
0. Bootloader (nothing on screen)
load patched boot.img
load kernel:
- GKI mode: GKI kernel with KernelSU integrated
Expand All @@ -298,7 +299,7 @@ post-fs-data
*mount tmpfs
*execute module scripts post-fs-data.sh
**(Zygisk)./bin/zygisk-ptrace64 monitor
*(pre)load system.prop (same as `resetprop -n`)
*(pre)load system.prop (same as resetprop -n)
*remount modules /system
*execute general scripts in post-mount.d/
*execute module scripts post-mount.sh
Expand Down Expand Up @@ -329,4 +330,4 @@ input password to decrypt /data/data
start user apps (autostart)
```

如果你对 Android 的 init 语言感兴趣,推荐阅读[文档](https://android.googlesource.com/platform/system/core/+/master/init/README.md)
如果你对 Android 的 init 语言感兴趣,推荐阅读[文档](https://android.googlesource.com/platform/system/core/+/master/init/README.md)

0 comments on commit 7cc35d4

Please sign in to comment.