Modem PinePhone GPS / WWAN / LTE
Saat mengembangkan perangkat lunak di PinePhone, saya menemukan pesan aneh di
dmesg
:
[ 25.476857] modem-power serial1-0: ADB KEY is '41618099' (you can use it to unlock ADB access to the modem)
Untuk konteksnya, saya akan mengatakan bahwa PinePhone memiliki modem Quectel EG25-G yang bertanggung jawab untuk GPS dan komunikasi nirkabel dari PinePhone. Perangkat keras ini adalah salah satu dari sedikit komponen telepon sumber tertutup .
Ketika saya melihat pesan ini dan penyebutan ADB, saya langsung teringat pada Android Debug Bridge, yaitu software yang biasa digunakan untuk berkomunikasi dengan perangkat Android. Saya berpikir, "Tentu saja, ini tidak bisa menjadi ADB yang sama ." Ya, ternyata memang begitu.
Pesan ini terkait dengan artikel yang merinci modem ini. Ini juga terkait dengan utilitas unlocker yang mencetak perintah AT untuk mengamankan
adbd
modem.
$ ./qadbkey-unlock 41618099
AT+QADBKEY="WUkkFzFSXLsuRM8t"
AT+QCFG="usbcfg",0x2C7C,0x125,1,1,1,1,1,1,0
Mereka dapat dikirim ke modem menggunakan
screen
:
# screen /dev/ttyUSB2 115200
Untuk beberapa alasan, masukan saya tidak mengembalikan data apa pun, tetapi sesi layar menampilkan "OK" dua kali, menunjukkan bahwa perintah berhasil diselesaikan.
Setelah menyiapkan aturan
udev
dan
adb
di "mesin host" saya, yaitu, di PinePhone, modem mulai menghasilkan keluaran
adb devices
, yang dapat saya kirim ke shell:
$ adb devices
List of devices attached
(no serial number) device
$ adb shell
/ #
Karena saya
adbd
menjalankan sebagai root, saya menyalurkan output ke shell root. Luar biasa.
Ternyata modem menjalankan sistem operasinya sendiri, sepenuhnya independen dari sistem operasi PinePhone lainnya. Dengan pembaruan terkini, ini menjalankan Linux 3.18.44.
Meluncurkan server web
Untuk beberapa alasan, saya pikir akan menyenangkan menjalankan blog saya di perangkat ini. Karena kami bekerja dengan sumber daya terbatas (sekitar 48MB penyimpanan dan jumlah memori yang sama), dan blog saya hanya terdiri dari halaman statis, saya memutuskan bahwa sesuatu seperti nginx (tidak peduli seberapa ringan) akan membuang-buang sumber daya untuk tujuan saya ...
Bagi saya, darkhttpd memenuhi persyaratan saya dengan baik . Biner tunggal, tanpa ketergantungan eksternal, hanya jalankan permintaan GET dan HEAD. Idealnya.
Saya menggunakan toolchain armv7l -linux-musleabihf-cross untuk mengkompilasi silang server ini untuk ARMv7, dan secara statis menautkannya dengan musl. Dengan bantuan
adb push
Saya dengan mudah berhasil mentransfer file biner dan sumber daya situs saya ke folder
/usrdata
modem, di mana partisi 50 MB dipasang dengan kemampuan untuk menulis.
Server HTTP berfungsi dengan baik. Saya memutuskan untuk menggunakan ADB untuk membuka port HTTP untuk PinePhone saya:
$ adb forward tcp:8080 tcp:80
Karena port yang diteruskan ADB hanya terikat ke antarmuka loopback, saya membukanya secara manual untuk koneksi eksternal:
# sysctl -w net.ipv4.conf.all.route_localnet=1
# iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:8080
Kemudian saya dapat mengakses blog saya di
http://pine:8080/
. Keren!
Performa?
Saya menjalankan
iperf
penerusan port ADB untuk melihat seberapa besar kinerja yang saya dapatkan.
$ iperf -c localhost
------------------------------------------------------------
Client connecting to localhost, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 44230 connected with 127.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.6 sec 14.4 MBytes 11.4 Mbits/sec
Itu sekitar 10 Mbps. Tidak bagus, tidak buruk.
PinePhone sendiri terhubung ke jaringan melalui USB (catatan: agar koneksi jaringan USB berfungsi, saya harus melepas dua komponen dari papan ). Demi ketertarikan, saya juga menjalankan
iperf
hubungan ini:
$ iperf -c 10.15.19.82
------------------------------------------------------------
Client connecting to 10.15.19.82, TCP port 5001
TCP window size: 136 KByte (default)
------------------------------------------------------------
[ 3] local 10.15.19.100 port 58672 connected with 10.15.19.82 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.4 sec 25.8 MBytes 20.7 Mbits/sec
Saya mengharapkan lebih banyak, tetapi itu tidak terlalu penting karena hambatannya adalah koneksi yang dialihkan melalui ADB.
Alasan lainnya
Saya bertanya-tanya tentang keamanan modem. Ternyata banyak tim AT
system()
. Saya menduga bahwa beberapa dari perintah AT ini mungkin rentan terhadap injeksi perintah, tetapi saya belum melakukan penelitian lebih lanjut. Tidak masalah, karena shell root ADB sangat mudah diimplementasikan.
Sekilas, ini sepertinya cara yang ideal untuk memastikan ketahanan kode berbahaya. Dengan akses root ke host, kode berbahaya dapat menyematkan dirinya ke dalam modem, memungkinkannya untuk bertahan dari instalasi ulang OS host, mencegat komunikasi, atau melacak lokasi perangkat. Kerusakan sebagian dikurangi dengan fakta bahwa semua interaksi dengan OS host dilakukan melalui USB dan I2S, dan hanya ketika OS host memulainya, sehingga kode berbahaya di modem tidak akan dapat berinteraksi langsung dengan OS host.
Periklanan
Server epik untuk hosting situs dan banyak lagi! VDS murah berdasarkan prosesor AMD EPYC terbaru dan penyimpanan NVMe dari Intel untuk menghosting proyek dengan kerumitan apa pun, mulai dari jaringan perusahaan dan proyek game hingga halaman arahan dan VPN. Anda dapat membuat konfigurasi server Anda sendiri dengan beberapa klik!
Berlangganan obrolan kami di Telegram .