Trong hầu hết các cơ sở nguồn android như được tìm thấy trong nguồn AOSP/CAF/CM (Dự án Android Open Source, CodeAurora diễn đàn, CyanogenMod tương ứng), sẽ có mã C được gọi là rild, (Radio Interface lớp Daemon) . Điều này thường được tìm thấy trong số /hardware/ril
của cây nguồn.
Daemon này chạy từ thời điểm Android khởi động và tạo ổ cắm gọi là /dev/socket/rild
và /dev/socket/rild-debug
. Sẽ có một thư viện độc quyền đến từ Qualcomm, HTC, được tải động vào thời gian chạy khi khởi động. Đó là thư viện độc quyền mà lần lượt, giao tiếp với phần mềm radio. Và các móc nối của rild cho các cuộc gọi lại vào thư viện độc quyền được thiết lập ở đó và sau đó.
Ở lớp rild, qua ổ cắm nói trên, là cách lớp Android (được tìm thấy trong cây nguồn, frameworks/base/telephony/com/android/internal/telephony/RIL.java
) giao tiếp.
Ở phía Java, nó mở ổ cắm để đọc/ghi, cùng với việc thiết lập ý định và thiết lập đại biểu cho các sự kiện phát/nhận thông qua ổ cắm này.
Ví dụ: cuộc gọi đến, thư viện độc quyền, gọi móc gọi lại như được thiết lập bởi rild. Các rild viết tiêu chuẩn chung AT lệnh modem Hayes vào ổ cắm, ở phía bên Java, nó đọc và giải thích các lệnh modem, và từ đó, các PhoneManager chương trình phát sóng CALL_STATE_RINGING
, trong đó Điện thoại ứng dụng (tìm thấy trong nguồn packages/apps/Phone
) đã đăng ký người nhận và khởi động giao diện Người dùng và đó là cách bạn nhận được để trả lời cuộc gọi.
Một ví dụ khác, làm cho một cuộc gọi đi, bạn quay số trên Android, mục đích được tạo ra và do đó các PhoneManager (này là gốc rễ của tất cả, ở đây, không thể nhớ đầu đầu của tôi, nghĩ rằng nó ở một nơi nào đó trong cây nguồn) nhận được ý định, chuyển đổi nó thành một chuỗi các lệnh modem của AT Hayes, ghi nó vào ổ cắm, rild sau đó gọi một cuộc gọi lại đến thư viện độc quyền, độc quyền thư viện lần lượt đại biểu cho phần mềm radio.
dụ cuối cùng, gửi tin nhắn văn bản, từ Tin nhắn (tìm thấy trong cây packages/apps/Mms
nguồn) ứng dụng, văn bản mà bạn gõ, bị đẩy vào một ý định, các PhoneManager nhận được ý định, chuyển đổi văn bản sang GSM- được mã hóa bằng cách sử dụng các chữ cái GSM 7 bit (IIRC), được ghi vào socket, lần lượt rild gọi lại thư viện sở hữu độc quyền, thư viện độc quyền lần lượt giao cho phần mềm radio và văn bản hiện đã rời tên miền của chiếc điện thoại và đang ở trong không khí ở đâu đó ...:) Cùng với việc gửi tin nhắn quảng bá trong chính Android, miễn là quyền sử dụng READ_PHONE_STATE
được chỉ định và được chỉ định trong AndroidManifest.xml. Tương tự như vậy, khi nhận được tin nhắn văn bản, ngược lại, phần mềm radio nhận được một số byte, thư viện sở hữu độc quyền gọi lại gọi tới rild và do đó ghi ra các byte vào ổ cắm. Về phía Java, nó đọc từ nó, và giải mã chuỗi các byte, chuyển đổi nó thành văn bản như chúng ta biết, kích hoạt một phát sóng với một thông báo nhận được thông báo. Các Tin nhắn ứng dụng đến lượt nó, đã đăng ký nhận cho phát sóng nói, và gửi một mục đích để thanh thông báo để nói điều gì đó như "Tin nhắn mới nhận được từ + xxxxxx"
các ý đồ được tìm thấy trong frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java
Đó là ý chính về cách hệ thống điện thoại hoạt động, vẻ đẹp thực sự là, nó sử dụng các lệnh modem chung của AT Hayes do đó đơn giản hóa và ẩn các cơ chế sở hữu thực sự.
Đối với những người như Qualcomm, HTC, hãy quên nó khi nghĩ rằng họ sẽ mở thư viện được đề cập vì lớp điện thoại vô tuyến được nhúng trong mạch S-o-C (Hệ thống trên Chip)! Một số thiết bị cầm tay cung cấp khả năng để làm điều đó, flash phần mềm sai (chẳng hạn như không tương thích hoặc không thích hợp cho thiết bị cầm tay), hôn điện thoại tốt -bye và sử dụng nó như một cái nút cửa hoặc trọng lượng giấy! :)
Cần lưu ý rằng không có cơ chế JNI nào có liên quan. Đây là từ sự hiểu biết của tôi về cách nó hoạt động, từ những gì tôi có thể nói là điều này, firmware đài phát thanh được nạp vào một địa chỉ bộ nhớ một nơi nào đó hạt nhân Linux đã dành không gian địa chỉ và không chạm vào nó, một cái gì đó giống như trở lại trong những ngày máy tính cũ khi DOS khởi động, có những địa chỉ dành riêng được BIOS sử dụng, tôi nghĩ, nó tương tự ở đây, các địa chỉ được đánh dấu là đã bị chiếm bởi firmware, trong đó thư viện radio độc quyền nói với nó - và kể từ thư viện đang chạy trong không gian địa chỉ thuộc sở hữu của hạt nhân, một lá thuộc sở hữu của root với quyền root, nó có thể "nói chuyện" với nó, nếu bạn nghĩ sử dụng phương ngữ BASIC cũ của peek và poke, tôi đoán bạn sẽ không ở xa dấu ấn ở đó, bằng cách viết một chuỗi byte nhất định tới địa chỉ đó, phần mềm radio hoạt động trên nó, gần giống như có một bảng vectơ ngắt ... đây là cách đoán nó ở đây như thế nào hoạt động chính xác. :)
vì vậy nếu bạn hoán đổi «rild' cho Osmocom OpenBSC, bạn có điện thoại mở không? –
@JanusTroelsen Điều đó có thể nghi ngờ, tùy thuộc vào chipset phần mềm của đài phát thanh trong điện thoại và có thể có nhiều tính năng cụ thể hơn trong đó một thư viện độc quyền sẽ được yêu cầu để xử lý điều đó. – t0mm13b
Làm thế nào để móc vào lớp mạ vàng mà không cần sử dụng JNI? – gonzobrains