Jika saya melihat melampaui orang lain, itu karena saya berdiri di atas bahu raksasa.
I. Newton
Saya pikir banyak orang tahu router Cina kecil Hame A15 (itu, atau lebih tepatnya salinannya yang besar, dengan TTX yang ditingkatkan dibandingkan dengan yang asli, juga sama-sama baik di-google dengan kata kunci router 3g / 4g pada ebay dan aliexpress ). Hari ini saya ingin memberi tahu bagaimana saya mengingat router $ 6,5 dan menghabiskan $ 20 untuk itu. Mengapa Dan untuk alasan yang sama mengapa gelang dianyam dari manik-manik - untuk melatih mikromotorik dan penglihatan (komponen tubuh terutama 0402 :) Sebagian besar demi kepentingan olahraga, meskipun penting bahwa router ini, hari ini, pangkalan favorit saya untuk berbagai proyek (bahkan meskipun kesulitan mengakses GPIO), bukannya NEXX WT3020F "populer", TP-Link TL-MR3020, TP-Link TL-WR703N dan lainnya. Alasannya terutama karena ukuran dan bentuk papan sirkuit yang dicetak, nyaman untuk ditempelkan di mana saja (di foto Anda dapat memperkirakan ukurannya). Di masa depan, untuk menghindari kebingungan tentang terminologi, saya akan menamai perangkat yang ditunjukkan di bawah ini sebagaimana disebut oleh wiki openwrt - A5-V11 .

Inti dari perangkat ini adalah Soal Ralink RT5350F 360 MHz, di papan terdapat host USB penuh, 4 MB memori flash dan 32 MB SDRAM dengan frekuensi 166 MHz (ini aneh dengan cara, karena bahkan D-link kuno DIR-320 on board memiliki DDR lebih cepat). Beberapa klon klon memiliki 16 MB memori dan tidak cocok tanpa meningkatkan RAM untuk manipulasi yang dijelaskan dalam artikel ini.
Seperti biasa, gambar di bawah ini menunjukkan router Hame A15 asli.
Dan di sini adalah salinan bahasa Mandarin yang ditingkatkan (di akhir artikel Anda dapat melihat salinan lain dari salinan itu, tetapi 10 kali lebih mahal :).
Internal firmware sudah menyala pada hub, jadi saya tidak akan memikirkan fitur markup. Detail masalah dan solusi dijelaskan di w3bsit3-dns.com . Ada banyak informasi, tetapi sangat tersebar. Saya berharap dapat mengumpulkan poin-poin penting dalam artikel ini, berdasarkan pengalaman para lelaki - βraksasa produksi routerβ :)
Jawaban atas pertanyaan "mengapa ini (router) membutuhkan pengguna yang tidak berpengalaman" kutipan pengguna ded1971 :
Properti konsumen - router 3G-WiFi yang serbaguna dan ringkas. Lebih mudah untuk melakukan perjalanan, menghubungkan modem 3G / 4G, mengatur jaringan WiFi Anda, atau menggunakannya sebagai repeater untuk meningkatkan WiFi, menghubungkan Internet ke TV pintar jika tidak ada WiFi bawaan. Secara umum, banyak fitur yang berguna untuk uang konyol.
Nah, perbandingan dengan ES8266 yang ada di mana-mana dan populer Bagian Satu, Persiapan
Sementara router ada di pos, ada waktu untuk mempelajari ulasan dari pemilik yang bahagia. Masalah utama yang dihadapi mayoritas adalah masalah overheating router (dan, oleh karena itu, dari "chip blade") dan ketidakstabilan daya, ketika router tidak dapat memulai untuk waktu yang lama ("indikator" - dua LED menyala redup, tidak mungkin untuk terhubung ke perangkat melalui Ethernet).
Untuk mengatasi masalah pertama, diputuskan untuk memasang radiator pada chip. Untuk melakukan ini, saya memesan radiator aluminium kecil ukuran 12x12x3 mm (persis ukuran chip). Ketinggian 3 mm dipilih karena saya ingin radiator yang menonjol tidak melekat pada benda (misalnya, di dalam tas) dan router dapat berada di atas meja dengan stabil.
Seperti itulah tampang radiator ... Untuk memperbaiki radiator, saya memutuskan untuk menggunakan perekat panas meleleh. Dari yang tersedia di daerah kami - hanya ada "satu kali" Alsil-5, yang, meskipun konduktivitas termalnya cukup baik, sama sekali tidak berarti penyimpanan jangka panjang. Mengering dalam beberapa hari (dan jika Anda beruntung, Anda dapat membeli yang sudah kering). Oleh karena itu, pada aliexpress yang sama, dua jenis perekat lelehan panas diperintahkan untuk radiator LED daya tinggi - Halnziye HY910 dan Hcbonyx HC-910 .
Perekat panas meleleh yang kuat dari Cina Ulasan tentang mereka di forum khusus tidak buruk, meskipun para ahli masih merekomendasikan menggunakan dua komponen perekat melelehkan epoksi dua komponen, seperti Thermopox 85CT, untuk tugas-tugas serius. Tapi pergi temukan dia ...
Untuk jaga-jaga, di bawah ini saya akan memberikan karakteristik komparatif dari konduktivitas termal dari lelehan panas yang digunakan oleh saya, ditemukan di Internet.
Hot Melt Halnziye HY910 - Konduktivitas Termal 0.975W / mK
Perekat lelehan panas Alsil-5 - konduktivitas termal 1.4-1.6W / mK
Hcbonyx HC-910 perekat leleh panas - konduktivitas termal 1,7W / mK
Untuk memasang radiator, saya harus memotong case (termasuk untuk meningkatkan perpindahan panas). Untuk melakukan segalanya seakurat mungkin, hal pertama yang saya lakukan adalah menggambar dimensi papan ke kertas tebal, memotong lubang untuk chip, dan kemudian memasukkan template kardus ini ke dalam case. Kemudian semuanya sederhana - gambarkan kontur lubang dengan pensil, potong dengan pisau klerikal dan giling file.

Menandai dan memotong casing plastik untuk radiator 12x12 Sejalan dengan pemasangan radiator, perlu untuk mensolder kapasitor SMD keramik yang hilang 10 uF 6,3 V ke router dalam rangkaian konverter 3.3V. (atas saran pengembalian pengguna1). Lokasi instalasi ditunjukkan pada gambar:

