Các phần của bộ nhớ trong ROM Android - hãy cùng làm rõ phần đau đầu về cách bố trí bộ nhớ hệ thống. Điện thoại thông minh bao gồm những gì?

Theo mặc định, Google không trang bị cho các thiết bị Android trình quản lý tệp chính thức vì điều này trái với chính sách của công ty. Việc truy cập vào các tệp khác nhau được thực hiện bằng các ứng dụng thích hợp - ảnh, video, trình soạn thảo văn bản, v.v. Nhưng sớm hay muộn, nhu cầu truy cập trực tiếp vào các tệp vẫn nảy sinh.

Làm việc với cấu trúc thư mục và tệp trong Android.

Thư mục nào chứa danh bạ và dữ liệu khác trên Android? Định dạng hệ thống tệp Android không giống với . Đây là cách tổ chức bộ nhớ trong ở đây:

  1. Bộ nhớ thiết bị là bộ nhớ bạn sẽ làm việc. Tại đây bạn có thể sử dụng và thay đổi bất kỳ tập tin nào. Giống như Windows hoặc Mac Explorer. Dữ liệu từ một số ứng dụng được lưu trữ ở đây - ảnh, video, bộ đệm trò chơi hoặc trình duyệt Internet, v.v.
  2. Thẻ SD – Nhiều thiết bị Android cũng có khe cắm thẻ SD. Bạn có thể kết nối thẻ SD với máy tính hoặc thiết bị khác, tải tệp xuống thẻ rồi lắp thẻ vào điện thoại thông minh của mình. Nếu bạn đang sử dụng thiết bị Marshmallow và thẻ SD được định dạng để sử dụng làm bộ nhớ trong, thẻ đó sẽ không xuất hiện riêng trong trình quản lý tệp mà thay vào đó sẽ trở thành một phần của thiết bị của bạn.
  3. Root – Android có một thư mục gốc đặc biệt nơi lưu trữ dữ liệu, thông tin bí mật, v.v.. Hầu hết các trình quản lý tệp không thể thực hiện thay đổi ở đây vì lý do bảo mật. Trừ khi bạn có quyền truy cập root và trình quản lý tệp có khả năng sử dụng nó. Việc lấy quyền root và truy cập dữ liệu hệ thống đòi hỏi kiến ​​thức về cấu trúc của hệ thống và mục đích của các thành phần của nó, vì vậy tốt hơn hết những người mới bắt đầu không nên mạo hiểm.

  • Tất cả ảnh từ camera điện thoại của bạn đều được lưu trong thư mục này, giống như trên các máy ảnh kỹ thuật số khác. Chúng xuất hiện trong tiện ích Thư viện hoặc Ảnh nhưng thực tế được đặt ở đây. Điều này cũng áp dụng để lưu trữ các tập tin video.
  • Bluetooth – tự nó đã nói lên điều đó;
  • Tải xuống. Tải xuống trình duyệt được đặt ở đây. Chúng có thể được tự do thay đổi, xóa hoặc di chuyển. Các tập tin đã tải xuống có thể được xuất sang bất kỳ ổ đĩa nào.
  • Phim, Nhạc, Hình ảnh, Nhạc chuông, Video. Đây là những thư mục được thiết kế để lưu trữ các tập tin media cá nhân của bạn. Cần thiết để truy cập nhanh và đồng bộ hóa điện thoại thông minh Android với PC.
  • Thư mục Hệ thống lưu trữ tất cả cài đặt hệ thống và dữ liệu từ tất cả các ứng dụng điện thoại thông minh.

Bạn có thể xem các thư mục này từ bất kỳ trình quản lý tệp nào. Một cú nhấp chuột vào tệp sẽ hiển thị danh sách các ứng dụng đã cài đặt hỗ trợ nó. Bạn có thể làm việc trực tiếp với dữ liệu được lưu trữ ở đây, mở nó giống như trên PC.

Cách quản lý tệp và sử dụng hệ thống tệp trên Android

Tính minh bạch và chức năng của hệ thống tệp Android là một trong những lợi thế của nó so với iOS. Nó cho phép bạn dễ dàng làm việc với các tệp bằng cách mở chúng trong bất kỳ ứng dụng nào... miễn là bạn biết cách thực hiện và nơi cài đặt các ứng dụng mới. Android đi kèm với trình quản lý tệp được chuyển theo mặc định. Một số nhà sản xuất cài đặt sẵn các tiện ích mạnh mẽ hơn của riêng họ. Mặt khác, để quản lý hoàn toàn cấu trúc tệp Android, bạn sẽ cần ứng dụng của bên thứ ba. Đây là những gì bạn cần biết.

Cách truy cập Trình quản lý tệp tích hợp của Android

Các thiết bị Android 6.x (Marshmallow) trở lên có trình quản lý tệp tích hợp, nó chỉ bị ẩn trong cài đặt. Mở Cài đặt-Bộ nhớ-Khác và bạn sẽ nhận được danh sách đầy đủ tất cả các tệp và thư mục trong bộ nhớ của điện thoại thông minh. Ứng dụng này cũng có thể được hiển thị dưới dạng một phím tắt riêng trên màn hình chính. Trong Nougat Android 7, trình quản lý tệp là một phần của ứng dụng Tải xuống nhưng về cơ bản nó giống nhau. Một số loại tệp nhất định được hiển thị ở đây, chẳng hạn như hình ảnh, video, nhạc và nội dung tải xuống. Để truy cập hệ thống tệp đầy đủ của điện thoại, hãy đi tới Cài đặt-Bộ nhớ-Khác.

