Tìm hiểu quá trình khởi động của các thiết bị Android. | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Tìm hiểu quá trình khởi động của các thiết bị Android.

Bảo Ngô SoT

Búa Gỗ
Trước khi đi vào vấn đề chính, tôi xin giải thích một số thuật ngữ được dùng trong bài viết:
  1. Boot loader: Một chương trình nhỏ sẵn có trên chip nhớ, được gọi thực thi đầu tiên khi thiết bị nhận được tín hiệu khởi động.
  2. boot.img: Chứa kernel, initrd và một số thành phần khác; được đặt ở một phân vùng riêng trên chip nhớ.
  3. initrd: Initial ramdisk, các tập tin thực thi cần thiết trong quá trình khởi động.
  4. Kernel: Nhân (lõi), ở đây đề cập đến Android kernel. (Android) kernel được biên dịch kèm với một bộ driver tương ứng với một model cụ thể, do đó không thể cài đặt kernel của model này lên model kia, dù cấu hình của chúng "có vẻ" rất tương đồng nhau.
  5. Mount point: Điểm gắn kết, là các thư mục (directory) mà các phân vùng gắn vào. Hãy tưởng tượng nó như ổ đĩa C, D trên Windows.
Tín hiệu khởi động
Screenshot_2018-01-09-16-06-03.jpg

Khi bạn nhấn Power key, kết nối thiết bị với nguồn điện hay gửi một reboot command, một tín hiệu khởi động sẽ được sinh ra. Android boot loader, được biết đến dưới tên gọi LK (Little Kernel), sẽ nhận tín hiệu này, thiết lập môi trường thực thi và quyết định xem bước tiếp theo sẽ làm gì.
  • Nếu đơn thuần chỉ là thao tác nhấn Power key hoặc một reboot command (*), boot loader sẽ nạp (load) các thành phần của boot.img lên bộ nhớ RAM và bắt đầu quá trình khởi động.
  • Nếu tín hiệu khởi động đi kèm với Home/Volum up (down) key pressed, thiết bị sẽ đi vào Recovery mode (hoặc Fastboot mode).
Quá trình khởi động
Screenshot_2018-01-09-13-09-24.jpg


Kernel sẽ được khởi động trước tiên. Hàng loạt các tiến trình được thực thi như khởi tạo cache, bộ định thời (CPU scheduler), nạp các driver, v.v. Khi kernel kết thúc booting, nó sẽ gọi thực thi initrd. Lúc này hệ thống sẽ thiết lập các security context như SELinux, Permission,...; các biến môi trường (Environment variable ); các điểm gắn kết v.v. Đồng thời, bạn cũng sẽ thấy boot animation (hoạt cảnh khởi động) trên màn hình thiết bị.
Tiếp đến, Android library (Dalvik VM, Zygote và các dịch vụ hệ thống) được khởi chạy. Kết thúc quá trình này, hệ thống của bạn xem như khởi động thành công.


Tuy nhiên...
  • Đối với một số thiết bị, ở giai đoạn (*), trước khi kernel và initrd được nạp vào bộ nhớ thì boot loader sẽ xác minh (verify) boot.img có bị chỉnh sửa (trái phép) hay không. Nếu có, việc khởi động sẽ thất bại và màn hình sẽ xuất hiện một thông báo lỗi. Hành động này được cho là giúp bảo vệ thiết bị khỏi các nguy cơ bị tấn công bằng cách can thiệp vào cơ chế bảo mật ở cấp độ hệ thống; đồng thời cũng ngăn không cho người dùng cài đặt các custom kernel, custom recovery (unlock boot loader có thể giải quyết vấn đề này, tuy nhiên chế độ bảo hành sẽ bị vô hiệu lực).
  • Việc khởi động vào Recovery mode cũng tương tự như khởi động vào Android OS (chỉ khác là không có bước khởi động Android library).
  • Các thiết bị sử dụng MediaTek chip set chạy Android nhỏ hơn 4.4 sử dụng uboot làm boot loader thay vì LK.
Lời kết
Trên đây tôi đã trình bày cụ thể quá trình khởi động của các thiết bị Android. Mọi thông tin trong bài viết là kiến thức và kinh nghiệm tôi tích lũy được sau nhiều năm làm việc với Android, tuy nhiên chắc chắn cũng không tránh khỏi sai sót. Mọi góp ý xin để lại bình luận bên dưới, tôi vô cùng hoan nghênh.
Mọi sự sao chép, trích dẫn vui lòng ghi rõ nguồn, xin cảm ơn.
 
Sửa lần cuối:

d_chien90

Búa Gỗ
Hơi khó hiểu với mình :D
 


Top