Dan di sini adalah papan dengan kapasitor 6.3 V 10 mikrofarad yang sudah diinstal Menurut ulasan, konsumsi perangkat saat ini berkurang dan menjadi lebih stabil. Agaknya, pada konverter 3.3V, riak muncul pada output yang menonaktifkan prosesor. Kapasitor menghaluskan riak-riak ini.
Penting! Coba pasang radiator dan solder kapasitor SEBELUM memulai dan mengoperasikan router. Kalau tidak, mungkin ternyata Borjomi sudah terlambat untuk minum ...
Orang menyelesaikan masalah dengan daya dengan memasang chip monitor daya khusus, alih-alih rantai RC standar router, misalnya, KR1171SP28 , DS1816 atau MAX809TTR . Saya langsung menyukai opsi menggunakan pengawas daya Maxim. Dua tugas utama yang dapat diselesaikan oleh pengawas adalah menjaga pengontrol dalam keadaan reset hingga tegangan suplai mencapai nilai yang ditetapkan dan stabil, atau mengatur ulang pengontrol saat tegangan suplai turun di bawah level kritis atau ketika voltase turun tiba-tiba. Juga dari keunggulan jenis pengawas ini, dapat dicatat bahwa tidak ada komponen tambahan yang diperlukan untuk memasang sirkuit mikro, dan dalam hal ukuran perangkat semikonduktor ini menggantikan elemen yang dilepas (ya, Anda harus terlebih dahulu melepas resistor dan kapasitor yang tidak lagi diperlukan, dan kemudian pergi lagi jalinan di atas bantalan).

Pencarian di aliexpress tidak menghasilkan apa-apa, tetapi melakukan pencarian di katalog CHIPiDIP, di mana pembentuk pulsa MAX809TEUR + T (dengan tegangan reset 3.08 volt) ditemukan, salah satunya berhasil disolder ke router.

Mengatur pembentuk pulsa (reset) MAX809TEUR + T Ngomong-ngomong, saya tidak bisa membantu tetapi menyebutkan besi solder USB Cina, tanpanya saya tidak akan pernah mengubah prosedur ini (bahkan dengan microwave yang dipuji ...).
Agar tidak membuang besi solder, pada saat yang sama saya memutuskan untuk menyolder blok kontak ke bantalan kontak dari konsol (tumit) UART untuk menyederhanakan koneksi dengan kabel dupont dari desainer Arduino. Pads pad idealnya cocok dengan pitch kontak 2 mm (standar luas 2,54 mm sudah lebar). Ini, misalnya. Untuk membuatnya lebih nyaman untuk disolder, dengan bantuan pinset, saya membengkokkan ujung kontak dengan huruf G dan menempelkan bintik-bintik pada papan router.
Mempersiapkan Konsol UART Kemudian cukup untuk memasang blok pada tumit dan sedikit menghangatkan persimpangan sampai solder meleleh. Penting untuk tidak berlebihan (yang mudah dilakukan dengan besi solder yang kuat), jika tidak, anak babi bisa jatuh karena terlalu panas. Dalam hal ini, gambar menunjukkan titik uji cadangan tempat Anda dapat menyolder.

Omong-omong, Anda dapat menyolder kontak dengan metode lain, tetapi kasing tidak dapat ditutup begitu saja.