Người quản lý bên thứ ba

Nhưng trình quản lý tích hợp khá yếu so với một số tùy chọn có sẵn trên Google Play. Để quản lý tệp hiệu quả hơn, hãy cài đặt một trong các trình quản lý tệp có sẵn. Solid Explorer là một trong những trình quản lý tệp phổ biến nhất trên Play Market. Nó có các tính năng tích hợp mạnh mẽ như truy cập tài khoản đám mây và hai cửa sổ ở chế độ ngang (trên mọi thiết bị!). Hỗ trợ khách hàng tốt và các bản cập nhật được phát hành thường xuyên. Sau 2 tuần, thời gian dùng thử miễn phí sẽ kết thúc và bạn sẽ phải trả 2 USD để sử dụng tiếp.

ES File Explorer là một trong những trình quản lý tệp gốc tốt nhất hiện có trên Cửa hàng Google Play. Một trong những tính năng chính của tiện ích này là sử dụng Thùng rác, nơi lưu trữ dữ liệu đã xóa gần đây. Ứng dụng miễn phí này không chỉ chứa tất cả các tính năng quản lý tệp cơ bản mà còn có khả năng quản lý bất kỳ ứng dụng nào trên điện thoại thông minh đã root. Tính năng tiện ích:

  • truy cập, sắp xếp, chuyển, đổi tên, sao chép và dán, xóa, sao lưu hoặc khôi phục bất kỳ tệp và thư mục nào trên thiết bị Android đã root;
  • nén tài liệu, giải nén dữ liệu nén;
  • mã hóa dữ liệu bằng mật khẩu;
  • tải phương tiện lên các dịch vụ đám mây.

Root Browser File Manager là một trình duyệt mạnh mẽ và hiệu quả với chức năng ấn tượng. Đặc điểm:

  • Thay đổi tùy chọn truy cập trên điện thoại thông minh hoặc các thiết bị khác của bạn;
  • gửi các tập tin riêng lẻ hoặc theo đợt;
  • tạo các thư mục và thay đổi chúng theo ý của bạn;
  • tạo một bản sao hoàn chỉnh, xóa, đổi tên và thậm chí di chuyển dữ liệu sang thiết bị khác;
  • lưu tập tin ở bất cứ đâu trên thiết bị của bạn.

File Manager + cho phép bạn quản lý các tập tin và thư mục trên thiết bị, NAS và dịch vụ đám mây. Quản lý tệp cả trong thư mục cục bộ và trong bộ lưu trữ đám mây. Hỗ trợ tất cả các hành động của Explorer như duyệt, tìm kiếm, điều hướng cấu trúc thư mục, sao chép/dán, cắt/xóa, đổi tên, trích xuất và sắp xếp. Kiểm soát hoàn toàn các tệp phương tiện, tài liệu và APK. Truy cập bộ nhớ từ xa hoặc chia sẻ, chẳng hạn như máy chủ NAS và FTP. Phân tích bộ nhớ cục bộ của bạn để xóa các tệp không cần thiết.

Nếu cần quyền truy cập vào các mục lịch hoặc ghi chú, bạn cần phải dựa vào ứng dụng mình đang sử dụng. Tất cả các tệp dữ liệu tiện ích đều nằm trong thư mục /data/. File Explorer của NextApp có các cách mới để truyền tệp giữa Android và máy tính của bạn, hỗ trợ tích hợp cho nhiều Windows để bạn có thể xem hai cửa sổ cùng một lúc và hỗ trợ hầu hết các định dạng tệp và tài liệu mà ứng dụng được lưu trữ. Truy cập máy tính mạng, bao gồm FTP, WebDAV và SMB. Duyệt nội dung âm thanh, danh sách phát, album và nghệ sĩ.

Cách thêm nhạc chuông và âm thanh thông báo của riêng bạn

Hệ điều hành linh hoạt của Android cho phép thực hiện nhiều tùy chỉnh và một trong những phương pháp phổ biến nhất để cá nhân hóa điện thoại thông minh của bạn là cài nhạc chuông và âm thanh thông báo của riêng bạn. Để làm được điều này, trước tiên bạn cần hiểu cấu trúc tệp và xác định chính xác vị trí lưu trữ nhạc chuông.

Trước tiên, bạn cần tải nhạc chuông hoặc âm thanh thông báo trực tiếp về thiết bị Android của mình hoặc chuyển từ máy tính sang bộ nhớ trong. Android hỗ trợ các định dạng MP3, M4A, WAV và OGG, vì vậy hầu hết mọi tệp âm thanh bạn có thể tải xuống đều hoạt động.

Bước 2: Copy file âm thanh vào thư mục thích hợp

Sau khi tải file âm thanh về, bạn cần di chuyển nó vào thư mục mong muốn. Ở đây bạn cần sử dụng trình quản lý tệp của bên thứ ba. Hãy xem quy trình sử dụng ES File Explorer làm ví dụ. Sau khi cài đặt Explorer, hãy mở nó và chuyển đến thư mục “Tải xuống” trong bộ nhớ trong hoặc trên thẻ SD (tùy thuộc vào cài đặt thiết bị). Chọn tệp bằng cách nhấn và giữ, sau đó nhấp vào Cắt trong menu. Bấm vào nút Quay lại một lần để quay lại thư mục trước đó. Tại đây, hãy mở thư mục Nhạc chuông, sau đó nhấp vào “Chèn”. Nếu bạn không có thư mục Nhạc chuông trên thiết bị của mình, chỉ cần tạo một thư mục.

Bước 3: Khởi động lại điện thoại thông minh của bạn

