Memasang DOOM di perangkat apa pun seperti mengangkat spanduk pemenang di benteng yang runtuh. Saya ditanyai pertanyaan "baik, apakah Anda mulai malapetaka?" setidaknya 35 kali ketika mereka mengetahui bahwa saya mengutak-atik kalkulator ini. Saya memutuskan untuk tidak mengecewakan penonton dan mencapai peluncuran DOOM. Sepanjang jalan, itu menjadi ujian yang bagus untuk kinerja peralatan, serta mengungkap bug yang tidak menyenangkan. Jadi ayo pergi!
Berita proyek
Bagi mereka yang bertanya-tanya bagaimana cara menjalankan DOOM, mereka dapat melewati bab ini dan melanjutkan ke bab berikutnya. Ini hanya menyajikan status proyek saat ini.
Seperti yang Anda ingat di bagian sebelumnya ( bagian 1 dan bagian 2 ), saya terlibat dalam meletakkan Linux pada kalkulator, membangun kembali u-boot, kernel, rootfs. Sejak saat itu, saya sangat terlibat dalam kalkulator dan bahkan benar-benar menemukan apa yang telah dilakukan pada u-boot, kernel, dan pohon perangkat. Anda harus memahami bahwa ini adalah hobi saya, di waktu luang saya dari pekerjaan utama dan keluarga saya, jadi tidak semuanya berjalan dengan cepat, dan terkadang agak tidak masuk akal, hanya karena hari ini ada mood untuk melakukan ini dan bukan sebaliknya.
Berita utama terjadi, berkat pengguna Alx2000y, yang mengundang saya untuk mengobrol di gerobak, di mana orang-orang melihat firmware mereka untuk Xiaomi Gateway pada prosesor yang serupa. Bahkan ada artikel tentang Habré tentang topik tersebut . Orang-orang telah banyak maju dalam topik ini, sangat memperluas fungsionalitas perangkat. Dan banyak membantu saya untuk mengalahkan masalah nand. Seperti yang Anda ingat, pada awalnya saya menghapus citra nand saya karena kebodohan. Akibatnya, saya mendapatkan sejumlah besar sektor buruk "virtual", hal yang paling tidak menyenangkan adalah bahwa sektor buruk berada di awal dan tidak mengizinkan u-boot untuk ditulis di sana. Di bawah ini adalah daftar bad sector, kebanyakan virtual.
=> nand bad Device 0 bad blocks: 00000000 00020000 00040000 00060000 012c0000 04e20000 05280000 094c0000 17b20000 1ff80000 1ffa0000 1ffc0000 1ffe0000 =>
Lenar, dari obrolan di atas, banyak membantu saya, masalahnya diselesaikan hanya dengan dua perintah di u-boot:
nand erase.chip … nand scrub.chip … Really scrub this NAND flash? <y/N> y
Setelah itu, kami memeriksa jumlah bad sector, dan, lihatlah, jumlahnya jauh lebih sedikit!
=> nand bad Device 0 bad blocks: 1ff80000 1ffa0000 1ffc0000 1ffe0000
Hasilnya, saya sekarang dapat memuat u-boot ke sektor nol dan boot. Saat ini, kalkulator dapat dimuat hanya dengan menerapkan daya dan akan dimuat penuh dengan linux, dengan tampilan yang berfungsi dan kemampuan untuk menjalankan program melalui UART. Ia bahkan bekerja dengan benar untuk DOOM. "Tapi, ada nuansa" (C). Rupanya driver keyboard entah bagaimana tumpang tindih dengan driver ubifs, dan akibatnya, jika Anda menekan tombol apa saja pada keyboard, kalkulator langsung hang. Kepanikan kernel bahkan terbang ke arah saya sekali, tetapi saya tidak berpikir untuk menyimpannya untuk setidaknya menemukan tempat persimpangan ini. Jadi untuk saat ini, semuanya pasti bekerja di initramfs. Sebuah video yang mendemonstrasikan pekerjaan memuat nand, meluncurkan DOOM dan pembekuan telah diposting di saluran telegram saya .
Dari kabar baik lainnya, saya mencoba meletakkan ubuntu di nand, itu juga berfungsi dengan benar. Paket, tentu saja, tidak dapat diinstal, tetapi secara umum Anda dapat bekerja dan menggunakannya, yang juga nyaman. Tetapi tanpa keyboard yang berfungsi, game-game ini masih tanpa arti praktis.
Di bagian terakhir, saya mengeluh bahwa u-boot memiliki perilaku yang berbeda saat berjalan di nand dan dari RAM. Saya menghabiskan dua hari mencari-cari kode sumber u-boot untuk mencari tahu apa yang sedang terjadi. Dan semuanya ternyata basi (bahkan malu). Utilitas uuu, saat memulai u-boot dari memori, meneruskan variabel lingkungannya di sana. Lebih tepatnya, ini memanggil mfgtool_args dan, sebagai hasilnya, baris dari variabel lingkungan boot terlihat seperti ini:
bootargs=rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber= mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
Tentu saja, jika Anda boot dari nand, maka dengan parameter seperti itu ubifs di bagian keempat tidak akan terlihat. Oleh karena itu, setelah memuat u-boot ke RAM, saya secara paksa mengatur variabel lingkungan berikut ke dalamnya:
setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs)
Dan semuanya bekerja dengan baik.
Izinkan saya menjelaskan mengapa ini diperlukan: jika Anda mem-flash bootloader ke sektor nol, kemampuan untuk bekerja melalui mfgtool (utilitas uuu) menghilang. Dan pada tahap ini, terdiri dari pengembangan dan debugging, itu adalah alat utama. Oleh karena itu, lebih mudah untuk membiarkan utilitas uuu berjalan dan memuat u-boot secara manual setiap saat.
Meluncurkan DOOM
Pindah ke bagian yang menyenangkan - menjalankan DOOM pada kalkulator. Seperti yang bisa Anda bayangkan, tidak sia-sia saya menulis tentang semua masalah di awal. Anda dapat menjalankan DOOM saat dimuat ke flash NAND, di sana Anda dapat meletakkan semua jenis kartu, semua kemungkinan versi DOOM, dan secara umum apa pun yang Anda inginkan. Tetapi ketika berjalan dalam RAM, kami dibatasi oleh ukuran image rootfs sekitar 15 MB (praktik telah menunjukkan bahwa 16 masih rolls). Dalam hal ini, saya harus memilih versi DOOM dan membuat perakitan yang benar, serta mempelajari cara bekerja dengannya.
Ternyata semua hal baik telah diciptakan untuk kita sejak lama, dan DOOM dapat dirakit langsung di buildroot tanpa meninggalkan sofa. Saya menemukan ini ketika saya mencari di Google semua kemungkinan varian DOOM untuk sistem tertanam dan mencoba membangunnya. Ternyata, cukup untuk menjalankan:
make menuconfig
Dan pilih DOOM. Ini dilakukan di "
Target packages ---> Games --->
"
Kami memiliki dua versi DOOM yang kami miliki: chocolate-doom dan prboom . Setelah beberapa percobaan, saya menyadari bahwa chocolate-doom tidak mau masuk ke dalam initramfs. Kecuali, jika Anda menghapus file gumpalan sama sekali. Saya mencoba menemukan file gumpalan yang dipotong yang sesuai dengan malapetaka coklat. Tapi dia menolak untuk bekerja dengan mereka. Hasilnya, saya mencoba menginstal versi cokelat di nand (bersama dengan prboom), dan mencobanya di sana. Saya memilih parameter, dll. Eksperimen tersebut menghasilkan metode peluncuran berikut:
export SDL_NOMOUSE=1
chocolate-doom -geometry 320x240 -bpp 24 -nomouse
Hasilnya sangat mengecewakan saya: versi malapetaka ini salah (atau, sebaliknya, dengan benar) meregangkan layar, meninggalkan garis-garis lebar di tepi layar, yang sebenarnya tidak saya sukai.
Versi cokelat DOOM. Garis hitam terlihat di bawah.
Saat memulai, chocolate doom saya memberi tahu saya apa fungsi pengubahan ukuran jendela:
I_InitGraphics: 320x240 mode not supported on this machine. I_InitGraphics: Auto-adjusted to 320x200x32bpp.
Oleh karena itu, saya memilih prboom. Saya membuat gambar itu bersama dengan file WAD yang dibagikan dan prboom itu sendiri , menghapus semua hal yang tidak perlu. Tapi, bagaimanapun juga, untuk waktu yang sangat lama saya tidak bisa membuatnya berhasil. Saya membaca semua jenis manual, mencari cara mengkonfigurasi agar semuanya bekerja dengan benar. Gambar ditampilkan, bereaksi terhadap tombol, tetapi layar melebar dengan kikuk dan menampilkan kurva warna. Hingga saya menemukan parameter peluncuran yang ideal di beberapa forum.
Secara umum, untuk kalkulator kami, peluncuran prboom adalah sebagai berikut: matikan mouse, lalu jalankan prboom dengan parameter berikut:
export SDL_NOMOUSE=1
/usr/games/prboom -width 320 -height 240 -nosound -vidmode 32bit
Kunci parameter di sini:
"-vidmode 32bit"
.
Saya mencari parameter yang sesuai untuk waktu yang lama, dan hanya dengan ini semuanya dimulai. Demi kenyamanan, saya menulis semuanya ke skrip d.sh. Akhirnya semuanya berfungsi, Anda bahkan bisa bermain!
Khusus untuk Anda, saya telah menyiapkan rakitan flash_utility yang diperbarui dengan DOOM , yang dapat Anda jalankan di kalkulator bahkan tanpa mem-flash- nya, dan tunjukkan kepada teman-teman Anda, kata mereka, DOOM berfungsi di kalkulator saya. Cukup membongkar kalkulator, menutup kontak yang dijelaskan di bagian pertama dan menjalankan
sudo uuu doom.uu
Di akhir semua langkah, Anda akan menerima kalkulator, dengan linux dan DOOM. Untuk memulai DOOM, Anda harus masuk dan mengeksekusi kalkulator:
./d.sh
Untuk meringkas
DOOM bekerja! Bisakah saya memainkannya? Nah, secara lokal, mengunduh dari komputer - Anda bisa. Itu terlihat keren dan indah, tetapi sebenarnya, bukan yang Anda inginkan. Sangat keren saat Anda berada di kereta bawah tanah, ambil kalkulator dan tarik keluar dari kaki lebar Anda, nyalakan (mode hemat daya tidak berfungsi saat ini), dan mulai DOOM. Ini sangat keren untuk dimainkan di metro dengan kalkulator di DOOM, Duke Nukem 3D, Quake I, II, III, dll. Tetapi kenyataannya tetap - DOOM berjalan pada perangkat keras ini. Namun masih banyak pekerjaan yang harus dilakukan.
Secara umum, tidak ada cukup setidaknya komunitas kecil di sekitar kalkulator ini (setidaknya lebih dari saya), sehingga ada penguji masalah, ada seseorang untuk diajak bicara dan berbagi, untuk mendengarkan nasihat. Penulis asli jelas mendinginkan proyek ini, meskipun dia melakukan pekerjaan yang sangat besar. Saya memahaminya dengan baik, dan saya tidak dapat mencela dia karena tidak ingin membantu bahkan dengan nasihat tentang proyek ini. Yah, dia memberikan rekomendasi kecil, tapi dia jelas tidak lagi bergantung padanya. Karena itu, jika Anda punya ide, kalkulator, keinginan untuk membantu, setidaknya dengan saran, tulis di sini atau di gerobak, saya akan senang!
PS Mengapa saya melakukan ini?
Sangat sering mereka bertanya "untuk apa"? Saya mengerti secara intelektual bahwa menjawab pertanyaan ini adalah bodoh, tetapi saya akan menjawabnya.
Mengapa seorang seniman melukis gambar atau seorang penulis menulis buku? Jujur saja, 90% dari buku, lukisan, dan karya lain mungkin tidak melihat cahaya sama sekali, dan dari mereka yang melihatnya, sebagian kecil dari satu persen akan dikenal dan mendapatkan banyak pembaca. Sederhananya, sebagian besar pembuat konten melakukan pekerjaan "tidak berguna". Selain itu, banyak karya yang bahkan tidak pernah menemukan pembacanya, tetapi mengapa tidak? Apa yang mendorong orang-orang ini? Semuanya lumrah. Mereka didorong oleh perasaan sederhana:
Sederhananya, Anda melakukannya karena itu keren dan terburu-buru. Dan, anehnya, di masa depan hal itu akan membawa manfaat yang besar, meski tidak sejelas kelihatannya.
File untuk diunduh