Tentang ini, bagian persiapan berakhir dan bagian utama dimulai.
Bagian Dua, "Programmer"
Seperti yang saya sebutkan di awal artikel, router memiliki sedikit memori, hanya 4 MB. Tentu saja, seseorang dapat mengingat fakta bahwa "640 KB harus cukup untuk semua orang." Tetapi setelah menghabiskan seminggu mencoba untuk mendorong semua paket yang diperlukan (dan ada 8 MB (!)) Ke dalam openwrt yang dirakit sendiri untuk D-Link DIR-320, saya sekarang tahu pasti bahwa Anda tidak harus menghemat memori. Oleh karena itu, diputuskan untuk mengubah flash menjadi lebih luas dan pada saat yang sama memiliki biaya yang masuk akal (agar tidak lebih mahal dari router itu sendiri). Chip dengan frekuensi efektif (SPI Clock rate) minimal 100 MHz dan tegangan suplai 3,3 V diperlukan untuk penggantian Dari produsen - Winbond atau yang lain (En = Eon, Mx = Macronix, Pm = PMC, At = Atmel). Dari apa yang disarankan openwrt.org adalah W25Q128BV , MX25L128 (35F), S25FL128P, S25FL129P, GD25Q128C, GD25Q128CS, GD25Q128CSIG. Angka 128 dalam penandaan memberitahu kita bahwa volume flash drive adalah 16 MB (128Mbit = 16Mb). Pilihan ukuran nominal disebabkan oleh kenyataan bahwa seorang programmer Cina murah dengan chip memori 24/25 CH341A (tentang hal itu di bawah) dapat bekerja dengan volume seperti itu tanpa menari dengan rebana. Untuk penggemar, saya dapat mengatakan bahwa 32 MB dapat disolder (misalnya, W25Q256FV, MX25L25635F, N25Q256A, MX25L25645GM2I-10G dan bahkan 64 MB (MX25L51245G, MT25QL512AB). Namun, saya ingin mencatat bahwa label harga untuk memori jauh dari modul untuk MB. Saya perhatikan bahwa berbicara tentang chip memori HANYA dalam paket SOP8, sebagai yang paling nyaman untuk penyolderan, Anda tentu saja dapat mengambil chip dalam casing WSON8 dengan bantalan kontak alih-alih kaki, tetapi menyolder terlalu memakan waktu, dan hasilnya mungkin tidak memenuhi harapan.
Anda dapat mem-flash chip memori dengan beberapa cara berbeda, tergantung pada apa yang tersedia:
a) Ada dioda / kapasitor dan port paralel (programmer paling sederhana) - kita melihat petunjuk firmware di situs web Ceko atau dalam bahasa Rusia .
Jadi programmer paling sederhana ini dari konektor LPT dan beberapa detail terlihat seperti dalam hidup b) Ada Arduino (Pro, Micro, Nano, dll.) - kami akan menyiapkan dari mereka seorang programmer untuk flash drive SPI kami sesuai dengan resep berikut.
c) Jika ada Raspberry Pi - lihat di sini
d) Ada programmer USBASP "populer" (yang pernah ditulis di HabrΓ©) - kami sedang mempersiapkannya sesuai dengan resep No. 2 .
e) Hanya ada keinginan dan sedikit uang - kami membeli di aliexpress seorang programmer Cina CH341A untuk 24/25 SPI flash dan diam-diam mulai bekerja.
Flash drive itu sendiri terhubung ke programmer (s) sebagai berikut:
Flash drive dapat disolder dan dihubungkan ke bantalan / adaptor programmer, atau Anda dapat menyolder kabel dupont yang sudah disebutkan dari Arduino ke sana, dan menghubungkan kabel ke programmer sudah. "Bekerja" dari flash adalah kontak MISO , MOSI , CLK , CS , VCC dan GND . Jika pemrograman dilakukan tanpa melepas sirkuit mikro dari papan, yang terbaik adalah melepas dan sedikit meningkatkan kontak VCC di atas bidang papan untuk sementara waktu. Setelah selesai bekerja, tekan kaki ke papan dan solder.
Karena saya tidak memiliki keinginan untuk mencari port LPT, saya memutuskan untuk mengikuti opsi terakhir e) dan membeli sepotong besi tambahan di taman saya. Hal ini disebut CH341A dan, anehnya, adalah seorang programmer yang didasarkan pada chip CH341, di belakang penulisan perusahaan "Cina yang dikenal luas", Jiangsu QinHeng Ltd. :)
Diagram sirkuit pemrogram Ketika memesan hanya seorang programmer, saya sangat menyarankan agar Anda membeli adaptor tambahan dari casing SOP8 / SOIC8 ke casing DIP dan klip-klip untuk bekerja dengan sirkuit mikro.
Anda tidak dapat mengejar sedikit tabungan, tetapi segera membeli kit yang sudah jadi, yang terdiri dari seorang programmer dan semua adapter yang diperlukan, kemudian selain dua adapter yang disebutkan di atas, Anda juga akan mendapatkan adaptor untuk pemrograman chip 1,8 V.
Itu terlihat seperti kit yang sudah jadi Dari pengalaman saya sendiri, saya akan mengatakan bahwa klip jepitan berfungsi setiap saat dan kemungkinan besar chip harus dibuka dan dimasukkan ke adaptor SOP8-DIP atau bahkan disolder ke bantalan pada programmer itu sendiri.
Tambahan : akhirnya adaptor saya datang, atau seperti yang benar disebut adaptor ZIF SOP8-DIP8 150 mil . Adaptor ini cocok untuk sirkuit mikro dengan lebar selubung 150mil, pitch pin 1,27mm. Selain 150 juta, mungkin ada 200 juta, jadi penting untuk memperhatikan hal ini ketika memesan di lelang (saya punya microchip dan yang sama, karena itu ada dua adapter).
Bagaimana membedakan secara visual antara adaptor ZIF 150 dan 200 mil Bagian ini sangat nyaman, sirkuit mikro dijepit dengan mudah, alami dan sangat jelas (sistemnya menyerupai tang). Untuk melakukan ini, cukup klik pada bagian atas kasing, letakkan chip pada area yang terbuka dan lepaskan bagian belakang kasing ini. Kontak bagian atas yang dilipat pegas akan diperluas saat dilepaskan dan sirkuit mikro secara otomatis menjepit (foto untuk kejelasan, karena sirkuit mikro 200 mil terletak di adaptor 150 mil, jadi saya tidak menendang, saya menempelkannya di tangan). Kemudian kami menginstalnya di programmer, mencari di mana kami memiliki kaki 1 (lingkaran pada chip). Ternyata seperti ini:

Gambar yang lebih indah dari SOIC8 SOP8 pada adaptor DIP8 Saya memotret chip memori asli menggunakan stasiun solder udara panas, dan bagi mereka yang tidak memiliki peralatan seperti itu, saya sangat merekomendasikan menggunakan metode paduan Rose . Setelah bekerja, pastikan untuk menghapus sisa-sisa paduan Rose dengan kepang dari papan dan lingkaran mikro, jauh dari dosa.
Kami menghubungkan microcircuit yang dihapus ke programmer (untuk siapa bagaimana dan bagaimana hasilnya). Saya terlalu malas untuk disolder, jujur ββmencoba menjepit klip, akibatnya, kaki sangat rata dengan klip musim semi. Tapi saya tidak bermaksud mengembalikan flash 4 MB, tetapi kontak yang baik harus memastikan pembacaan yang lancar. Dan begitulah yang terjadi. Nota manfaat bagi mereka yang menyolder sirkuit mikro - dengan hati-hati lihat nomor pada kartu adaptor dan solder sesuai dengan mereka. Dalam hal klip, kabel merah pada loop kunci ada di nomor kaki 1.