Sau khi chuyển nhạc chuông vào thư mục mong muốn, hãy khởi động lại điện thoại hoặc máy tính bảng của bạn để Android có thể xem tệp. Mở Cài đặt và đi tới Âm thanh & Thông báo. Chọn “Nhạc chuông” hoặc “Nhạc chuông thông báo mặc định”, tìm nhạc chuông của bạn trong danh sách nhạc chuông tiêu chuẩn và đặt làm nhạc chuông. Nếu bạn đang sử dụng thẻ SD, bạn cũng có thể truy cập thư mục Android thông qua đầu đọc thẻ và PC. Điều này có thể tiết lộ các thư mục mới không hiển thị trong Android Explorer. Đặc biệt nếu bạn sử dụng cùng một thẻ SD trên nhiều thiết bị.

Thư mục nào chứa danh bạ và dữ liệu khác?

Những tài liệu này chỉ có thể được truy cập bởi trình quản lý tệp của bên thứ ba. Tệp danh bạ được gọi là contact.db hoặc contact2.db và nằm dọc theo đường dẫn:

/data/data/com.android.providers.contacts/databases/

Đây là file cơ sở dữ liệu nên không cần phải chỉnh sửa quá sâu. Để xuất danh bạ sang tập tin và lưu vào thẻ nhớ hoặc PC, hãy sử dụng các công cụ tích hợp sẵn. Mở Danh bạ, sau đó chọn Menu, chọn Xuất và kiểm tra danh bạ bạn muốn, sau đó chọn Xuất sang thẻ nhớ và nhấn OK. Một tài liệu có phần mở rộng .vcf sẽ xuất hiện trong thư mục storage/sdcard1. chuyển nó sang thiết bị hoặc PC khác. Để khôi phục danh bạ, hãy chuyển đến menu “Danh bạ”, chọn “Nhập từ bộ nhớ trong”. Chỉ định đường dẫn nơi danh bạ được lưu trữ trên Android của bạn và đợi quá trình sao chép hoàn tất.

Tin nhắn văn bản và MMS cũng được lưu trữ trong gói dữ liệu:

/data/data/com.android.providers.telephony/databases/mmssms.db

Để lưu chúng hoặc chuyển chúng sang thiết bị khác, bạn sẽ cần phần mềm đặc biệt. Ví dụ: Sao lưu & Khôi phục SMS hoặc nội dung tương tự. Phần mềm này hoạt động theo nguyên tắc tương tự - chạy tiện ích - Sao lưu SMS - chỉ định đường dẫn lưu và đợi cho đến khi thao tác hoàn tất. Sau đó, sao chép tệp vào PC hoặc thiết bị khác. Bạn có thể khôi phục SMS bằng tiện ích tương tự. Chọn Khôi phục SMS, chỉ định đường dẫn lưu trữ SMS và đợi quá trình khôi phục hoàn tất.

Quản lý dữ liệu và tệp trong Android tương tự như điều hướng các thư mục trên Windows hoặc Linux. Chỉ ở đây bạn mới cần có được các quyền đặc biệt để thay đổi dữ liệu hệ thống - quyền root.

    Một số mẫu máy tính bảng Android nhất định có thể không bao gồm một số thành phần được liệt kê ở trên.

    Tất cả máy tính bảng Android đều được điều khiển bởi một trong các phiên bản hệ điều hành di động của Google. Tuy nhiên, các phiên bản cũ hơn có thể không hỗ trợ một số ứng dụng hiện đại.

    Tất cả các phiên bản của hệ điều hành di động phổ biến nhất đều có một cơ sở chung. Chúng ta có thể coi hệ điều hành Android như một cấu trúc nhiều lớp. Các kỹ sư máy tính gọi đây là ngăn xếp phần mềm. Các phần tử ở trên cùng của ngăn xếp là những gì người dùng nhìn thấy khi họ tương tác với hệ điều hành. Ở cuối ngăn xếp là những phần của hệ điều hành tương tác trực tiếp với phần cứng của thiết bị.

    Vì vậy, ở mức thấp nhất là bản thân các thành phần phần cứng: bộ xử lý, cảm biến, dây dẫn và bảng mạch. Lớp tiếp theo là kernel của hệ điều hành. Hạt nhân đôi khi còn được gọi là phần sụn (hoặc phần sụn). Định nghĩa tiếng Anh của “firmware” được biết đến nhiều hơn. Phần mềm này kiểm soát, quản lý và phân bổ tài nguyên phần cứng của thiết bị.

    Phần này của hệ điều hành “dịch” sang ngôn ngữ của các thành phần phần cứng các lệnh mà người dùng đưa ra thông qua giao diện đồ họa tiện lợi. Mẫu hạt nhân cho Android là hệ điều hành mã nguồn mở Linux 2.6.

    Phía trên nhân hệ điều hành là các thư viện Android. Chúng là các tập hợp hướng dẫn mà thiết bị tuân theo khi xử lý nhiều loại dữ liệu khác nhau. Một ví dụ sẽ là thư viện định hướng 3D. Nó chứa tất cả các hướng dẫn mà thiết bị Android cần để nhận biết và phản hồi với những thay đổi về vị trí của nó trong không gian.

    Ở cùng cấp độ của ngăn xếp phần mềm là các thư viện gốc cần thiết để hỗ trợ các ứng dụng được viết bằng Java. Java là ngôn ngữ lập trình của Sun Microsystems. Cho đến gần đây, điện thoại hỗ trợ ứng dụng Java vẫn rất phổ biến. Hiện nay, chúng ngày càng được thay thế bởi điện thoại thông minh.

    Máy ảo Android nằm ở cùng cấp độ với ngăn xếp phần mềm hệ điều hành. Phần mềm này chịu trách nhiệm tạo ra một môi trường điều hành ảo, hay còn gọi là môi trường điều hành ảo. Một máy ảo mô phỏng một thiết bị vật lý có hệ điều hành riêng biệt. Google đã thiết kế lớp này để mỗi ứng dụng chạy trên hệ điều hành Android hoạt động như một quy trình riêng biệt. Bằng cách này, nếu một trong các tiến trình đang chạy bị lỗi thì các tiến trình khác sẽ không bị ảnh hưởng. Máy ảo cũng đóng vai trò quản lý bộ nhớ.

    Ở cấp độ tiếp theo là khung ứng dụng. Nó là nền tảng cho tất cả các ứng dụng trên thiết bị Android. Cơ sở hạ tầng ứng dụng là kết nối giữa các ứng dụng và phần còn lại của hệ điều hành.

    Google khuyến khích các nhà phát triển tạo các ứng dụng tương tác với lớp này trong giao diện lập trình ứng dụng (API) của hệ điều hành của gã khổng lồ tìm kiếm. Nhà phát triển chỉ cần làm quen với các quy tắc liên quan đến API này. Họ không cần phải suy nghĩ về đặc tính kỹ thuật của từng máy tính bảng Android.

    Cấp cao nhất của ngăn xếp phần mềm chứa giao diện người dùng và tất cả các ứng dụng của máy tính bảng Android. Đây là một phần của hệ điều hành mà người dùng liên tục nhìn thấy trước mặt mình. Nhưng đằng sau lớp hấp dẫn và đầy màu sắc này ẩn chứa rất nhiều đoạn mã nhàm chán chỉ thú vị với các chuyên gia.

    Giống như bất kỳ hệ điều hành nào khác và các tài nguyên phần cứng khác của máy tính bảng.

    Dựa trên tài liệu từ Computer.howstuffworks.com

