diff --git a/README_VI.md b/README_VI.md index c60bca83..672f951b 100644 --- a/README_VI.md +++ b/README_VI.md @@ -1,18 +1,18 @@ -**English** | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [Polski](README_PL.md) | [Portuguese-Brazil](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [Polski](README_PL.md) | [Portuguese-Brazil](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | **Tiếng Việt** | [Indonesia](README_ID.md) # KernelSU -Giải pháp root thông qua thay đổi trên nhân hệ điều hành cho các thiết bị Android. +Giải pháp root thông qua thay đổi trên Kernel hệ điều hành cho các thiết bị Android. ## Tính năng 1. Hỗ trợ gói thực thi `su` và quản lý quyền root. 2. Hệ thống mô-đun thông qua overlayfs. -3. [Hồ sơ ứng dụng](https://kernelsu.org/guide/app-profile.html): Hạn chế quyền root của ứng dụng. +3. [App Profile](https://kernelsu.org/guide/app-profile.html): Hạn chế quyền root của ứng dụng. ## Tình trạng tương thích -KernelSU chính thức hỗ trợ các thiết bị Android với nhân GKI 2.0(phiên bản nhân 5.10+), các phiên bản nhân cũ hơn(4.14+) cũng tương thích, nhưng bạn cần phải tự biên dịch. +KernelSU chính thức hỗ trợ các thiết bị Android với kernel GKI 2.0 (phiên bản kernel 5.10+), các phiên bản kernel cũ hơn (4.14+) cũng tương thích, nhưng bạn cần phải tự biên dịch. WSA, ChromeOS và Android dựa trên container(container-based) cũng được hỗ trợ bởi KernelSU. @@ -22,11 +22,11 @@ Hiên tại Giao diện nhị phân của ứng dụng (ABI) được hỗ trợ - [Hướng dẫn cài đặt](https://kernelsu.org/vi_VN/guide/installation.html) - [Cách để build?](https://kernelsu.org/vi_VN/guide/how-to-build.html) -- [Website chính thức](https://kernelsu.org/) +- [Website Chính Thức](https://kernelsu.org/vi_VN/) ## Hỗ trợ dịch -Nếu bạn muốn hỗ trợ dịch KernelSU sang một ngôn ngữ khác hoặc cải thiện bản dịch trước, vui lòng sử dụng [Weblate](https://hosted.weblate.org/engage/kernelsu/). +Nếu bạn muốn hỗ trợ dịch KernelSU sang một ngôn ngữ khác hoặc cải thiện các bản dịch trước, vui lòng sử dụng [Weblate](https://hosted.weblate.org/engage/kernelsu/). ## Thảo luận @@ -39,7 +39,7 @@ Nếu bạn muốn hỗ trợ dịch KernelSU sang một ngôn ngữ khác hoặ ## Lời cảm ơn -- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): vì ý tưởng cho KernelSU. -- [Magisk](https://github.com/topjohnwu/Magisk): một công cụ root mạnh mẽ. -- [genuine](https://github.com/brevent/genuine/): vì phương pháp xác thực apk v2. -- [Diamorphine](https://github.com/m0nad/Diamorphine): vì các phương pháp che giấu của rootkit . +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): ý tưởng cho KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): công cụ root mạnh mẽ. +- [genuine](https://github.com/brevent/genuine/): phương pháp xác thực apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): các phương pháp ẩn của rootkit . diff --git a/website/docs/vi_VN/guide/app-profile.md b/website/docs/vi_VN/guide/app-profile.md new file mode 100644 index 00000000..e89b3597 --- /dev/null +++ b/website/docs/vi_VN/guide/app-profile.md @@ -0,0 +1,118 @@ +# App Profile + +App Profile là một cơ chế do KernelSU cung cấp để tùy chỉnh cấu hình của các ứng dụng khác nhau. + +Đối với các ứng dụng được cấp quyền root (tức là có thể sử dụng `su`), App Profile cũng có thể được gọi là Root Profile. Nó cho phép tùy chỉnh các quy tắc `uid`, `gid`, `groups`, `capabilities` và `SELinux` của lệnh `su`, do đó hạn chế các đặc quyền của người dùng root. Ví dụ: nó có thể chỉ cấp quyền mạng cho các ứng dụng tường lửa trong khi từ chối quyền truy cập tệp hoặc có thể cấp quyền shell thay vì quyền truy cập root đầy đủ cho các ứng dụng đóng băng: **giữ nguồn điện theo nguyên tắc đặc quyền tối thiểu.** + +Đối với các ứng dụng thông thường không có quyền root, App Profile có thể kiểm soát hành vi của hệ thống kernel và mô-đun đối với các ứng dụng này. Ví dụ, nó có thể xác định liệu các sửa đổi do mô-đun tạo ra có nên được giải quyết hay không. Hệ thống kernel và mô-đun có thể đưa ra quyết định dựa trên cấu hình này, chẳng hạn như thực hiện các hoạt động tương tự như "hiding" + +## Root Profile + +### UID, GID, và Groups + +Hệ thống Linux có hai khái niệm: người dùng (user) và nhóm (group). Mỗi người dùng có một user ID (UID) và một người dùng có thể thuộc nhiều nhóm, mỗi nhóm có group ID (GID) riêng. Những ID này được sử dụng để xác định người dùng trong hệ thống và xác định tài nguyên hệ thống nào họ có thể truy cập. + +Người dùng có UID bằng 0 được gọi là người dùng root và các nhóm có GID bằng 0 được gọi là nhóm root. Nhóm người dùng root thường giữ các đặc quyền hệ thống cao nhất. + +Trong trường hợp hệ thống Android, mỗi ứng dụng là một người dùng riêng biệt (không bao gồm các trường hợp UID dùng chung) với một UID duy nhất. Ví dụ: `0` đại diện cho người dùng root, `1000` đại diện cho `system`, `2000` đại diện cho ADB shell và các UID từ 10000 đến 19999 đại diện cho các ứng dụng thông thường. + +:::info +Ở đây, UID được đề cập không giống với khái niệm nhiều người dùng hoặc hồ sơ công việc (Work profile) trong hệ thống Android. Hồ sơ công việc thực sự được triển khai bằng cách phân vùng phạm vi UID. Ví dụ: 10000-19999 đại diện cho người dùng chính, trong khi 110000-119999 đại diện cho hồ sơ công việc. Mỗi ứng dụng thông thường trong số đó đều có UID riêng. +::: + +Mỗi ứng dụng có thể có nhiều nhóm, với GID đại diện cho nhóm chính, thường khớp với UID. Các nhóm khác được gọi là nhóm bổ sung. Một số quyền nhất định được kiểm soát thông qua các nhóm, chẳng hạn như quyền truy cập mạng hoặc truy cập Bluetooth. + +Ví dụ: nếu chúng ta thực thi lệnh `id` trong shell ADB, kết quả đầu ra có thể trông như thế này: + +```sh +oriole:/ $ id +uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:shell:s0 +``` + +Ở đây, UID là `2000` và GID (ID nhóm chính) cũng là `2000`. Ngoài ra, nó thuộc một số nhóm bổ sung, chẳng hạn như `inet` (biểu thị khả năng tạo ổ cắm `AF_INET` và `AF_INET6`) và `sdcard_rw` (biểu thị quyền đọc/ghi đối với thẻ SD). + +Root Profile của KernelSU cho phép tùy chỉnh UID, GID và các nhóm cho quy trình gốc sau khi thực thi `su`. Ví dụ: Cấu hình gốc của ứng dụng gốc có thể đặt UID của nó thành `2000`, có nghĩa là khi sử dụng `su`, các quyền thực tế của ứng dụng sẽ ở cấp shell ADB. Nhóm `inet` có thể bị xóa, ngăn lệnh `su` truy cập mạng. + +:::tip Ghi chú +Hồ sơ ứng dụng chỉ kiểm soát các quyền của tiến trình gốc sau khi sử dụng `su`; nó không kiểm soát các quyền của ứng dụng. Nếu một ứng dụng đã yêu cầu quyền truy cập mạng, ứng dụng đó vẫn có thể truy cập mạng ngay cả khi không sử dụng `su`. Việc xóa nhóm `inet` khỏi `su` chỉ ngăn `su` truy cập mạng. +::: + +Root Profile được thực thi trong kernel và không dựa vào hành vi tự nguyện của các ứng dụng root, không giống như việc chuyển đổi người dùng hoặc nhóm thông qua `su`, việc cấp quyền `su` hoàn toàn phụ thuộc vào người dùng chứ không phải nhà phát triển. + +### Capabilities + +Capabilities (khả năng) là một cơ chế phân tách đặc quyền trong Linux. + +Với mục đích thực hiện kiểm tra quyền, việc triển khai UNIX truyền thống phân biệt hai loại quy trình: quy trình đặc quyền (có ID người dùng hiệu quả là 0, được gọi là siêu người dùng hoặc root) và quy trình không có đặc quyền (có UID hiệu dụng khác 0). Các quy trình đặc quyền bỏ qua tất cả các bước kiểm tra quyền của kernel, trong khi các quy trình không có đặc quyền phải chịu sự kiểm tra quyền đầy đủ dựa trên thông tin xác thực của quy trình (thường là: UID hiệu quả, GID hiệu quả và danh sách nhóm bổ sung). + +Bắt đầu với Linux 2.2, Linux chia các đặc quyền truyền thống được liên kết với siêu người dùng thành các đơn vị riêng biệt, được gọi là các khả năng, có thể được bật và tắt một cách độc lập. + +Mỗi Khả năng đại diện cho một hoặc nhiều đặc quyền. Ví dụ: `CAP_DAC_READ_SEARCH` thể hiện khả năng bỏ qua việc kiểm tra quyền để đọc tệp cũng như quyền đọc và thực thi thư mục. Nếu người dùng có UID hiệu dụng là `0` (người dùng root) thiếu khả năng `CAP_DAC_READ_SEARCH` hoặc cao hơn, điều này có nghĩa là ngay cả khi họ là root, họ không thể tùy ý đọc tệp. + +Cấu hình gốc của KernelSU cho phép tùy chỉnh các Khả năng của tiến trình gốc sau khi thực thi `su`, nhờ đó đạt được việc cấp một phần "quyền root". Không giống như UID và GID đã nói ở trên, một số ứng dụng gốc nhất định yêu cầu UID là `0` sau khi sử dụng `su`. Trong những trường hợp như vậy, việc giới hạn Khả năng của người dùng root này bằng UID `0` có thể hạn chế các hoạt động được phép của họ. + +:::tip Rất Khuyến Nghị +Capabilities của Linux [tài liệu chính thức](https://man7.org/linux/man-pages/man7/capabilities.7.html) cung cấp giải thích chi tiết về các khả năng mà mỗi Capabilities thể hiện. Nếu bạn có ý định tùy chỉnh Capabilities, bạn nên đọc tài liệu này trước. +::: + +### SELinux + +SELinux là một cơ chế Kiểm Soát Truy Cập Bắt Buộc (Mandatory Access Control: MAC) mạnh mẽ. Nó hoạt động theo nguyên tắc **từ chối mặc định**: bất kỳ hành động nào không được cho phép rõ ràng đều bị từ chối. + +SELinux có thể chạy ở hai chế độ chung: + +1. Chế độ cho phép (Permissive mode): Các sự kiện từ chối được ghi lại nhưng không được thực thi. +2. Chế độ thực thi (Enforcing mode): Các sự kiện từ chối được ghi lại và thực thi. + +:::warning Cảnh báo +Các hệ thống Android hiện đại phụ thuộc rất nhiều vào SELinux để đảm bảo an ninh hệ thống tổng thể. Chúng tôi khuyên bạn không nên sử dụng bất kỳ hệ thống tùy chỉnh nào chạy ở "chế độ cho phép" vì nó không mang lại lợi thế đáng kể nào so với hệ thống mở hoàn toàn. +::: + +Việc giải thích khái niệm đầy đủ về SELinux rất phức tạp và nằm ngoài phạm vi của tài liệu này. Trước tiên nên hiểu hoạt động của nó thông qua các tài nguyên sau: + +1. [Wikipedia](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) +2. [Red Hat: What Is SELinux?](https://www.redhat.com/en/topics/linux/what-is-selinux) +3. [ArchLinux: SELinux](https://wiki.archlinux.org/title/SELinux) + +Root Profile của KernelSU cho phép tùy chỉnh ngữ cảnh SELinux của tiến trình gốc sau khi thực thi `su`. Các quy tắc kiểm soát truy cập cụ thể có thể được đặt cho bối cảnh này để cho phép kiểm soát chi tiết hơn các quyền . + +Trong các trường hợp điển hình, khi một ứng dụng thực thi `su`, nó sẽ chuyển quy trình sang miền SELinux với **quyền truy cập không hạn chế**, chẳng hạn như `u:r:su:s0`. Thông qua Root Profile, miền này có thể được chuyển sang miền tùy chỉnh, chẳng hạn như `u:r:app1:s0` và một loạt quy tắc có thể được xác định cho miền này: + +```sh +type app1 +enforce app1 +typeattribute app1 mlstrustedsubject +allow app1 * * * +``` + +Lưu ý rằng quy tắc `allow app1 * * *` chỉ được sử dụng cho mục đích minh họa. Trong thực tế, quy tắc này không nên được sử dụng rộng rãi vì nó không khác nhiều so với chế độ cho phép. + +### Escalation + +Nếu cấu hình của Root Profile không được đặt đúng cách, một tình huống escalation (leo thang) có thể xảy ra: các hạn chế do Root Profile áp đặt có thể vô tình bị lỗi. + +Ví dụ: nếu bạn cấp quyền root cho người dùng shell ADB (đây là trường hợp phổ biến), sau đó bạn cấp quyền root cho một ứng dụng thông thường nhưng định cấu hình cấu hình gốc của nó bằng UID 2000 (là UID của người dùng shell ADB) , ứng dụng có thể có được quyền truy cập root đầy đủ bằng cách thực hiện lệnh `su` hai lần: + +1. Lần thực thi `su` đầu tiên phải tuân theo sự thực thi của App Profile và sẽ chuyển sang UID `2000` (adb shell) thay vì `0` (root). +2. Lần thực thi `su` thứ hai, vì UID là `2000` và bạn đã cấp quyền truy cập root cho UID `2000` (adb shell) trong cấu hình, ứng dụng sẽ có toàn quyền root. + +:::warning Ghi chú +Hành vi này hoàn toàn được mong đợi và không phải là lỗi. Vì vậy, chúng tôi khuyến nghị như sau: + +Nếu bạn thực sự cần cấp quyền root cho ADB (ví dụ: với tư cách là nhà phát triển), bạn không nên thay đổi UID thành `2000` khi định cấu hình Root Profile. Sử dụng `1000` (hệ thống) sẽ là lựa chọn tốt hơn. +::: + +## Non-Root Profile + +### Umount Modules + +KernelSU cung cấp một cơ chế systemless để sửa đổi các phân vùng hệ thống, đạt được thông qua việc gắn overlayfs. Tuy nhiên, một số ứng dụng có thể nhạy cảm với hành vi đó. Do đó, chúng ta có thể dỡ bỏ các mô-đun được gắn trên các ứng dụng này bằng cách đặt tùy chọn "umount modules". + +Ngoài ra, giao diện cài đặt của trình quản lý KernelSU cung cấp một công tắc cho "umount modules by default". Theo mặc định, công tắc này được **bật**, có nghĩa là KernelSU hoặc một số mô-đun sẽ hủy tải các mô-đun cho ứng dụng này trừ khi áp dụng cài đặt bổ sung. Nếu bạn không thích cài đặt này hoặc nếu nó ảnh hưởng đến một số ứng dụng nhất định, bạn có các tùy chọn sau: + +1. Giữ nút chuyển cho "umount modules by default" và tắt riêng tùy chọn "umount modules" trong App Profile đối với các ứng dụng yêu cầu tải mô-đun (hoạt động như "whitelist"). +2. Tắt khóa chuyển cho "umount modules by default" và bật riêng tùy chọn "umount modules" trong App Profile cho các ứng dụng yêu cầu dỡ bỏ mô-đun (hoạt động như "blacklist"). + +:::info +Trong các thiết bị sử dụng kernel phiên bản 5.10 trở lên, kernel thực hiện việc dỡ tải các mô-đun. Tuy nhiên, đối với các thiết bị chạy phiên bản kernel dưới 5.10, công tắc này chỉ đơn thuần là một tùy chọn cấu hình và bản thân KernelSU không thực hiện bất kỳ hành động nào. Một số mô-đun, chẳng hạn như Zygisksu, có thể sử dụng công tắc này để xác định xem có cần thiết phải dỡ bỏ mô-đun hay không. +::: diff --git a/website/docs/vi_VN/guide/difference-with-magisk.md b/website/docs/vi_VN/guide/difference-with-magisk.md new file mode 100644 index 00000000..c6758fa0 --- /dev/null +++ b/website/docs/vi_VN/guide/difference-with-magisk.md @@ -0,0 +1,28 @@ +# Sự khác biệt với Magisk + +Mặc dù có nhiều điểm tương đồng giữa mô-đun KernelSU và mô-đun Magisk nhưng chắc chắn vẫn có một số khác biệt do cơ chế triển khai hoàn toàn khác nhau của chúng. Nếu muốn mô-đun của mình chạy trên cả Magisk và KernelSU, bạn phải hiểu những khác biệt này. + +## Điểm tương đồng + +- Định dạng file mô-đun: đều sử dụng định dạng zip để sắp xếp các mô-đun và định dạng của các mô-đun gần như giống nhau +- Thư mục cài đặt mô-đun: cả hai đều nằm trong `/data/adb/modules` +- systemless: cả hai đều hỗ trợ sửa đổi /system theo cách không có hệ thống thông qua các mô-đun +- post-fs-data.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau +- service.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau +- system.prop: hoàn toàn giống nhau +- sepolicy.rule: hoàn toàn giống nhau +- BusyBox: các tập lệnh được chạy trong BusyBox với "standalone mode" được bật trong cả hai trường hợp + +## Điểm khác biệt + +Trước khi hiểu sự khác biệt, bạn cần biết cách phân biệt mô-đun của bạn đang chạy trong KernelSU hay Magisk. Bạn có thể sử dụng biến môi trường `KSU` để phân biệt nó ở tất cả những nơi bạn có thể chạy tập lệnh mô-đun (`customize.sh`, `post-fs-data.sh`, `service.sh`). Trong KernelSU, biến môi trường này sẽ được đặt thành `true`. + +Dưới đây là một số khác biệt: + +- Không thể cài đặt các mô-đun KernelSU ở chế độ Recovery. +- Các mô-đun KernelSU không có hỗ trợ tích hợp cho Zygisk (nhưng bạn có thể sử dụng các mô-đun Zygisk thông qua [ZygiskOnKernelSU](https://github.com/Dr-TSNG/ZygiskOnKernelSU). +- Phương pháp thay thế hoặc xóa file trong module KernelSU hoàn toàn khác với Magisk. KernelSU không hỗ trợ phương thức `.replace`. Thay vào đó, bạn cần tạo một file cùng tên với `mknod filename c 0 0` để xóa file tương ứng. +- Các thư mục của BusyBox khác nhau. BusyBox tích hợp trong KernelSU nằm ở `/data/adb/ksu/bin/busybox`, trong khi ở Magisk nó nằm ở `/data/adb/magisk/busybox`. **Lưu ý rằng đây là hoạt động nội bộ của KernelSU và có thể thay đổi trong tương lai!** +- KernelSU không hỗ trợ file `.replace`; tuy nhiên, KernelSU hỗ trợ biến `REMOVE` và `REPLACE` để xóa hoặc thay thế các tệp và thư mục. +- KernelSU thêm giai đoạn `boot-completed` để chạy một số script khi khởi động xong. +- KernelSU thêm giai đoạn `post-mount` để chạy một số tập lệnh sau khi gắn overlayfs diff --git a/website/docs/vi_VN/guide/faq.md b/website/docs/vi_VN/guide/faq.md index e1af326a..cc660285 100644 --- a/website/docs/vi_VN/guide/faq.md +++ b/website/docs/vi_VN/guide/faq.md @@ -1,64 +1,67 @@ -# FAQ - Câu hỏi thường gặp +# FAQ ## 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ợ. +Đầu tiên, thiết bị của bạn sẽ có thể mở khóa bootloader. Nếu không thể thì nó 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. +Sau đó, cài đặt Ứng dụng 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 chưa được hỗ trợ ngay, nhưng bạn có thể tạo nguồn kernel và tích hợp KernelSU để nó hoạt động hoặc sử dụng [unofficially-support-devices](unofficially-support-devices). ## KernelSU có cần mở khóa Bootloader không? -Chắc chắn là có. +Chắc chắn có. -## KernelSU có hỗ trợ các modules không? +## KernelSU có hỗ trợ các mô-đun 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 đã :) +Có, nhưng đây là phiên bản đầu tiên nên có thể bị lỗi. Đợi nó ổn định 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ới Lsposed, bạn có thể thử [Zygisk trên KernelSU](https://github.com/Dr-TSNG/ZygiskOnKernelSU) +Có, [Dreamland](https://github.com/canyie/Dreamland) và [TaiChi](https://taichi.cool) hiện đã hoạt động. Đối với LSPosed, bạn có thể làm cho nó hoạt động bằng [Zygisk on KernelSU](https://github.com/Dr-TSNG/ZygiskOnKernelSU) + +## KernelSU có hỗ trợ Zygisk không? + +KernelSU không có hỗ trợ Zygisk tích hợp sẵn nhưng thay vào đó, bạn có thể sử dụng [Zygisk on KernelSU](https://github.com/Dr-TSNG/ZygiskOnKernelSU). ## 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. +Hệ thống mô-đun của KernelSU xung đột với magic mount của Magisk, nếu có bất kỳ mô-đun nào được kích hoạt trong KernelSU thì toàn bộ Magisk sẽ không 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. +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 root userspace 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 thay thế Magisk. -## KernelSU có thể hỗ trợ các thiết bị không sử dụng GKI không? +## KernelSU có thể hỗ trợ các thiết bị không phải 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. +Điều đó là có thể. Nhưng bạn nên tải nguồn kernel về và tích hợp KernelSU vào source tree rồi tự biên dịch kernel. -## KernelSU có thể hỗ trợ các thiết bị chạy Android 12 trở xuống không? +## KernelSU có thể hỗ trợ các thiết bị dưới Android 12 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ế: +Chính kernel của thiết bị ảnh hưởng đến khả năng tương thích của KernelSU và nó 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à kernel 5.10+(thiết bị 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) +2. Các thiết bị có kernel cũ (Một số thiết bị Android 12 cũng là kernel cũ) tương thích (Bạn nên tự build 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! +Có thể, KernelSU hiện đã được backport sang kernel 4.14, đối với kernel cũ hơn, bạn cần backport nó một cách cẩn thận và PR rất đáng 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) +Vui lòng tham khảo [hướng dẫn](how-to-integrate-for-non-gki) -## Tại sao tôi đang chạy Android 13 nhưng kernel lại ghi "android12-5.10" ? +## Tại sao phiên bản Android của tôi là 13 và kernel hiển thị "android12-5.10"? -Phiên bản kernel hoàn toàn không liên quan gì đến phiên bản Android, nếu bạn muốn flash kernel thì hãy luôn để ý đến **phiên bản kernel**, phiên bản Android ở phần đầu (VD : android12-\*) thường không quan trọng lắm. +Phiên bản Kernel không liên quan gì đến phiên bản Android, nếu bạn cần flash kernel thì dùng luôn phiên bản kernel, phiên bản Android không quá quan trọng. -## Đã có mount namespace --mount-master/global trên KernelSU chưa ? +## Đã có mount namespace --mount-master/global trên KernelSU chưa? -Hiện tại chưa có (hoặc có thể sẽ có trong tương lại), nhưng bạn có thể dùng `nsenter -t 1 -m sh` để vào global mount namespace. +Hiện tại thì không (có thể có trong tương lai), nhưng có nhiều cách để chuyển sang global mount namespace một cách thủ công, chẳng hạn như: -## KernelSU có hỗ trợ Zygisk không ? +1. `nsenter -t 1 -m sh` để lấy shell trong global mount namespace. +2. Thêm `nsenter --mount=/proc/1/ns/mnt` vào lệnh bạn muốn thực thi, sau đó lệnh được thực thi trong global mount namespace. KernelSU cũng [sử dụng cách này](https://github.com/tiann/KernelSU/blob/77056a710073d7a5f7ee38f9e77c9fd0b3256576/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt#L115) -KernelSU không có Zygisk bên trong, nhưng bạn có thể dùng [Zygisk trên KernelSU](https://github.com/Dr-TSNG/ZygiskOnKernelSU) +## Tôi là GKI1.0, tôi có thể sử dụng cái này không? -## Tôi đang ở GKI 1.0, tôi dùng được cái này chứ ? - -GKI1 khác hoàn toàn với GKI2 nên bạn sẽ phải tự compile kernel cho mình. +GKI1 khác hoàn toàn với GKI2, bạn phải tự biên dịch kernel. diff --git a/website/docs/vi_VN/guide/hidden-features.md b/website/docs/vi_VN/guide/hidden-features.md new file mode 100644 index 00000000..2b8f0c71 --- /dev/null +++ b/website/docs/vi_VN/guide/hidden-features.md @@ -0,0 +1,7 @@ +# Tính Năng Ẩn + +## .ksurc + +Theo mặc định, `/system/bin/sh` tải `/system/etc/mkshrc`. + +Bạn có thể tạo su tải tệp rc tùy chỉnh bằng cách tạo tệp `/data/adb/ksu/.ksurc`. diff --git a/website/docs/vi_VN/guide/how-to-build.md b/website/docs/vi_VN/guide/how-to-build.md index f48a3cca..de08124c 100644 --- a/website/docs/vi_VN/guide/how-to-build.md +++ b/website/docs/vi_VN/guide/how-to-build.md @@ -1,15 +1,17 @@ -# Làm cách nào để build KernelSU ? +# Làm thế nào để xây dựng 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: +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) +1. [Building Kernels](https://source.android.com/docs/setup/build/building-kernels?hl=vi) +2. [GKI Release Builds](https://source.android.com/docs/core/architecture/kernel/gki-release-builds?hl=vi) -> 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) +::: warning +Trang này dành cho thiết bị GKI, nếu bạn sử dụng kernel cũ, vui lòng tham khảo [cách tích hợp KernelSU cho kernel cũ](how-to-integrate-for-non-gki) +::: ## Build Kernel -### Đồng bộ mã nguồn +### Đồng bộ hóa mã nguồn kernel ```sh repo init -u https://android.googlesource.com/kernel/manifest @@ -18,21 +20,19 @@ repo init -m manifest.xml repo sync ``` -The `` 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) - -`` 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) +`` 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ể dự đoán lại. 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?hl=vi) ### 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. +Trước tiên, vui lòng kiểm tra [tài liệu chính thức](https://source.android.com/docs/setup/build/building-kernels?hl=vi). -Ví dụ: Đầu tiên chúng ta cần build một image cho aarch64: +Ví dụ: chúng ta cần xây dựng kernel image 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. +Đừng quên thêm cờ `LTO=thin`, nếu không quá trình xây dựng có thể thất bại nếu 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`: @@ -40,26 +40,26 @@ Bắt đầu từ Android 13, kernel được xây dựng bởi `bazel`: tools/bazel build --config=fast //common:kernel_aarch64_dist ``` -## Build kernel cùng với KernelSU +## Build Kernel 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: +Nếu bạn có thể build kernel thành công thì việc xây dựng KernelSU thật dễ dàng, Chọn bất kỳ một lần chạy trong thư mục gốc nguồn Kernel: -- Latest tag(stable) +- Thẻ mới nhất (ổn định) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash - ``` -- main branch(dev) +- nhánh chính (dev) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main ``` -- Select tag(Such as v0.5.2) +- Chọn thẻ (chẳng hạn như v0.5.2) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2 ``` -Và rồi build lại, bạn sẽ có được một image chứa KernelSU \ No newline at end of file +Và sau đó build lại kernel và bạn sẽ có được image kernel với KernelSU! diff --git a/website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md b/website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md index c188b1f2..1e1b8137 100644 --- a/website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md +++ b/website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md @@ -18,19 +18,19 @@ KernelSU sử dụng kprobe để thực hiện hook kernel, nếu *kprobe* ch Đầu tiên, thêm KernelSU vào mã nguồn kernel của bạn: -- Latest tag(stable) +- Thẻ mới nhất (ổn định) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash - ``` -- main branch(dev) +- Nhánh chính (dev) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main ``` -- Select tag(Such as v0.5.2) +- Chọn thẻ (chẳng hạn như v0.5.2) ```sh curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2 diff --git a/website/docs/vi_VN/guide/installation.md b/website/docs/vi_VN/guide/installation.md index 8c1569ad..d85176de 100644 --- a/website/docs/vi_VN/guide/installation.md +++ b/website/docs/vi_VN/guide/installation.md @@ -1,32 +1,171 @@ # Cách cài đặt -## Kiểm tra xem thiết bị có hỗ trợ không +## Kiểm tra xem thiết bị của bạn có đượ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) +Tải xuống APP KernelSU manager từ [GitHub Releases](https://github.com/tiann/KernelSU/releases) hoặc [Coolapk market](https://www.coolapk.com/apk/me.weishu.kernelsu) và cài đặt nó vào thiết bị của bạn: -- 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. +- Nếu ứng dụng hiển thị `Unsupported`, nghĩa là **Bạn nên tự biên dịch kernel**, KernelSU sẽ không và không bao giờ cung cấp boot image để bạn flash. +- Nếu ứng dụng hiển thị `Not installed` thì thiết bị của bạn đã được KernelSU hỗ trợ chính thức. -## Tìm một boot.img +:::info +Đối với các thiết bị hiển thị `Unsupported`, đây là [Thiết-bị-hỗ-trợ-không-chính-thức](unofficially-support-devices.md), bạn có thể tự biên dịch kernel. +::: -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. +## Sao lưu stock boot.img -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`. +Trước khi flash, trước tiên bạn phải sao lưu stock boot.img. Nếu bạn gặp phải bootloop (vòng lặp khởi động), bạn luôn có thể khôi phục hệ thống bằng cách quay lại trạng thái khởi động ban đầu bằng fastboot. -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`. +::: warning +Việc flash có thể gây mất dữ liệu, hãy đảm bảo thực hiện tốt bước này trước khi chuyển sang bước tiếp theo!! Bạn cũng có thể sao lưu tất cả dữ liệu trên điện thoại nếu cần. +::: -## Flash boot.img này vào thiết bị +## Kiến thức cần thiết -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: +### ADB và fastboot + +Theo mặc định, bạn sẽ sử dụng các công cụ ADB và fastboot trong hướng dẫn này, vì vậy nếu bạn không biết về chúng, chúng tôi khuyên bạn nên sử dụng công cụ tìm kiếm để tìm hiểu về chúng trước tiên. + +### KMI + +Kernel Module Interface (KMI), các phiên bản kernel có cùng KMI đều **tương thích** Đây là ý nghĩa của "general" trong GKI; ngược lại, nếu KMI khác thì các kernel này không tương thích với nhau và việc flash kernel image có KMI khác với thiết bị của bạn có thể gây ra bootloop. + +Cụ thể, đối với thiết bị GKI, định dạng phiên bản kernel phải như sau: + +```txt +KernelRelease := +Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix +w .x .y -zzz -k -something +``` + +`w.x-zzz-k` là phiên bản KMI. Ví dụ: nếu phiên bản kernel của thiết bị là `5.10.101-android12-9-g30979850fc20`, thì KMI của nó là `5.10-android12-9`; về mặt lý thuyết, nó có thể khởi động bình thường với các kernel KMI khác. + +::: tip +Lưu ý rằng SubLevel trong phiên bản kernel không phải là một phần của KMI! Điều đó có nghĩa là `5.10.101-android12-9-g30979850fc20` có cùng KMI với `5.10.137-android12-9-g30979850fc20`! +::: + +### Phiên bản kernel vs Phiên bản Android + +Xin lưu ý: **Phiên bản kernel và phiên bản Android không nhất thiết phải giống nhau!** + +Nếu bạn nhận thấy phiên bản kernel của mình là `android12-5.10.101` nhưng phiên bản hệ thống Android của bạn là Android 13 hoặc phiên bản khác; xin đừng ngạc nhiên, vì số phiên bản của hệ thống Android không nhất thiết phải giống với số phiên bản của kernel Linux; Số phiên bản của kernel Linux nhìn chung nhất quán với phiên bản của hệ thống Android đi kèm với **thiết bị khi nó được xuất xưởng**. Nếu hệ thống Android được nâng cấp sau này, phiên bản kernel thường sẽ không thay đổi. Nếu bạn cần flash, **vui lòng tham khảo phiên bản kernel!!** + +## Giới thiệu + +Có một số phương pháp cài đặt KernelSU, mỗi phương pháp phù hợp với một kịch bản khác nhau, vì vậy vui lòng chọn khi cần. + +1. Cài đặt với Recovery tùy chỉnh (ví dụ TWRP) +2. Cài đặt bằng ứng dụng flash kernel, chẳng hạn như Franco Kernel Manager +3. Cài đặt thông qua fastboot bằng boot.img do KernelSU cung cấp +4. Sửa boot.img theo cách thủ công và cài đặt nó + +## Cài đặt với Recovery tùy chỉnh + +Điều kiện chắc chắn: Thiết bị của bạn phải có Recovery tùy chỉnh, chẳng hạn như TWRP; nếu không hoặc chỉ có Recovery chính thức, hãy sử dụng phương pháp khác. + +Các bước: + +1. Từ [Release page](https://github.com/tiann/KernelSU/releases) của KernelSU, tải xuống gói zip bắt đầu bằng AnyKernel3 phù hợp với phiên bản điện thoại của bạn; ví dụ: phiên bản kernel của điện thoại là `android12-5.10. 66`, thì bạn nên tải xuống tệp `AnyKernel3-android12-5.10.66_yyyy-MM.zip` (trong đó `yyyy` là năm và `MM` là tháng). +2. Khởi động lại điện thoại vào TWRP. +3. Sử dụng adb để đặt AnyKernel3-*.zip vào điện thoại /sdcard và chọn cài đặt nó trong GUI TWRP; hoặc bạn có thể trực tiếp `adb sideload AnyKernel-*.zip` để cài đặt. + +PS. Phương pháp này phù hợp với mọi cài đặt (không giới hạn cài đặt ban đầu hoặc các nâng cấp tiếp theo), miễn là bạn sử dụng TWRP. + +## Cài đặt bằng Kernel Flasher + +Điều kiện chắc chắn: Thiết bị của bạn phải được root. Ví dụ: bạn đã cài đặt Magisk để root hoặc bạn đã cài đặt phiên bản KernelSU cũ và cần nâng cấp lên phiên bản KernelSU khác; nếu thiết bị của bạn chưa được root, vui lòng thử các phương pháp khác. + +Các bước: + +1. Tải xuống zip AnyKernel3; hãy tham khảo phần *Cài đặt bằng Custom Recovery* để biết hướng dẫn tải xuống. +2. Mở Ứng dụng Kernel Flash và sử dụng zip AnyKernel3 được cung cấp để flash. + +Nếu trước đây bạn chưa từng sử dụng Ứng dụng Kernel flash thì sau đây là những ứng dụng phổ biến hơn. + +1. [Kernel Flasher](https://github.com/capntrips/KernelFlasher/releases) +2. [Franco Kernel Manager](https://play.google.com/store/apps/details?id=com.franco.kernel) +3. [Ex Kernel Manager](https://play.google.com/store/apps/details?id=flar2.exkernelmanager) + +PS. Phương pháp này thuận tiện hơn khi nâng cấp KernelSU và có thể thực hiện mà không cần máy tính (sao lưu trước!). . + +Các bước: + +## Cài đặt bằng boot.img do KernelSU cung cấp + +Phương pháp này không yêu cầu bạn phải có TWRP, cũng như không yêu cầu điện thoại của bạn phải có quyền root; nó phù hợp cho lần cài đặt KernelSU đầu tiên của bạn. + +### Tìm boot.img thích hợp + +KernelSU cung cấp boot.img chung cho các thiết bị GKI và bạn nên chuyển boot.img vào phân vùng boot của thiết bị. + +Bạn có thể tải xuống boot.img từ [GitHub Release](https://github.com/tiann/KernelSU/releases), xin lưu ý rằng bạn nên sử dụng đúng phiên bản boot.img. Ví dụ: nếu thiết bị của bạn hiển thị kernel `android12-5.10.101` , bạn cần tải xuống `android-5.10.101_yyyy-MM.boot-.img`. (Giữ KMI nhất quán!) + +Trong đó `` đề cập đến định dạng nén kernel của boot.img chính thức của bạn, vui lòng kiểm tra định dạng nén kernel của boot.img ban đầu của bạn, bạn nên sử dụng đúng định dạng, ví dụ: `lz4`, `gz`; nếu bạn sử dụng định dạng nén không chính xác, bạn có thể gặp phải bootloop. + +::: info +1. Bạn có thể sử dụng magiskboot để lấy định dạng nén của boot ban đầu; Tất nhiên, bạn cũng có thể hỏi những người khác, có kinh nghiệm hơn có cùng kiểu máy với thiết bị của bạn. Ngoài ra, định dạng nén của kernel thường không thay đổi nên nếu bạn khởi động thành công với một định dạng nén nào đó thì bạn có thể thử định dạng đó sau. +2. Các thiết bị Xiaomi thường sử dụng `gz` hoặc **uncompressed** (không nén). +3. Đối với thiết bị Pixel, hãy làm theo hướng dẫn bên dưới. +::: + +### flash boot.img vào thiết bị + +Sử dụng `adb` để kết nối thiết bị của bạn, sau đó thực thi `adb restart bootloader` để vào chế độ fastboot, sau đó sử dụng lệnh này để flash KernelSU: ```sh fastboot flash boot boot.img ``` -## Khởi động lại +::: info +Nếu thiết bị của bạn hỗ trợ `fastboot boot`, trước tiên bạn có thể sử dụng `fastboot boot boot.img` để thử sử dụng boot.img để khởi động hệ thống trước. Nếu có điều gì bất ngờ xảy ra, hãy khởi động lại để boot. +::: -Khi flash xong, hãy khởi động lại thiết bị : +### khởi động lại + +Sau khi flash xong bạn nên khởi động lại máy: ```sh fastboot reboot ``` + +## Vá boot.img theo cách thủ công + +Đối với một số thiết bị, định dạng boot.img không quá phổ biến, chẳng hạn như không `lz4`, `gz` và không nén; điển hình nhất là Pixel, định dạng boot.img của nó là nén `lz4_legacy`, ramdisk có thể là `gz` cũng có thể là nén `lz4_legacy`; tại thời điểm này, nếu bạn trực tiếp flash boot.img do KernelSU cung cấp, điện thoại có thể không khởi động được; Tại thời điểm này, bạn có thể vá boot.img theo cách thủ công để dùng được. + +Nhìn chung có hai phương pháp vá: + +1. [Android-Image-Kitchen](https://forum.xda-developers.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/) +2. [magiskboot](https://github.com/topjohnwu/Magisk/releases) + +Trong số đó, Android-Image-Kitchen phù hợp để hoạt động trên PC và magiskboot cần sự kết nối của điện thoại di động. + +### Chuẩn bị + +1. Lấy stock boot.img của điện thoại; bạn có thể lấy nó từ nhà sản xuất thiết bị của mình, bạn có thể cần [payload-dumper-go](https://github.com/ssut/payload-dumper-go) +2. Tải xuống tệp zip AnyKernel3 do KernelSU cung cấp phù hợp với phiên bản KMI của thiết bị của bạn (bạn có thể tham khảo *Cài đặt với Khôi phục tùy chỉnh*). +3. Giải nén gói AnyKernel3 và lấy tệp `Image`, đây là tệp kernel của KernelSU. + +### Sử dụng Android-Image-Kitchen + +1. Tải Android-Image-Kitchen về máy tính. +2. Đặt stock boot.img vào thư mục gốc của Android-Image-Kitchen. +3. Thực thi `./unpackimg.sh boot.img` tại thư mục gốc của Android-Image-Kitchen, lệnh này sẽ giải nén boot.img và bạn sẽ nhận được một số tệp. +4. Thay thế `boot.img-kernel` trong thư mục `split_img` bằng `Image` bạn đã trích xuất từ AnyKernel3 (lưu ý đổi tên thành boot.img-kernel). +5. Thực thi `./repackimg.sh` tại thư mục gốc của 在 Android-Image-Kitchen; Và bạn sẽ nhận được một file có tên `image-new.img`; Flash boot.img này bằng fastboot(Tham khảo phần trước). + +### Sử dụng magiskboot + +1. Tải xuống Magisk mới nhất từ [Trang phát hành](https://github.com/topjohnwu/Magisk/releases) +2. Đổi tên Magisk-*.apk thành Magisk-vesion.zip và giải nén nó. +3. Đẩy `Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so` vào thiết bị của bạn bằng adb: `adb push Magisk-v25.2/lib/arm64-v8a/libmagiskboot.so /data/local/tmp /magiskboot` +4. Đẩy stock boot.img và Image trong AnyKernel3 vào thiết bị của bạn. +5. Nhập thư mục adb shell và cd `/data/local/tmp/`, sau đó `chmod +x magiskboot` +6. Nhập adb shell và cd `/data/local/tmp/`, thực thi `./magiskboot unpack boot.img` để giải nén `boot.img`, bạn sẽ nhận được file `kernel`, đây là kernel gốc của bạn. +7. Thay thế `kernel` bằng `Image`: `mv -f Image kernel` +8. Thực thi `./magiskboot repack boot.img` để đóng gói lại boot img và bạn sẽ nhận được một tệp `new-boot.img`, flash tệp này vào thiết bị bằng fastboot. + +## Các phương pháp khác + +Trên thực tế, tất cả các phương pháp cài đặt này chỉ có một ý tưởng chính, đó là **thay thế kernel gốc bằng kernel do KernelSU cung cấp**; chỉ cần đạt được điều này là có thể cài đặt được; ví dụ, sau đây là các phương pháp có thể khác. + +1. Trước tiên hãy cài đặt Magisk, nhận quyền root thông qua Magisk, sau đó sử dụng flasher kernel để flash trong zip AnyKernel từ KernelSU. +2. Sử dụng một số bộ công cụ flash trên PC để flash trong kernel do KernelSU cung cấp. diff --git a/website/docs/vi_VN/guide/module.md b/website/docs/vi_VN/guide/module.md new file mode 100644 index 00000000..352c87c9 --- /dev/null +++ b/website/docs/vi_VN/guide/module.md @@ -0,0 +1,257 @@ +# Hướng dẫn mô-đun + +KernelSU cung cấp một cơ chế mô-đun giúp đạt được hiệu quả sửa đổi thư mục hệ thống trong khi vẫn duy trì tính toàn vẹn của phân vùng system. Cơ chế này thường được gọi là "systemless". + +Cơ chế mô-đun của KernelSU gần giống với Magisk. Nếu bạn đã quen với việc phát triển mô-đun Magisk thì việc phát triển các mô-đun KernelSU cũng rất tương tự. Bạn có thể bỏ qua phần giới thiệu các mô-đun bên dưới và chỉ cần đọc [difference-with-magisk](difference-with-magisk.md). + +## Busybox + +KernelSU cung cấp tính năng nhị phân BusyBox hoàn chỉnh (bao gồm hỗ trợ SELinux đầy đủ). Tệp thực thi được đặt tại `/data/adb/ksu/bin/busybox`. BusyBox của KernelSU hỗ trợ "ASH Standalone Shell Mode" có thể chuyển đổi thời gian chạy. Standalone mode này có nghĩa là khi chạy trong shell `ash` của BusyBox, mọi lệnh sẽ trực tiếp sử dụng applet trong BusyBox, bất kể cái gì được đặt là `PATH`. Ví dụ: các lệnh như `ls`, `rm`, `chmod` sẽ **KHÔNG** sử dụng những gì có trong `PATH` (trong trường hợp Android theo mặc định, nó sẽ là `/system/bin/ls`, ` /system/bin/rm` và `/system/bin/chmod` tương ứng), nhưng thay vào đó sẽ gọi trực tiếp các ứng dụng BusyBox nội bộ. Điều này đảm bảo rằng các tập lệnh luôn chạy trong môi trường có thể dự đoán được và luôn có bộ lệnh đầy đủ cho dù nó đang chạy trên phiên bản Android nào. Để buộc lệnh _not_ sử dụng BusyBox, bạn phải gọi tệp thực thi có đường dẫn đầy đủ. + +Mỗi tập lệnh shell đơn lẻ chạy trong ngữ cảnh của KernelSU sẽ được thực thi trong shell `ash` của BusyBox với standalone mode được bật. Đối với những gì liên quan đến nhà phát triển bên thứ 3, điều này bao gồm tất cả các tập lệnh khởi động và tập lệnh cài đặt mô-đun. + +Đối với những người muốn sử dụng tính năng "Standalone mode" này bên ngoài KernelSU, có 2 cách để kích hoạt tính năng này: + +1. Đặt biến môi trường `ASH_STANDALONE` thành `1`
Ví dụ: `ASH_STANDALONE=1 /data/adb/ksu/bin/busybox sh