Diambil dan berhasil dari ... Setelah berurusan dengan besi, Anda harus berurusan dengan perangkat lunak. Seperti yang sudah saya tulis, pada hub programmer ini secara berkala muncul dalam artikel . Jelas bahwa ia bekerja tanpa masalah dengan semua sistem operasi modern (misalnya, di Windows 10 driver secara otomatis ditarik dari jaringan, dan di Linux mereka telah di kernel selama beberapa tahun). Tapi, tetapi Anda tidak pernah tahu apa yang terjadi, di sini Anda dapat menemukan driver (untuk mode Serial / Paralel) sebagai file terpisah untuk berjaga-jaga. Untuk pemrograman pada Windows, kepengarangan perangkat lunak Cina dari SkyGz tertentu paling sering digunakan. Untuk Linux, ada proyek terbuka ch341prog (SPI) dan ch341eepromtool (I2C), Anda dapat menggunakan flashrom "folk". Karena saya menggunakan Windows, dan ulasan tentang "program China" untuk sebagian besar pengguna tidak terlalu positif (terutama tentang versi 1.28 baru ... 1.30), sehingga nasib tidak akan tergoda, chip dibaca menggunakan programmer Rusia yang sederhana, andal, AsProgrammer versi 1.4.0 . Ngomong-ngomong, jika sesuatu tiba-tiba tidak menyukai sesuatu / itu tidak jelas, atau misalnya, Anda perlu menambahkan rangkaian mikro baru, Anda dapat dengan mudah menulis dalam topik "dukungan teknis" dan mendapatkan umpan balik cepat.
Mengapa TIDAK layak membeli memori flash lebih dari 16 MBSaya akan membiarkan diri saya sedikit menyimpang dan menjelaskan keengganan saya untuk menginstal flash drive 32 MB (perbedaan harga dari 16 MB tidak kritis). Faktanya adalah bahwa tidak ada dalam program Cina (versi 1.29 atau 1.30), maupun dalam dukungan AsProgrammer yang disebutkan untuk microchip ala W25Q256FV, MX25L25635F, N25Q256A, MX25L25645GM2I-10G dinyatakan. Mungkin alasan untuk ini adalah bahwa untuk flash SPI, jumlah maksimum adalah 128 MBit (maksimum yang dapat diatasi dengan mode pengalamatan 3-byte yang diadopsi oleh JEDEC). Dan di sini tidak banyak pilihan. Misalnya, Anda dapat menulis dengan flash yang dimodifikasi dari paruh pertama chip w25q256 (berukuran 16 MB), seperti chip w25q128 yang familier dengan program ini 16 MB dan memasukkan bootloader yang benar (Breed, misalnya) dan bagian pabrik dengan informasi "layanan" ke dalam volume ini (mac Alamat router, kalibrasi wi-fi, dll.). Dan setelah mem-boot dalam mode bootloader (jika berhasil dikenali olehnya dari seluruh volume microcircuit) - dimungkinkan untuk mem-flash firmware yang sudah dikompilasi sebelumnya. Anda biasanya dapat membeli flash drive untuk masa depan dan menunggu hingga volume tersebut muncul di versi perangkat lunak Cina yang rusak untuk ch341a atau ketika flashrom selesai. Untuk meringkas, lebih baik untuk mengambil 16 MB :) karena "lelah meraih bintang-bintang, ambil apa yang ada di bawah kaki Anda."
Bekerja dengan AsProgrammer sangat sederhana, pertama pilih microchip Anda di menu "Chip", dan kemudian klik tombol "Baca". Beberapa menit dan dump di saku kami :)
Baca dump dari chip pabrik 4 MB Flash pabrik penuh terdiri dari bootloader, sepasang bagian untuk menyimpan pengaturan yang berbeda dan firmware itu sendiri.
Struktur firmware pabrik 4MB0x00000000-0x00030000: "Bootloader"
0x00030000-0x00040000: "Config"
0x00040000-0x00050000: "Pabrik"
0x00050000-0x0011282a: "Kernel"
File dump yang disimpan harus dibuka di editor HEX (saya terbiasa menggunakan WinHex ) dan di alamat 105720 (alamat dalam desimal, dalam heksadesimal akan menjadi 00019CF8) kami mengubah 40 00 hingga 00 01 untuk 16 MB flash (well, atau 80 00 jika tiba-tiba Anda memutuskan untuk menyimpan sepeser pun dan membeli chip 8 MB). Kami menyimpan firmware yang dimodifikasi untuk penggunaan di masa mendatang. Ngomong-ngomong, alamat 105720 bukan titik dari beberapa jenis lampiran dan nomor lain mungkin ada di sana, terutama jika Anda sudah mencoba membuka kunci bootloader untuk firmware openwrt, dll. Oleh karena itu, jika tiba-tiba tidak terjadi apa-apa, dan dihargai β40 00 "pada alamat 105720 tidak terlihat, kami mencari di menu editor heksadesimal untuk pencarian berdasarkan nilai HEX dan menggerakkan kombinasi byte kunci" 00 00 16 40 "di sana. Ini akan mengarah ke nomor / alamat yang diinginkan.
Menemukan kombinasi yang didambakan 00 00 16 40 Mengapa ini dibutuhkan? Dan kemudian, agar bootloader yang dimodifikasi memungkinkan Anda untuk mem-flash router melalui UART melalui TFTP, menggunakan firmware yang lebih besar.
Selanjutnya, isi firmware yang disimpan ke dalam flash drive yang lebih besar yang sudah dibeli sebelumnya mulai dari alamat 0 (dari awal). Jika pemrograman berhasil, solder chip memori pada tempatnya dan lanjutkan ke langkah berikutnya. Ngomong-ngomong, ketika memprogram microcircuit yang dibeli, saya merasa kasihan mencubitnya dengan klip dan saya harus menyoldernya ke blok :)
Bagian Tiga, openwrt-shnaya
Langkah selanjutnya adalah membangun versi openwrt Anda sendiri. Jika saya tidak memerlukan paket spesifik tertentu yang tidak dapat ditemukan dalam firmware sysupgrade resmi (dan "dari penggemar") yang ada, maka Anda dapat mengunduh versi firmware yang tersedia pertama untuk model router Anda dan memuatnya melalui mikrokircuit memori besar yang telah dimodifikasi bootloader atau dengan cara kuno untuk menggunakan programmer di atas. Tetapi saya perlu menanamkan beberapa paket yang tidak seperti biasanya ke dalam firmware router saya, jadi saya harus pergi dengan cara yang lebih rumit dan membangun openwrt untuk diri saya sendiri. Prosedur ini dijelaskan dengan baik untuk banyak model router (misalnya, untuk Tp-Link TL-WR741ND pada HabrΓ©, Tp-Link TL-MR3020 , D-Link DIR320A1 , ribuan dari mereka ...), oleh karena itu saya akan membatasi diri saya pada daftar singkat langkah-langkah utama (rincian lebih lanjut dapat lihat di sini dan di sini ).
Jika tidak ada mesin * nix di rumah, maka hal pertama yang kita instal di VirtualBox adalah Ubuntu x64 (atau apalah).
Memperbarui informasi tentang paket yang diinstal
sudo apt-get pembaruan
Instal yang diperlukan. Untuk Ubuntu 16.04 LTS, tampilannya seperti ini:
sudo apt-get instal build-essential subversion mercurial libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev unzip
Salin kode sumber dari firmware yang dipilih ke komputer Anda menggunakan perintah git clone . Di bawah spoiler - tautan ke sumber dari berbagai versi openwrt.
Dapatkan repositori dari proyek OpenWrt dan LEDE06/18/1
git clone git: //github.com/openwrt/openwrt.git -b v18.06.1
06/18/0
git clone git: //github.com/openwrt/openwrt.git -b v18.06.0
1 / 17.5
git clone git: //github.com/openwrt/openwrt.git -b v17.01.5
01/17/4
git clone git: //github.com/openwrt/openwrt.git -b v17.01.4
01/17/3
git clone git: //github.com/openwrt/openwrt.git -b v17.01.3
01/17/2
git clone git: //github.com/openwrt/openwrt.git -b v17.01.2
01/17/1
git clone git: //github.com/openwrt/openwrt.git -b v17.01.1
01/17
git clone git: //github.com/openwrt/openwrt.git -b v17.01.0
15/5/1
git clone git: //github.com/openwrt/archive.git -b v15.05.1
15.05
git clone git: //github.com/openwrt/archive.git -b v15.05
07/14
git clone git: //github.com/openwrt/archive.git -b v14.07
12.09
git clone git: //github.com/openwrt/archive.git -b v12.09
Barang yang diunduh akan ditempatkan di direktori openwrt. Kami masuk ke dalamnya dengan perintah cd , menukar dan memperbarui komponen tambahan dengan perintah
./scripts/feeds memperbarui -a && ./scripts/feeds instal βa
Sekarang saatnya untuk memperbaiki "file-file penting" sehingga kompiler dapat dengan benar memasang firmware untuk flash drive kita yang diperbesar, dan tidak berhenti jika tiba-tiba melebihi 4 MB yang ditentukan . Untuk melakukan ini, lakukan hal berikut. Dalam direktori yang diunduh dengan sumber openwrt dalam target file / linux / ramips / dts / A5-V11.dts kita ganti dengan nilai-nilai yang ditunjukkan pada gambar di bawah ini (saya menggunakan editor nano, juga dimungkinkan melalui F4 di mc).