Mọi chủ sở hữu máy tính bảng hoặc điện thoại Android đều cần biết vị trí của một số tệp nhất định. Với sự trợ giúp của những thông tin như vậy, bạn có thể hiểu rõ hơn về chính thiết bị. Ví dụ: điều này giúp đơn giản hóa quá trình chuyển danh bạ và tệp cài đặt giữa các thiết bị.

Hệ thống tệp có nhiều đặc điểm không phải lúc nào cũng rõ ràng đối với người dùng bình thường đã quen với việc sử dụng hệ điều hành Windows trên máy tính. Bằng cách nhấp vào liên kết, bạn có thể tìm hiểu thêm về hệ thống tệp Android. Sau khi nghiên cứu những điểm chính, bạn sẽ có thể chuyển tập tin, xóa bộ nhớ của tiện ích và thực hiện các chức năng quan trọng khác mà không gây ra bất kỳ lỗi hệ thống nào.

Các đặc điểm chính

Android chạy trên hệ điều hành Linux (để dễ hiểu thì hầu hết các máy tính đều là Windows). Cấu trúc tệp được trình bày dưới dạng một “cây”, đó là lý do tại sao việc tìm ra vị trí của một tệp/thư mục/ứng dụng cụ thể không phải lúc nào cũng dễ dàng và nhanh chóng.

Bạn cần hiểu rằng hệ thống phân biệt chữ hoa chữ thường. Ví dụ: trên máy tính, bạn không thể tạo các thư mục có cùng tên (được viết bằng các chữ cái khác nhau - chữ hoa, chữ thường) trong thư mục gốc, vì hệ thống sẽ coi chúng giống nhau. Nói về Android, mọi thứ ở đây đều khác. Hệ thống di động coi chúng khác nhau.

Nếu máy tính bảng hoặc điện thoại thông minh có quyền truy cập Root thì có thể tìm kiếm các thư mục không được hiển thị trên một tiện ích thông thường (ví dụ: Bảo mật, nơi vẫn còn dữ liệu về các ứng dụng được chuyển sang thẻ flash). Nhiều người dùng cho rằng việc này vô ích và xóa ngay lập tức để giải phóng càng nhiều bộ nhớ càng tốt, khiến ứng dụng không thể khởi chạy được.

Nếu có nhu cầu, bạn chỉ cần tạo thư mục của riêng mình để có thể lưu trữ bất kỳ dữ liệu nào, bao gồm cả trò chơi. Nhưng chúng ta không được quên tính chính xác của tên để có thể thay đổi mà không gặp vấn đề gì trong tương lai.

File cài đặt: chuyển sang thiết bị khác

Trong một số trường hợp, có thể cần phải chuyển tệp cài đặt từ thiết bị này sang thiết bị khác. Thông thường, điều này xảy ra khi không có thời gian tìm kiếm trên Google Play. Để thực hiện việc này, bạn cần tìm tệp này (phần mở rộng .apk), sau đó chuyển nó bằng Bluetooth.

Cách Android hoạt động

Bạn có thể tìm hiểu về những khả năng tiềm ẩn của hệ thống phần mềm bằng cách hiểu nguyên tắc hoạt động của chúng. Trong một số trường hợp, điều này khó thực hiện vì mã hệ thống có thể bị đóng, nhưng trong trường hợp của Android, chúng ta có thể nghiên cứu toàn bộ hệ thống từ trong ra ngoài. Trong bài viết này, tôi sẽ không nói về tất cả các sắc thái của Android và sẽ chỉ tập trung vào cách hệ điều hành khởi động và những sự kiện nào diễn ra trong khoảng thời gian từ khi nhấn nút nguồn đến khi màn hình xuất hiện.

