website: add vi_VN translation (#91)
Signed-off-by: hmtheboy154 <buingoc67@gmail.com> Signed-off-by: hmtheboy154 <buingoc67@gmail.com>
This commit is contained in:
48
website/docs/vi_VN/guide/faq.md
Normal file
48
website/docs/vi_VN/guide/faq.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# FAQ - Câu hỏi thường gặp
|
||||
|
||||
## KernelSU có hỗ trợ thiết bị của tôi không?
|
||||
|
||||
Trước tiên, bạn nên mở khóa bootloader . Nếu bạn không thể thì nó sẽ không được hỗ trợ.
|
||||
|
||||
Nếu có thể thì cài đặt KernelSU Manager vào thiết bị của bạn và mở nó, nếu nó hiển thị `Unsupported` thì thiết bị của bạn không được hỗ trợ và sẽ có khả năng không được hỗ trợ trong tương lai.
|
||||
|
||||
## KernelSU có cần mở khóa Bootloader không?
|
||||
|
||||
Chắc chắn là có.
|
||||
|
||||
## KernelSU có hỗ trợ các modules không?
|
||||
|
||||
Có, nhưng ở những phiên bản thử nghiệm này có thể có rất nhiều lỗi. Vậy nên tốt hơn hết là đợi nó ổn định đã :)
|
||||
|
||||
## KernelSU có hỗ trợ Xposed không?
|
||||
|
||||
Có, [Dreamland](https://github.com/canyie/Dreamland) và [TaiChi](https::/taichi.cool) hiện đã hoạt động được một phần nào đó và chúng tôi đang cố gắng làm cho các Xposed Framework khác có thể hoạt động.
|
||||
|
||||
## KernelSU có tương thích với Magisk không?
|
||||
|
||||
Hệ thống module của KernelSU xung đột với magic mount của Magisk, nếu có bất kỳ module nào được bật trong KernelSU thì toàn bộ Magisk sẽ không thể hoạt động.
|
||||
|
||||
Nhưng nếu bạn chỉ sử dụng `su` của KernelSU thì nó sẽ hoạt động tốt với Magisk: KernelSU sửa đổi `kernel` và Magisk sửa đổi `ramdisk`, chúng có thể hoạt động cùng nhau.
|
||||
|
||||
## KernelSU sẽ thay thế Magisk?
|
||||
|
||||
Chúng tôi không nghĩ như vậy và đó không phải là mục tiêu của chúng tôi. Magisk đã đủ tốt cho giải pháp userspace root và nó sẽ tồn tại lâu dài. Mục tiêu của KernelSU là cung cấp giao diện kernel cho người dùng chứ không phải để thay thế Magisk.
|
||||
|
||||
## KernelSU có thể hỗ trợ các thiết bị không sử dụng GKI không?
|
||||
|
||||
Điều đó là có thể. Nhưng bạn nên tải xuống mã nguồn kernel và tích hợp KernelSU vào source rồi tự compile.
|
||||
|
||||
## KernelSU có thể hỗ trợ các thiết bị chạy Android 12 trở xuống không?
|
||||
|
||||
Kernel của thiết bị ảnh hưởng đến khả năng tương thích của KernelSU và nó sẽ không liên quan gì đến phiên bản Android. Hạn chế duy nhất là các thiết bị chạy Android 12 phải là nhân 5.10 trở lên (thiết bị dùng GKI). Vì thế:
|
||||
|
||||
1. Các thiết bị chạy Android 12 phải được hỗ trợ.
|
||||
2. Các thiết bị có kernel cũ (Một số thiết bị Android 12 cũng là kernel cũ) có thể tương thích (Bạn nên tự xây dựng kernel)
|
||||
|
||||
## KernelSU có thể hỗ trợ kernel cũ không?
|
||||
|
||||
Có thể, KernelSU hiện đã được backport xuống kernel 4.14, đối với kernel cũ hơn, bạn cần backport một cách thủ công và các Pull-Requests luôn được hoan nghênh!
|
||||
|
||||
## Làm cách nào để tích hợp KernelSU cho kernel cũ?
|
||||
|
||||
Vui lòng tham khảo [hướng dẫn này](how-to-integrate-for-non-gki)
|
||||
51
website/docs/vi_VN/guide/how-to-build.md
Normal file
51
website/docs/vi_VN/guide/how-to-build.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Làm cách nào để build KernelSU ?
|
||||
|
||||
Trước tiên, bạn nên đọc tài liệu Chính thức của Android để xây dựng kernel:
|
||||
|
||||
1. [Building Kernels](https://source.android.com/docs/setup/build/building-kernels)
|
||||
2. [GKI Release Builds](https://source.android.com/docs/core/architecture/kernel/gki-release-builds)
|
||||
|
||||
> Trang này dành cho thiết bị GKI, nếu bạn dùng kernel cũ, vui lòng tham khảo [Làm thế nào để tích hợp KernelSU vào thiết bị không sử dụng GKI ?](how-to-integrate-for-non-gki)
|
||||
|
||||
## Build Kernel
|
||||
|
||||
### Đồng bộ mã nguồn
|
||||
|
||||
```sh
|
||||
repo init -u https://android.googlesource.com/kernel/manifest
|
||||
mv <kernel_manifest.xml> .repo/manifests
|
||||
repo init -m manifest.xml
|
||||
repo sync
|
||||
```
|
||||
|
||||
The `<kernel_manifest.xml>` is a manifest file which can determine a build uniquely, you can use the manifest to do a re-preducable build. You should download the manifest file from [Google GKI release builds](https://source.android.com/docs/core/architecture/kernel/gki-release-builds)
|
||||
|
||||
`<kernel_manifest.xml>` là một tệp kê khai có thể xác định duy nhất một bản dựng, bạn có thể sử dụng tệp kê khai để thực hiện một bản dựng có thể tái sản xuất. Bạn nên tải xuống tệp kê khai từ [Google GKI release builds](https://source.android.com/docs/core/architecture/kernel/gki-release-builds)
|
||||
|
||||
### Build
|
||||
|
||||
Vui lòng kiểm tra [tài liệu chính thức](https://source.android.com/docs/setup/build/building-kernels) trước.
|
||||
|
||||
Ví dụ: Đầu tiên chúng ta cần build một image cho aarch64:
|
||||
|
||||
```sh
|
||||
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
|
||||
```
|
||||
|
||||
Đừng quên thêm `LTO=thin`, nếu không quá trình xây dựng có thể thất bại trong trường hợp bộ nhớ máy tính của bạn nhỏ hơn 24Gb.
|
||||
|
||||
Bắt đầu từ Android 13, kernel được xây dựng bởi `bazel`:
|
||||
|
||||
```sh
|
||||
tools/bazel build --config=fast //common:kernel_aarch64_dist
|
||||
```
|
||||
|
||||
## Build kernel cùng với KernelSU
|
||||
|
||||
Nếu bạn có thể build được kernel hoàn chỉnh, thì việc tích hợp KernelSU rất dễ dàng, chạy lệnh sau tại thư mục chứa mã nguồn kernel:
|
||||
|
||||
```sh
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||||
```
|
||||
|
||||
Và rồi build lại, bạn sẽ có được một image chứa KernelSU
|
||||
139
website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md
Normal file
139
website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# Làm thế nào để tích hợp KernelSU vào thiết bị không sử dụng GKI ?
|
||||
|
||||
KernelSU có thể được tích hợp vào kernel không phải GKI và hiện tại nó đã được backport xuống 4.14, thậm chí cũng có thể chạy trên kernel thấp hơn 4.14.
|
||||
|
||||
Do các kernel không phải GKI bị phân mảnh nên chúng tôi không có cách build thống nhất, vì vậy chúng tôi không thể cung cấp các boot image không phải GKI. Nhưng bạn có thể tự build kernel với KernelSU được tích hợp vào.
|
||||
|
||||
Đầu tiên, bạn phải build được kernel từ nguồn có khả năng boot được , nếu kernel không có mã nguồn mở thì rất khó để chạy KernelSU cho thiết bị của bạn.
|
||||
|
||||
Nếu bạn có thể build kernel khởi động được, có hai cách để tích hợp KernelSU vào mã nguồn kernel:
|
||||
|
||||
1. Tự động với `kprobe`
|
||||
2. Thủ công
|
||||
|
||||
|
||||
## Tích hợp vào kprobe
|
||||
|
||||
KernelSU sử dụng kprobe để thực hiện hook kernel, nếu *kprobe* chạy tốt trong kernel của bạn thì nên sử dụng cách này.
|
||||
|
||||
Đầu tiên, thêm KernelSU vào mã nguồn kernel của bạn:
|
||||
|
||||
```sh
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||||
```
|
||||
|
||||
Sau đó, bạn nên kiểm tra xem *kprobe* có được bật trong config của bạn hay không, nếu không, vui lòng thêm các cấu hình sau vào:
|
||||
|
||||
```
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_KPROBE_EVENTS=y
|
||||
```
|
||||
|
||||
Rồi build lại kernel của bạn, KernelSU sẽ hoạt động ok.
|
||||
|
||||
Nhưng nếu bạn gặp bootloop khi tích hợp KernelSU thì có thể *kprobe bị hỏng trong kernel*, bạn nên fix lỗi kprobe trong mã nguồn hoặc dùng cách 2.
|
||||
|
||||
## Chỉnh sửa mã nguồn kernel thủ công
|
||||
|
||||
Nếu kprobe không thể hoạt động trong kernel của bạn (có thể là lỗi do upstream hoặc kernel dưới bản 4.8), thì bạn có thể thử cách này:
|
||||
|
||||
Đầu tiên, thêm KernelSU vào mã nguồn kernel của bạn:
|
||||
|
||||
```sh
|
||||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||||
```
|
||||
|
||||
Sau đó, thêm lệnh gọi KernelSU vào mã nguồn kernel, đây là một patch bạn có thể tham khảo:
|
||||
|
||||
```diff
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index ac59664eaecf..bdd585e1d2cc 100644
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -1890,11 +1890,14 @@ static int __do_execve_file(int fd, struct filename *filename,
|
||||
return retval;
|
||||
}
|
||||
|
||||
+extern int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv,
|
||||
+ void *envp, int *flags);
|
||||
static int do_execveat_common(int fd, struct filename *filename,
|
||||
struct user_arg_ptr argv,
|
||||
struct user_arg_ptr envp,
|
||||
int flags)
|
||||
{
|
||||
+ ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);
|
||||
return __do_execve_file(fd, filename, argv, envp, flags, NULL);
|
||||
}
|
||||
|
||||
diff --git a/fs/open.c b/fs/open.c
|
||||
index 05036d819197..965b84d486b8 100644
|
||||
--- a/fs/open.c
|
||||
+++ b/fs/open.c
|
||||
@@ -348,6 +348,8 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
|
||||
return ksys_fallocate(fd, mode, offset, len);
|
||||
}
|
||||
|
||||
+extern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,
|
||||
+ int *flags);
|
||||
/*
|
||||
* access() needs to use the real uid/gid, not the effective uid/gid.
|
||||
* We do this by temporarily clearing all FS-related capabilities and
|
||||
@@ -355,6 +357,7 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
|
||||
*/
|
||||
long do_faccessat(int dfd, const char __user *filename, int mode)
|
||||
{
|
||||
+ ksu_handle_faccessat(&dfd, &filename, &mode, NULL);
|
||||
const struct cred *old_cred;
|
||||
struct cred *override_cred;
|
||||
struct path path;
|
||||
diff --git a/fs/read_write.c b/fs/read_write.c
|
||||
index 650fc7e0f3a6..55be193913b6 100644
|
||||
--- a/fs/read_write.c
|
||||
+++ b/fs/read_write.c
|
||||
@@ -434,10 +434,14 @@ ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
|
||||
}
|
||||
EXPORT_SYMBOL(kernel_read);
|
||||
|
||||
+extern int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr,
|
||||
+ size_t *count_ptr, loff_t **pos);
|
||||
ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
|
||||
{
|
||||
ssize_t ret;
|
||||
|
||||
+ ksu_handle_vfs_read(&file, &buf, &count, &pos);
|
||||
+
|
||||
if (!(file->f_mode & FMODE_READ))
|
||||
return -EBADF;
|
||||
if (!(file->f_mode & FMODE_CAN_READ))
|
||||
diff --git a/fs/stat.c b/fs/stat.c
|
||||
index 376543199b5a..82adcef03ecc 100644
|
||||
--- a/fs/stat.c
|
||||
+++ b/fs/stat.c
|
||||
@@ -148,6 +148,8 @@ int vfs_statx_fd(unsigned int fd, struct kstat *stat,
|
||||
}
|
||||
EXPORT_SYMBOL(vfs_statx_fd);
|
||||
|
||||
+extern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags);
|
||||
+
|
||||
/**
|
||||
* vfs_statx - Get basic and extra attributes by filename
|
||||
* @dfd: A file descriptor representing the base dir for a relative filename
|
||||
@@ -170,6 +172,7 @@ int vfs_statx(int dfd, const char __user *filename, int flags,
|
||||
int error = -EINVAL;
|
||||
unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;
|
||||
|
||||
+ ksu_handle_stat(&dfd, &filename, &flags);
|
||||
if ((flags & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |
|
||||
AT_EMPTY_PATH | KSTAT_QUERY_FLAGS)) != 0)
|
||||
return -EINVAL;
|
||||
```
|
||||
|
||||
Bạn sẽ tìm thấy bốn chức năng trong mã nguồn kernel:
|
||||
|
||||
1. do_faccessat, thường là trong `fs/open.c`
|
||||
2. do_execveat_common, thường nằm trong `fs/exec.c`
|
||||
3. vfs_read, thường nằm trong `fs/read_write.c`
|
||||
4. vfs_statx, thường có trong `fs/stat.c`
|
||||
|
||||
Cuối cùng, chỉnh sửa `KernelSU/kernel/ksu.c` và bỏ `enable_sucompat()` sau đó xây dựng lại kernel của bạn, KernelSU sẽ hoạt động tốt.
|
||||
32
website/docs/vi_VN/guide/installation.md
Normal file
32
website/docs/vi_VN/guide/installation.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Cách cài đặt
|
||||
|
||||
## Kiểm tra xem thiết bị có hỗ trợ không
|
||||
|
||||
Tải KernelSU Manager từ [trang Releases trên Github](https://github.com/tiann/KernelSU/releases) hoặc [Github Actions](https://github.com/tiann/KernelSU/actions/workflows/build-manager.yml)
|
||||
|
||||
- Nếu ứng dụng hiện `Unsupported`, nghĩa là **Bạn phải tự compile kernel**, KernelSU sẽ không và không bao giờ cung cấp cho bạn một boot image dành riêng cho bạn để flash.
|
||||
- Nếu ứng dụng hiện `Not installed`, thì thiết bị của bạn đã chính thức hỗ trợ bởi KernelSU.
|
||||
|
||||
## Tìm một boot.img
|
||||
|
||||
KernelSU cung cấp một boot.img chung cho các thiết bị GKI, bạn nên flash boot.img này vào trong phân vùng boot của bạn.
|
||||
|
||||
Bạn có thể tải boot.img từ [Github Actions cho Kernel](https://github.com/tiann/KernelSU/actions/workflows/build-kernel.yml), lưu ý là hãy dùng đúng phiên bản boot.img. Ví dụ, nếu phiên bản kernel bạn dùng là `5.10.101`, thì bạn nên sử dụng `5.10.101-xxxx.boot.xxxx`.
|
||||
|
||||
Và tiện thể hãy kiểm tra định dạng gốc của boot.img trong máy bạn, bạn nên sử dụng đúng định dạng như là `lz4` hoặc `gz`.
|
||||
|
||||
## Flash boot.img này vào thiết bị
|
||||
|
||||
Kết nối thiết bị với `adb` và chạy `adb reboot bootloader` để vào chế độ fastboot, và rồi dùng câu lệnh này để flash KernelSU:
|
||||
|
||||
```sh
|
||||
fastboot flash boot boot.img
|
||||
```
|
||||
|
||||
## Khởi động lại
|
||||
|
||||
Khi flash xong, hãy khởi động lại thiết bị :
|
||||
|
||||
```sh
|
||||
fastboot reboot
|
||||
```
|
||||
21
website/docs/vi_VN/guide/what-is-kernelsu.md
Normal file
21
website/docs/vi_VN/guide/what-is-kernelsu.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# KernelSU là gì?
|
||||
|
||||
KernelSU là một giải pháp root dành cho các thiết bị Android GKI, nó hoạt động ở chế độ kernel và sẽ cho phép truy cập quyền root cho ứng dụng ở userspace ngay trên không gian của kernel.
|
||||
|
||||
## Tính năng
|
||||
|
||||
Tính năng chính của KernelSU là nó **Kernel-based** (dựa trên Kernel ?). KernelSU hoạt động ở chế độ kernel, vật nên nó sẽ cung cấp các giao diên của kernel mà từ trước tới nay ta chưa từng có. Ví dụ, chúng ta có thể thêm hardware breakpoint vào bất kì tiến trình nào trong chế độ kernel; Chúng ta có thể truy cập vào bố nhớ vật lí của bất kì tiến trình nào mà không ai có thể phát hiện ra; Hoặc chúng ta có thể chặn bất kì syscall nào ở không gian kernel; etc.
|
||||
|
||||
Đồng thời, KernelSU cung cấp một hệ thống module sử dụng overlayfs, cho phép bạn có thể thêm plugin của bạn vào trong hệ thống. Nó còn có thể cung cấp một cơ chế giúp chỉnh sửa được các file trên phân vùng `/system`
|
||||
|
||||
## Hướng dẫn sử dụng
|
||||
|
||||
Xin hãy xem: [Cách cài đặt](installation)
|
||||
|
||||
## Cách để build
|
||||
|
||||
[Cách để build](how-to-build)
|
||||
|
||||
## Thảo luận
|
||||
|
||||
- Telegram: [@KernelSU](https://t.me/KernelSU)
|
||||
29
website/docs/vi_VN/index.md
Normal file
29
website/docs/vi_VN/index.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
layout: home
|
||||
title: Giải pháp root trực tiếp trên kernel cho Android
|
||||
|
||||
hero:
|
||||
name: KernelSU
|
||||
text: Giải pháp root trực tiếp trên kernel cho Android
|
||||
tagline: ""
|
||||
image:
|
||||
src: /logo.png
|
||||
alt: KernelSU
|
||||
actions:
|
||||
- theme: brand
|
||||
text: Bắt Đầu
|
||||
link: /vi_VN/guide/what-is-kernelsu
|
||||
- theme: alt
|
||||
text: Xem trên Github
|
||||
link: https://github.com/tiann/KernelSU
|
||||
|
||||
features:
|
||||
- title: Kernel-based
|
||||
details: KernelSU hoạt động trong linux kernel, nó sẽ có nhiều quyền truy cập hơn vào các ứng dụng userspace.
|
||||
- title: Điều khiển truy cập bằng whitelist
|
||||
details: Chỉ có ứng dụng đã được cho phép mới được sử dụng "su", những ứng dụng khác đều sẽ không thể sử dụng được.
|
||||
- title: Hỗ trợ module
|
||||
details: KernelSU hỗ trợ chỉnh sửa phân vùng /system một cách systemless bằng overlayfs, nó còn hỗ trợ ghi vào /system nữa.
|
||||
- title: Mã nguồn mở
|
||||
details: KernelSU là một dự án mã nguồn mở sử dụng giấy phép GPL-3
|
||||
|
||||
Reference in New Issue
Block a user