Simpan file, jalankan di konsol
buat defconfig
dan terapkan pengaturan standar untuk profil, lalu buat menuconfig . Di sini titik kunci utama adalah memilih profil yang tepat:
Sistem Target: Ralink RT288x / RT3xxx
Subtarget: papan berbasis RT3x5x / RT5350
Profil Target: A5-V11
dan kemudian - dengan analogi dengan perakitan openwrt untuk router lain (saya berikan tautan di atas), kami memodifikasi set paket dengan cara yang kami butuhkan dan menyimpan konfigurasi (dalam file .config ). Omong-omong, jika Anda berencana untuk sering mengubah konfigurasi, Anda dapat membuat cadangan setiap kali dengan perintah skrip / diffconfig.sh> mydiffconfig , jadi kami menyimpan perubahan konfigurasi kami ke file mydiffconfig setiap kali. Setelah membuat konfigurasi yang diperlukan (dan memilih semua paket yang diperlukan), kita mulai membangun dengan perintah make .
Karena kompilasi sendiri kernel, Anda mungkin menemukan bahwa banyak paket dari repositori resmi tidak cocok untuk instalasi. Ini harus diperhitungkan dan lebih sering mengatur bendera "M" berlawanan dengan paket yang diinginkan. Kemudian paket-paket ini dapat ditemukan di folder openwrt / bin / ramips / packages dan diunggah ke beberapa server HTTP untuk membuat repositori blackjack pribadi Anda sendiri dan ... untuk OpenWRT :).
Omong-omong, saya ingat bahwa sangat mudah untuk menjalankan perintah make dalam bentuk berikut:
buat V = 99 2> & 1 | tee build.log | grep -i error
Dalam hal ini, kompilator menyimpan salinan lengkap informasi debug tentang perakitan ke file build.log di direktori openwrt dan hanya menampilkan kesalahan pada layar. Kemudian log ini dengan mudah dilampirkan ke forum untuk menemukan penyebab kesalahan atau mengajukan pertanyaan. Selain itu, ini sangat bagus untuk mengidentifikasi paket-paket di mana kompiler berhenti bekerja. Anda dapat menemukan teks yang disebutkan dalam log dengan mencari direktori menggunakan perintah
grep βHr "TEXT" <path ke direktori pencarian> | cut βd: -f1 | semacam -u
Tapi saya sangat berharap kompilasi akan berhasil dan tidak perlu mencari kesalahan. Setelah menyelesaikan proses, Anda dapat menemukan file firmware di folder bin dari direktori openwrt, sesuatu seperti openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin . Kami mengambil file ini dan pergi ke tahap akhir.
Bagian Keempat, Konsol
Setelah firmware dikumpulkan di dalam perut mesin virtual, yang tersisa hanyalah memasukkannya ke router. Saya suka opsi dengan UART (bukan untuk apa-apa bahwa saya menyolder pad ke nikel kontak). Untuk menghubungkan, Anda memerlukan adaptor USB ke TTL UART, atau setidaknya kabel data dari Siemens lama. Untungnya, saya memiliki adaptor pada chip FT232 (CP2102 dan CH340 di mana-mana juga cocok). Pinout pinout ditunjukkan pada foto.