Đồng thời, tôi sẽ giải thích những gì chúng ta có thể thay đổi trong chuỗi sự kiện này và cách các nhà phát triển chương trình cơ sở tùy chỉnh sử dụng những khả năng này để triển khai những việc như điều chỉnh các tham số hệ điều hành, mở rộng không gian lưu trữ ứng dụng, trao đổi kết nối, các tùy chỉnh khác nhau, v.v. Tất cả thông tin này có thể được sử dụng để tạo chương trình cơ sở của riêng bạn và thực hiện nhiều cách hack và sửa đổi khác nhau.

Bước một. U-BOOT và bảng phân vùng

Tất cả bắt đầu với bộ nạp khởi động chính. Sau khi bật nguồn, hệ thống sẽ thực thi mã bootloader được lưu trong bộ nhớ vĩnh viễn của thiết bị. Thông thường, vai trò của nó được thực hiện bởi một phiên bản sửa đổi của bộ tải khởi động u-boot có hỗ trợ tích hợp cho giao thức fastboot, nhưng nhà sản xuất chip di động hoặc điện thoại thông minh/máy tính bảng có quyền chọn bất kỳ bộ tải khởi động nào khác theo sở thích của mình. Ví dụ: Rockchip sử dụng bộ tải khởi động riêng không tương thích với fastboot và yêu cầu các công cụ độc quyền để flash và quản lý nó.

Ngược lại, giao thức fastboot là một hệ thống quản lý bộ nạp khởi động từ PC, cho phép bạn thực hiện các hành động như mở khóa bộ nạp khởi động, flash kernel mới và khôi phục, cài đặt chương trình cơ sở và nhiều thứ khác. Mục đích của fastboot là có thể khôi phục điện thoại thông minh về trạng thái ban đầu trong tình huống mà tất cả các phương tiện khác đều không thành công. Fastboot sẽ vẫn giữ nguyên ngay cả khi do thử nghiệm, bạn xóa toàn bộ nội dung của tất cả các phân vùng bộ nhớ NAND khỏi điện thoại thông minh của mình, mất quyền truy cập vào cả Android và khôi phục.

Sau khi nhận được quyền kiểm soát, u-boot sẽ kiểm tra bảng phân vùng và chuyển quyền điều khiển sang kernel được flash vào phân vùng có tên boot, sau đó kernel trích xuất hình ảnh RAM từ cùng phân vùng vào bộ nhớ và bắt đầu tải Android hoặc bảng điều khiển khôi phục. Bộ nhớ NAND trong thiết bị Android được chia thành sáu phần bắt buộc có điều kiện:

  • boot - chứa kernel và đĩa RAM, thường có kích thước khoảng 16 MB;
  • recovery - bảng điều khiển khôi phục, bao gồm kernel, một bộ ứng dụng bảng điều khiển và tệp cài đặt, kích thước 16 MB;
  • hệ thống - chứa Android, trong các thiết bị hiện đại, kích thước ít nhất là 1 GB;
  • bộ đệm - được thiết kế để lưu trữ dữ liệu được lưu trong bộ nhớ đệm, cũng được sử dụng để lưu chương trình cơ sở trong quá trình cập nhật OTA và do đó có kích thước tương tự như kích thước của phân vùng hệ thống;
  • dữ liệu người dùng - chứa các cài đặt, ứng dụng và dữ liệu người dùng, tất cả dung lượng bộ nhớ NAND còn lại được phân bổ cho nó;
  • misc - chứa cờ xác định hệ thống sẽ khởi động ở chế độ nào: Android hoặc recovery.

Trong thuật ngữ Linux, đĩa RAM là một loại đĩa cứng ảo chỉ tồn tại trong RAM. Đầu quá trình khởi động, kernel trích xuất nội dung đĩa từ hình ảnh và gắn nó làm hệ thống tệp gốc (rootfs).

Ngoài chúng, có thể còn có các phần khác, nhưng đánh dấu chung được xác định ở giai đoạn thiết kế của điện thoại thông minh và, trong trường hợp u-boot, được khâu vào mã bootloader. Điều này có nghĩa là: 1) bảng phân vùng không thể bị hủy vì nó luôn có thể được khôi phục bằng lệnh fastboot oem format; 2) để thay đổi bảng phân vùng, bạn sẽ phải mở khóa và khởi động lại bộ nạp khởi động với các tham số mới. Tuy nhiên, có những ngoại lệ cho quy tắc này. Ví dụ: bootloader của cùng một Rockchip lưu trữ thông tin về các phân vùng trong khối đầu tiên của bộ nhớ NAND, do đó không cần thiết phải flash bootloader để thay đổi nó.

Phần linh tinh đặc biệt thú vị. Có giả định rằng ban đầu nó được tạo ra để lưu trữ các cài đặt khác nhau độc lập với hệ thống chính, nhưng hiện tại, nó chỉ được sử dụng cho một mục đích: cho bộ nạp khởi động biết hệ thống sẽ được tải từ phân vùng nào - khởi động hoặc khôi phục. Đặc biệt, tính năng này được ứng dụng Trình quản lý ROM sử dụng để tự động khởi động lại hệ thống vào chế độ khôi phục bằng cách tự động cài đặt chương trình cơ sở. Trên cơ sở đó, cơ chế khởi động kép Ubuntu Touch được xây dựng, giúp flash bộ tải khởi động Ubuntu

trong quá trình khôi phục và cho phép bạn kiểm soát hệ thống nào sẽ khởi động vào lần tiếp theo. Đã xóa phân vùng linh tinh - Tải Android, chứa đầy dữ liệu - tải khôi phục... nghĩa là Ubuntu Touch.

Một phần mã bootloader xác định bảng phân vùng:

phân vùng phân vùng cấu trúc tĩnh = ( ( "-", 123 ), ("xloader", 128 ), ("bootloader", 256 ), /* phân vùng "misc" là cần thiết để khôi phục */ ("misc", 128 ), ("-", 384), ("efs", 16384), ("recovery", 8*1024), ("boot", 8*1024), ("system", 512*1024), ("bộ đệm" , 256*1024 ), ("dữ liệu người dùng", 0 ), ( 0, 0 ) );

Bước hai. Phần khởi động

Nếu phần linh tinh không có cờ khởi động khôi phục, u-boot sẽ chuyển quyền điều khiển sang mã nằm trong phần khởi động. Đây không gì khác hơn là nhân Linux; nó nằm ở đầu phần và ngay sau đó là hình ảnh đĩa RAM được đóng gói bằng trình lưu trữ cpio và gzip, chứa các thư mục cần thiết để Android hoạt động, hệ thống khởi tạo init và các công cụ khác. Không có hệ thống tập tin trên phân vùng khởi động; hạt nhân và đĩa RAM chỉ nối tiếp nhau. Nội dung của đĩa RAM là:

  • dữ liệu - thư mục để gắn phân vùng cùng tên;
  • dev - tập tin thiết bị;
  • proc - procfs được gắn ở đây;
  • sbin - một tập hợp các tiện ích tiện ích và daemon (ví dụ adbd);
  • res - một bộ hình ảnh cho bộ sạc (xem bên dưới);
  • sys - sysfs được gắn ở đây;
  • hệ thống - thư mục để gắn phân vùng hệ thống;
  • bộ sạc - ứng dụng hiển thị quá trình sạc;
  • build.prop - cài đặt hệ thống;
  • init - hệ thống khởi tạo;
  • init.rc - cài đặt hệ thống khởi tạo;
  • ueventd.rc - cài đặt của daemon uventd có trong init.

Có thể nói, đây là bộ xương của hệ thống: một tập hợp các thư mục để kết nối các hệ thống tệp từ các phân vùng bộ nhớ NAND và một hệ thống khởi tạo sẽ xử lý phần còn lại của công việc khởi động hệ thống. Thành phần trung tâm ở đây là ứng dụng init và cấu hình init.rc của nó, mà tôi sẽ nói chi tiết sau. Trong thời gian chờ đợi, tôi muốn bạn chú ý đến các tệp bộ sạc và ueventd.rc, cũng như các thư mục sbin, proc và sys.

Tệp bộ sạc là một ứng dụng nhỏ có nhiệm vụ duy nhất là hiển thị biểu tượng pin. Nó không liên quan gì đến Android và được sử dụng khi thiết bị được kết nối với bộ sạc ở trạng thái tắt. Trong trường hợp này, Android không tải và hệ thống chỉ cần tải kernel, kết nối đĩa RAM và khởi động bộ sạc. Cái sau hiển thị biểu tượng pin, hình ảnh ở tất cả các trạng thái có thể được lưu trữ trong các tệp PNG thông thường bên trong thư mục res.

Tệp ueventd.rc là cấu hình xác định tệp thiết bị nào trong thư mục sys sẽ được tạo trong quá trình khởi động hệ thống. Trong các hệ thống dựa trên nhân Linux, việc truy cập vào phần cứng được thực hiện thông qua các tệp đặc biệt bên trong thư mục dev và daemon ueventd, một phần của init, chịu trách nhiệm tạo ra chúng trong Android. Trong tình huống bình thường, nó hoạt động ở chế độ tự động, chấp nhận các lệnh tạo tệp từ kernel, nhưng một số tệp cần được tạo độc lập. Chúng được liệt kê trong ueventd.rc.

Thư mục sbin trong kho Android thường không chứa gì ngoại trừ adbd, tức là daemon ADB, chịu trách nhiệm gỡ lỗi hệ thống khỏi PC. Nó chạy ở giai đoạn đầu khởi động hệ điều hành và cho phép bạn xác định các sự cố có thể xảy ra trong giai đoạn khởi tạo hệ điều hành. Trong phần sụn tùy chỉnh, bạn có thể tìm thấy một loạt tệp khác trong thư mục này, ví dụ như mke2fs, có thể được yêu cầu nếu phân vùng cần được định dạng lại thành ext3/4. Ngoài ra, các modder thường đặt BusyBox ở đó, nơi bạn có thể gọi hàng trăm lệnh Linux.

Trong quá trình khởi động, Android hiển thị ba màn hình khởi động khác nhau: màn hình đầu tiên xuất hiện ngay sau khi nhấn nút nguồn và được flash vào nhân Linux, màn hình thứ hai hiển thị trong giai đoạn đầu khởi tạo và được ghi trong tệp /initlogo.rle (hầu như không có được sử dụng ngày nay), cái cuối cùng được khởi chạy bằng ứng dụng bootanimation và được chứa trong tệp /system/media/bootanimation.zip.

Thư mục proc là tiêu chuẩn cho Linux; trong các giai đoạn khởi động tiếp theo, init sẽ kết nối với nó procfs, một hệ thống tệp ảo cung cấp quyền truy cập vào thông tin về tất cả các quy trình trên hệ thống. Hệ thống sẽ kết nối sysfs với thư mục sys, thư mục này mở ra quyền truy cập vào thông tin về phần cứng và cài đặt của nó. Ví dụ: bằng cách sử dụng sysfs, bạn có thể đặt thiết bị ở chế độ ngủ hoặc thay đổi thuật toán tiết kiệm năng lượng được sử dụng.