Pinout primer dan cadangan untuk konsol UART Kami menghubungkan kontak ke adaptor sebagai berikut:
Perute GND β Adaptor GND
Router RX β 470 Ohm-1 kOhm resistor β TX adapter
TX Router β RX Adapter
Saya akan menjelaskan mengapa resistor diperlukan. Ketika saya menyalakan router yang terhubung ke adaptor, itu tergantung dan mulai memanas.
Jadi semuanya terhubung ... Pada saat bersamaan, sesuatu seperti
Οrββββββββββββββββ1βββββββββββββββββAββ (0βββββ
? βββ {βFβββββ ^ ββBβββKΣSP @ β (Y <0β0β $ β @ βββ βββ ζ ζffββ`ββ βββββββββxββxβββββx ~ `ββ ζ βββββxββfβββββfββ`ffβββββββ ββfxβββf ~ fβfββ`fxfββββ`fxββ ~ βxβfββf ~ fβ`βfβfxβ ~ βfβxfβ ~ ββfx ββxβββxxββββxxββββxβββxfββ`xββββββfxfβxββ`βββfββfββfβfxxβ xβ ζ βxβfββ
Resistor (Anda dapat menghubungkan apa saja, dalam kisaran dari 470 Ohms hingga 1 kOhm) memperbaiki semuanya. Dan di sini , misalnya, penulis umumnya merekomendasikan untuk menggunakan chip isolator sinyal digital AduM1201 untuk terhubung ke UART untuk decoupling. Tetapi resistor sudah cukup untuk saya, yang juga saya harapkan untuk Anda.
Kami menerima sinyal dari router menggunakan program terminal pada PC. Entah bagaimana saya tidak berhasil dengan favorit Putty, dan saya menggunakan program Terminal yang luar biasa. Pilih port COM virtual yang diinginkan (tempat USB-UART kami duduk), atur parameter:
Kecepatan: 57600
Bit Data: 8
Paritas: Tidak ada
Stop Bits: 1
Dan klik Sambungkan. Sekarang, ketika daya disuplai ke router, kita akan melihat log loader di konsol:
Bootloader Log A5-V11 apa adanyaU-Boot 1.1.3 (11 Apr 2013 - 00:10:51)
Papan: Ralink DRAM APSoC: 32 MB
relocate_code Pointer di: 81fb4000
spi_wait_nsec: 42
id perangkat spi: ef 40 18 0 0 (40180000)
Peringatan: ID chip yang tidak dikenali, perbarui bootloader!
raspi_read: from: 30000 len: 1000
. *** Peringatan - CRC buruk, menggunakan lingkungan default
============================================
Ralink UBoot Versi: 3.6.0.0
ASIC 5350_MP (Port5 <-> Tidak Ada)
DRAM_CONF_FROM: Boot-Strapping
DRAM_TYPE: SDRAM
DRAM_SIZE: 256 Mbits
DRAM_WIDTH: 16 bit
DRAM_TOTAL_WIDTH: 16 bit
TOTAL_MEMORY_SIZE: 32 MBytes
Komponen flash: SPI Flash
Tanggal: 11 Apr 2013 Waktu: 00: 10: 51
============================================
icache: set: 256, cara: 4, linesz: 32, total: 32768
dcache: set: 128, cara: 4, linesz: 32, total: 16384
Frekuensi CPU = 360 MHZ
memperkirakan ukuran memori = 32 Mbytes
Silakan pilih operasi:
1: Muat kode sistem ke SDRAM melalui TFTP.
2: Muat kode sistem lalu tulis ke Flash melalui TFTP.
3: Boot kode sistem melalui Flash (default).
4: Antarmuka baris perintah booting Entr.
7: Muat kode Boot Loader kemudian tulis ke Flash melalui Serial.
9: Muat kode Boot Loader kemudian tulis ke Flash melalui TFTP.
4 3 2 1
Anda memilih 3
0
3: Sistem Booting kode sistem melalui Flash.
Booting gambar di bc050000 ...
raspi_read: from: 50,000 len: 40
. Nama Gambar: MIPS OpenWrt Linux-3.7.5
Dibuat: 2013-04-11 14:41:22 UTC
Tipe Gambar: MIPS Linux Kernel Image (kompresi lzma)
Ukuran Data: 915849 Bytes = 894,4 kB
Alamat Muat: 80000000
Titik Masuk: 80.000.000
raspi_read: from: 50040 len: df989
... Memverifikasi Checksum ... OK
Gambar Kernel yang Tidak Terkompresi ... OK
Tidak ada initrd
Mentransfer kendali ke Linux (di alamat 80000000) ...
Memberikan memsize linux dalam MB, 32
Memulai kernel ...
[0.000000] Linux versi 3.7.5 (lich @ lich-pc) (gcc versi 4.6.4 20121210 (prelelease) (Linaro GCC 4.6-2012.12)) # 2 Kamis 11 Apr 22 22:41:02 CST 2013
[0,000000] bootconsole [awal0] diaktifkan
[0,000000] Revisi CPU adalah: 0001964c (MIPS 24KEc)
[0,000000] Ralink RT5350 id: 1 rev: 3 berjalan pada 360.00 MHz
[0,000000] Ditentukan peta RAM fisik:
[0,000000] memori: 02000000 @ 00000000 (dapat digunakan)
[0,000000] Peta RAM fisik yang ditentukan pengguna:
[0,000000] memori: 02000000 @ 00000000 (dapat digunakan)
[0,000000] Initrd tidak ditemukan atau kosong - menonaktifkan initrd
[0,000000] Rentang zona:
[0,000000] Normal [mem 0x00000000-0x01ffffff]
[0,000000] Zona bergerak mulai untuk setiap node
[0,000000] Rentang node memori awal
[0,000000] simpul 0: [mem 0x00000000-0x01ffffff]
[0,000000] Cache instruksi primer 32kB, VIPT, 4 arah, gariskan 32 byte.
[0,000000] Cache data primer 16kB, 4 arah, VIPT, tanpa alias, diubah ukurannya 32 byte
[0,000000] Membangun 1 zonelis dalam urutan Zone, pengelompokan mobilitas aktif. Total halaman: 8128
[0.000000] Baris perintah kernel: board = MPR-A1 konsol = ttyS1.57600 mtdparts = spi0.0: 192k (boot-boot) ro, 64k (boot-boot-env) ro, 64k (pabrik) ro, 896k (kernel ), 2880k (rootfs), 3776k @ 0x50000 (firmware) rootfstype = squashfs, jffs2 mem = 32M
[0,000000] entri tabel hash PID: 128 (urutan: -3, 512 byte)
[0,000000] entri tabel hash cache Cache: 4096 (urutan: 2, 16384 byte)
[0,000000] entri tabel hash inode-cache: 2048 (urutan: 1, 8192 byte)
[0,000000] __ex_table sudah diurutkan, lewati sort
[0,000000] Menulis Daftar ErrCtl = 00023ff6
[0,000000] Readback register ErrCtl = 00023ff6
[0,000000] Memori: 29632k / 32768k tersedia (kode kernel 1969k, 3136k dicadangkan, data 473k, init 180k, highmem 0k)
[0,000000] SLUB: Genslabs = 9, HWalign = 32, Orde = 0-3, MinObjects = 0, CPU = 1, Nodes = 1
[0,000000] NR_IRQS: 48
[0,000000] konsol [ttyS1] diaktifkan, bootconsole dinonaktifkan
[0,000000] konsol [ttyS1] diaktifkan, bootconsole dinonaktifkan
[0,010000] Kalibrasi loop tunda ... 239.61 BogoMIPS (lpj = 1198080)
[0,080000] pid_max: default: minimum 32768: 301
[0,080000] Entri tabel hash cache-cache: 512
[0,090000] NET: Keluarga protokol terdaftar 16
[0.100000] MIPS: mesin adalah HAME MPR-A1
[0.130000] bio: buat slab <bio-0> di 0
[0.140000] Beralih ke MIPS clocksource
[0.150000] NET: Keluarga protokol terdaftar 2
[0.160000] TCP membuat entri tabel hash: 1024 (urutan: 1, 8192 byte)
[0.180000] Entri tabel hash TCP mengikat: 1024 (urutan: 0, 4096 byte)
[0.190000] TCP: Tabel hash dikonfigurasi (didirikan 1024 mengikat 1024)
[0.200000] TCP: reno terdaftar
[0,210000] Entri tabel hash UDP: 256 (urutan: 0, 4096 byte)
[0.220000] Entri tabel hash UDP-Lite: 256 (urutan: 0, 4096 byte)
[0.230000] NET: Keluarga protokol terdaftar 1
[0.280000] squashfs: versi 4.0 (2009/01/31) Phillip Lougher
[0.290000] jffs2: versi 2.2 (NAND) (RINGKASAN) (LZMA) (RTIME) (CMODE_PRIORITY) Β© 2001-2006 Red Hat, Inc.
[0.320000] msgmni telah diatur ke 57
[0.320000] io scheduler noop terdaftar
[0.330000] tenggat waktu penjadwal terdaftar (default)
[0.340000] Serial: driver 8250/16550, 2 port, berbagi IRQ dinonaktifkan
[0.360000] serial8250: ttyS0 di MMIO 0x10000500 (irq = 13) adalah 16550A
[0.370000] serial8250: ttyS1 di MMIO 0x10000c00 (irq = 20) adalah 16550A
[0.390000] ramips-spi ramips-spi.0: master tidak dicabut, ini sudah usang
[0.410000] m25p80 spi0.0: ditemukan w25q128, diharapkan pm25lq032
[0.420000] m25p80 spi0.0: w25q128 (16384 Kbytes)
[0.430000] 6 cm partisi partisi ditemukan pada perangkat MTD spi0.0
[0.440000] Membuat 6 partisi MTD pada "spi0.0":
[0.450000] 0x000000000000-0x000000030000: "u-boot"
[0.460000] 0x000000030000-0x000000040000: "u-boot-env"
[0.480000] 0x000000040000-0x000000050000: "pabrik"
[0.490000] 0x000000050000-0x000000130000: "kernel"
[0,500000] 0x000000130000-0x000000400000: "rootfs"
[0,520000] mtd: partisi "rootfs" ditetapkan sebagai root filesystem
[0,530000] mtd: partisi "rootfs_data" dibuat secara otomatis, ofs = 380000, len = 80000
[0,550000] 0x000000380000-0x000000400000: "rootfs_data"
[0,560000] 0x000000050000-0x000000400000: "firmware"
[0,580000] ramips-wdt ramips-wdt: nilai batas waktu harus 0 <batas waktu <= 35, menggunakan 35
[0.600000] TCP: kubik terdaftar
[0.610000] NET: Keluarga protokol terdaftar 17
[0.620000] 8021q: 802.1Q VLAN Dukungan v1.8
[0.650000] VFS: Root terpasang (filesystem squashfs) hanya baca di perangkat 31: 4.
[0.660000] Membebaskan memori kernel yang tidak digunakan: 180k dibebaskan
[5.100000] input: gpio-keys-polled sebagai / devices / platform / gpio-keys-polled / input / input0
[5.210000] Tombol Driver hotplug versi 0.4.1
- preinit - Tekan tombol [f] dan tekan [enter] untuk masuk ke mode failafe
Saat membaca dan menelusuri log, penting untuk tidak melewatkan momen dan kapan baris seperti itu akan:
Silakan pilih operasi:
1: Muat kode sistem ke SDRAM melalui TFTP.
2: Muat kode sistem lalu tulis ke Flash melalui TFTP.
3: Boot kode sistem melalui Flash (default).
4: Antarmuka baris perintah booting Entr.
7: Muat kode Boot Loader kemudian tulis ke Flash melalui Serial.
9: Muat kode Boot Loader kemudian tulis ke Flash melalui TFTP.
Anda harus cepat memiliki waktu untuk menekan angka "2". Maka kita akan melihat hal berikut:
Anda memilih 2
2: Sistem Memuat Kernel Linux kemudian menulis ke Flash melalui TFTP.
Peringatan !!! Hapus Linux di Flash, lalu bakar yang baru. Apakah Anda yakin (Y / T)
Silakan Masukan yang baru / atau Ctrl-C untuk membuang
Input perangkat IP (10.10.10.123) ==: 10.10.10.123
Input server IP (10.10.10.3) ==: 10.10.10.3
Masukkan nama file Kernel Linux () ==: openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin
Tekan "Y" secara berurutan, masukkan, masukkan, "openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin". Dalam kasus terakhir, perlu mendaftarkan nama firmware kami secara manual, yang perlu diunggah ke server tftp yang diluncurkan sebelumnya. Saya menggunakan program TFTPD64 untuk tujuan ini. Setelah mengaktifkan unduhan firmware konsol, Anda harus menghubungkan A5-V11 kami ke komputer yang alamat IP-nya cocok dengan yang ditentukan di konsol. By the way, untuk terhubung langsung (ala "usb flash drive"), saya membuat sendiri adaptor RJ45-RJ45. Mereka sangat nyaman dipakai dengan router.

Adaptor RJ45-RJ45 dan sirkuitnya Router akan dijahit dan setelah reboot akan siap untuk melakukan misi tempur baru. By the way, jika itu tidak mungkin untuk flash dengan konsol, kita kembali ke bagian "program" dari artikel dan flash openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin firmware melalui AsProgrammer tua yang baik, tetapi tidak dari alamat 0, tetapi dari 327680 ( !).
Tambahan: Anda tidak bisa bermain-main dengan mencari byte dan memodifikasi firmware asli, tetapi isi programmer dengan Breed microchip Cina dari teman Hackpascal dalam chip baru, untuk V5 kami pilihan terakhir yang ditemukan adalah breed-rt5350-hame-a5-r1163.bin . Dan sudah dari yang terbaik (IMHO) hingga saat ini, bootloader mem-flash semua yang Anda butuhkan. Masih ada segala macam barang yang layak untuk artikel yang terpisah, TETAPI, tetapi firmware benar-benar tanpa pelokalan, dalam bahasa Cina yang telanjang. Sepertinya istilah teknisnya jelas ... Tapi "sedimen tetap ada." Orang Cina, pada prinsipnya, tidak melakukan kontak :(
Bagian Kelima, Informasi ("Catatan")
Di akhir cerita, saya ingin mengatakan beberapa kata tentang perangkat yang membuat penggunaan A5-V11 kami lebih nyaman.
Pertama-tama, ini adalah adaptor berbentuk U ke port USB. Perangkat yang sangat diperlukan, ketika berbagi router dengan USB flash drive / card reader / modem 3G-4g / tuner SDR akhirnya :)

Jadi adaptor terlihat hidup "Tonggak" penting kedua ketika bekerja dengan router mini yang dijelaskan adalah hub USB. Ya, dengan tata letak port USB yang sangat rumit. Tata letak vertikal hub pasif ini mendorong pembelian Bluetooth " jamur " pada beberapa CSR8510 . Sejak kecil, saya suka konsep PC industri dari Octagon - MicroPC - dan " sandwich " vertikal PC / 104 mereka. Dengan hub yang disebutkan di atas, ada peluang untuk melakukan hal serupa (ngomong-ngomong, jika salah satu pembaca menemukan hal serupa yang menarik di hamparan lelang online - silakan berbagi di komentar).

Genesys Logic Inc. GL8506 Chip Pada Papan

Pada prinsipnya, alih-alih port USB vertikal, sangat mungkin untuk menempatkan gantungan kunci USB-Bluetooth kecil yang dijelaskan di atas atau miniatur pembaca kartu microSD .

Dan sepertinya "sandwich microrouter" yang sudah jadi :) :)

Lebih banyak sandwich mikro-habr Dan akhirnya, yang paling enak. Ada kantor CloudStore Selandia Baru di dunia yang terkenal dengan produknya di bawah merek Airconsole . Perangkat ini bagus, antara lain, dan fakta bahwa mereka adalah satu-satunya yang benar-benar legal dan dengan harga yang wajar untuk menghubungkan semua jenis penebang RS232 ke iOS. , , RS232. .
:)
COM/USB , Moxa*, Perle* Opengear*? AirConsole , .
, . . " 10 " :)
Airconsole Mini (69$) Hame A15 (6.9$) Airconsole Standart (79$) Hame MPR-A1 (7.9$) Airconsole XL (139$) Hame MPR-A3 (13.9$) , , . :) . " . . , . . ".
" A5-V11 Airconsole". Ham 6$ Airconsole 69$. , Zyxel Keenetic 4G II .
Ngomong-ngomong, jika tiba-tiba di antara pembaca ada pemilik AirConsol asli yang sudah membukanya, saya akan dengan senang hati menerima papan foto sebagai hadiah dan melengkapi artikel :)
Nah, pada prinsipnya, semua yang ingin saya katakan. Banyak dari apa yang tertulis di sini berlaku untuk perangkat keras (kompak) lainnya dan saya harap ini akan bermanfaat bagi "pembaca luas" :)
ps Untuk pemilik NEXX WT3020F, TP-Link TL-MR3020, TP-Link TL-WR703N (yaitu, semua router dengan casing yang cukup luas) yang disebutkan di awal artikel, hub berbiaya rendah pada chip HS8836 yang ditunjukkan di bawah ini dapat menjadi pilihan yang sangat nyaman untuk ditanamkan. :
Untuk jaga-jaga, sirkuit yang ditemukan di sini ditampilkan di bawah spoiler.
Diagram skematis hub Cina 3-port pada HS8836 Plus utama, menurut saya, selain ukuran miniatur dan minimum bagian, adalah pemasangan papan dengan pengontrol dan port USB melalui kabel. Untuk menanamkan ke router - gerakan tubuh minimum, meskipun Anda masih dapat menginstal plat radiator aluminium pada chip.
Pembaruan dari 2019 : kami mendapatkan walti cooling . Detail di bawah spoiler
Pelat pendingin eksternal1
M1 ( 1)
M1. , , .
( ) 1,5 .
β
( - ) .
β :).
Tambahan dari artem_kramov tentang wifi rusak saat mengganti flash. Moral - simpan dump penuh dan transfer bagian konfigurasi dengan pengaturan modul wifi
Lebih detail: - Wi-Fi . 4 , , 8 Wi-Fi ( ). , , .
: , Config ( ), Wi-Fi. Breed, . , Ethernet, Config Wi-Fi . - , , - .
Lokasi GPIO pada router (diambil dari sini )
A5-V11 GPIO (dapat diklik foto)Kabel GPIO pada A5-V11
Contoh:
22- - gpio 22 terkait dengan Gnd
25+ - gpio 25 terkait dengan + 3.3V
sda, scl lebih baik digunakan pada 21 dan 26 (ganti resistor dengan Gnd, masukkan 10kΞ©). Hanya pada ini, dengan LCD 1602, 2004 terhubung dan catu daya, router mulai normal, pada gpios lain perlu untuk menghubungkan daya modul sedikit kemudian, jika router tidak mulai.
Pada 25 (w1) gunakan sensor ds1820, karena sudah terikat ke + 3.3V hingga 4.7kOhm.
Gpio 21 pertama-tama menghitung bahwa ia akan keluar dengan piston, disolder ke piston (nano), tetapi kemudian ternyata ia duduk di tanah setelah 1kΞ© karena suatu alasan. Lalu ia pergi ke utas ini dan menggantinya dengan gpio 26 dengan 10kOhm.
Sumber yang digunakan- http://skproj.ru/hame-mpr-a1-proshivka-openwrt-i-apgrejd-fleshki-na-16-ili-8-megabajt/?doing_wp_cron=1472313516.0620179176330566406250
- http://w3bsit3-dns.com/forum/index.php?showtopic=884713&
- https://github.com/nofeletru/UsbAsp-flash/releases/
- http://forum.easyelectronics.ru/viewtopic.php?f=17&t=10947
- http://my-embedded.blogspot.com/2013/12/mini-4g-router-rt5350f.html
- http://eko.one.pl/?p=openwrt-gpio2
- https://habr.com/post/238713/
- https://nm-projects.de/2017/09/analysis-of-mini-3g4g-wifi-wireless-router-a5-v11/
- https://tuxotronic.org/wiki/tools/flashrom/
- http://srr.cherkessk.ru/owrt/help-owrt.html
- https://tuxotronic.org/wiki/openwrt/rt5350/build-firmware/
- https://mysku.ru/blog/aliexpress/27796.html
- https://habr.com/post/247513/
Penting! Semua pembaruan dan catatan sementara yang darinya artikel-artikel habr lancar dibentuk sekarang dapat dilihat di saluran telegram saya lab66 . Berlangganan agar tidak mengharapkan artikel selanjutnya, tetapi untuk segera di ketahui tentang semua penelitian :)