Tệp build.prop được thiết kế để lưu trữ cài đặt Android cấp thấp. Sau đó, hệ thống sẽ đặt lại các cài đặt này và ghi đè chúng bằng các giá trị từ tệp system/build.prop hiện không thể truy cập được.

Bước hai, thay thế. Phần phục hồi

Nếu cờ khởi động khôi phục trong phần linh tinh được đặt hoặc người dùng bật điện thoại thông minh với phím giảm âm lượng được giữ, u-boot sẽ chuyển quyền điều khiển sang mã nằm ở đầu phần khôi phục. Giống như phân vùng khởi động, nó chứa kernel và một đĩa RAM, được giải nén vào bộ nhớ và trở thành gốc của hệ thống tập tin. Tuy nhiên, nội dung của đĩa RAM ở đây hơi khác một chút.

Không giống như phân vùng khởi động, hoạt động như một liên kết chuyển tiếp giữa các giai đoạn tải hệ điều hành khác nhau, phân vùng khôi phục hoàn toàn tự cung cấp và chứa một hệ điều hành thu nhỏ không được kết nối với Android. Recovery có lõi riêng, bộ ứng dụng (lệnh) riêng và giao diện riêng cho phép người dùng kích hoạt các chức năng dịch vụ.

Trong quá trình khôi phục tiêu chuẩn (stock) thường chỉ có ba chức năng như vậy: cài đặt chương trình cơ sở được ký bằng khóa của nhà sản xuất điện thoại thông minh, xóa và khởi động lại. Các bản khôi phục đã được sửa đổi của bên thứ ba, chẳng hạn như ClockworkMod và TWRP, có nhiều chức năng hơn. Họ có thể định dạng hệ thống tệp, cài đặt chương trình cơ sở được ký bằng bất kỳ khóa nào (đọc: tùy chỉnh), gắn hệ thống tệp trên các phân vùng khác (cho mục đích gỡ lỗi hệ điều hành) và bao gồm hỗ trợ tập lệnh, cho phép bạn tự động hóa quy trình chương trình cơ sở và nhiều chức năng khác.

Ví dụ: bằng cách sử dụng tập lệnh, bạn có thể đảm bảo rằng sau khi khởi động, recovery sẽ tự động tìm phần sụn cần thiết trên thẻ nhớ, cài đặt chúng và khởi động lại vào Android. Tính năng này được sử dụng bởi Trình quản lý ROM, các công cụ tự động flash, cũng như cơ chế cập nhật tự động cho CyanogenMod và các chương trình cơ sở khác.

Khôi phục tùy chỉnh cũng hỗ trợ các tập lệnh sao lưu nằm trong thư mục /system/addon.d/. Trước khi flash, recovery sẽ kiểm tra các tập lệnh và thực thi chúng trước khi flash firmware. Nhờ những tập lệnh như vậy, GAP không biến mất sau khi cài đặt phiên bản phần sụn mới.

Bước thứ ba. Khởi tạo

Vì vậy, sau khi nhận được quyền kiểm soát, hạt nhân sẽ kết nối đĩa RAM và sau khi khởi tạo tất cả các hệ thống con và trình điều khiển của nó, bắt đầu quá trình init, quá trình này bắt đầu quá trình khởi tạo Android. Như tôi đã nói, init có một tệp cấu hình init.rc, từ đó quy trình sẽ tìm hiểu chính xác những gì nó phải làm để đưa hệ thống lên. Trong điện thoại thông minh hiện đại, cấu hình này có độ dài ấn tượng vài trăm dòng và cũng được trang bị một đoạn giới thiệu gồm một số cấu hình con được kết nối với cấu hình chính bằng lệnh nhập. Tuy nhiên, định dạng của nó khá đơn giản và thực chất là một tập hợp các lệnh được chia thành các khối.

Mỗi khối xác định một giai đoạn tải hoặc theo cách nói của nhà phát triển Android, một hành động. Các khối được phân tách với nhau bằng lệnh on theo sau là tên của hành động, chẳng hạn như trên init sớm hoặc trên post-fs. Khối lệnh sẽ chỉ được thực thi nếu kích hoạt cùng tên kích hoạt. Khi khởi động, init sẽ lần lượt kích hoạt các trình kích hoạt Early-init, init, Early-fs, fs, post-fs, Early-boot và boot, do đó khởi chạy các khối lệnh tương ứng.

Nếu tệp cấu hình kéo theo một số cấu hình khác được liệt kê ở đầu (và điều này hầu như luôn luôn như vậy), thì các khối lệnh có cùng tên bên trong chúng sẽ được kết hợp với cấu hình chính, để khi kích hoạt kích hoạt, init sẽ thực thi các lệnh từ các khối tương ứng của tất cả các tệp. Điều này được thực hiện để thuận tiện cho việc tạo tệp cấu hình cho một số thiết bị, khi cấu hình chính chứa các lệnh chung cho tất cả các thiết bị và những lệnh dành riêng cho từng thiết bị được ghi trong các tệp riêng biệt.

Cấu hình bổ sung đáng chú ý nhất có tên initrc.device_name.rc trong đó tên biến được xác định tự động dựa trên nội dung của tệp ro.hardware. Đây là tệp cấu hình dành riêng cho nền tảng có chứa các khối lệnh dành riêng cho thiết bị. Ngoài các lệnh chịu trách nhiệm điều chỉnh kernel, nó còn chứa một số thứ như thế này:

mount_all ./fstab.device_name

Điều đó có nghĩa là init bây giờ sẽ gắn kết tất cả các hệ thống tệp được liệt kê trong tệp ./fstab.device_name, có cấu trúc sau:

Tên_thiết bị (phân vùng) mount_point file_system fs_options các tùy chọn khác

Nó thường chứa các hướng dẫn để gắn hệ thống tệp từ các phân vùng NAND bên trong vào các thư mục /system (OS), /data (cài đặt ứng dụng) và /cache (dữ liệu được lưu trong bộ nhớ cache). Tuy nhiên, bằng cách sửa đổi một chút tệp này, chúng ta có thể buộc init khởi động hệ thống từ thẻ nhớ. Để thực hiện việc này, chỉ cần chia thẻ nhớ thành ba hoặc bốn phân vùng: 1 GB/ext4, 2 GB/ext4, 1 GB/ext4 và dung lượng fat32 còn lại. Tiếp theo, bạn cần xác định tên của các phân vùng thẻ nhớ trong thư mục /dev (chúng khác nhau đối với các thiết bị khác nhau) và thay thế chúng bằng tên thiết bị gốc trong tệp fstab.

Ở cuối khối init khởi động, rất có thể nó sẽ gặp lệnh mặc định class_start, lệnh này sẽ thông báo cho bạn rằng sau đó bạn nên khởi động tất cả các dịch vụ được liệt kê trong cấu hình có liên quan đến lớp mặc định. Mô tả dịch vụ bắt đầu bằng chỉ thị dịch vụ, theo sau là tên của dịch vụ và lệnh phải được thực thi để khởi động dịch vụ đó. Không giống như các lệnh được liệt kê trong các khối, các dịch vụ phải chạy mọi lúc, vì vậy trong suốt vòng đời của điện thoại thông minh, init sẽ treo ở chế độ nền và giám sát việc này.

Android hiện đại bao gồm hàng tá dịch vụ, nhưng hai trong số đó có vị thế đặc biệt và quyết định toàn bộ vòng đời của hệ thống.

Bước bốn. Hợp tử và App_process

Ở một giai đoạn tải nhất định, init sẽ gặp khối tương tự như khối này ở cuối cấu hình:

dịch vụ zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server lớp socket mặc định zygote Stream 660 hệ thống gốc khi khởi động lại ghi /sys/android_power/request_state đánh thức khi khởi động lại ghi /sys/power/state on onrestart khởi động lại phương tiện onrestart khởi động lại netd

Đây là mô tả về dịch vụ Zygote, một thành phần chính của bất kỳ hệ thống Android nào chịu trách nhiệm khởi tạo, khởi động các dịch vụ hệ thống, khởi động và dừng ứng dụng người dùng cũng như nhiều tác vụ khác. Zygote được khởi chạy bằng một ứng dụng nhỏ /system/bin/app_process, có thể thấy rất rõ trong phần cấu hình trên. Nhiệm vụ app_proccess là khởi chạy máy ảo Dalvik, mã của máy nằm trong thư viện chia sẻ /system/lib/libandroid_runtime.so, sau đó chạy Zygote trên đó.

Khi tất cả điều này đã hoàn tất và Zygote nằm trong tầm kiểm soát, nó bắt đầu xây dựng thời gian chạy ứng dụng Java bằng cách tải tất cả các lớp Java của khung công tác (hiện có hơn 2000 lớp). Sau đó, nó khởi động system_server, bao gồm hầu hết các dịch vụ hệ thống cấp cao (viết bằng Java), bao gồm Trình quản lý cửa sổ, Thanh trạng thái, Trình quản lý gói và quan trọng nhất là Trình quản lý hoạt động, trong tương lai sẽ chịu trách nhiệm nhận phần bắt đầu và kết thúc ứng dụng tín hiệu

Sau đó, Zygote mở socket /dev/socket/zygote và chuyển sang chế độ ngủ, chờ dữ liệu. Tại thời điểm này, Trình quản lý hoạt động đã khởi chạy trước đó sẽ gửi ý định phát sóng Intent.CATEGORY_HOME để tìm ứng dụng chịu trách nhiệm tạo màn hình nền và đặt tên của nó cho Zygote thông qua ổ cắm. Sau đó, lần lượt, phân nhánh và chạy ứng dụng trên máy ảo. Thì đấy, chúng ta có một màn hình nền trên màn hình, được tìm thấy bởi Trình quản lý hoạt động và được Zygote khởi chạy, đồng thời một thanh trạng thái được khởi chạy bởi system_server như một phần của dịch vụ Thanh trạng thái. Sau khi nhấn vào biểu tượng, màn hình sẽ gửi ý định có tên của ứng dụng này, Trình quản lý hoạt động sẽ nhận nó và chuyển lệnh khởi động ứng dụng tới daemon Zygote.

Tất cả điều này có vẻ hơi khó hiểu, nhưng điều quan trọng nhất là hãy nhớ ba điều đơn giản:

Về nhiều mặt, Android rất khác so với các hệ điều hành khác và thật khó để nhận ra điều đó ngay lập tức. Tuy nhiên, nếu bạn hiểu cách mọi thứ hoạt động thì khả năng là vô tận. Không giống như iOS và Windows Phone, hệ điều hành của Google có kiến ​​​​trúc rất linh hoạt cho phép bạn thay đổi nghiêm túc hành vi của nó mà không cần phải viết mã. Trong hầu hết các trường hợp, chỉ cần sửa các cấu hình và tập lệnh cần thiết là đủ.

][ 05.14