ReactOS sekarang dimulai dengan partisi BTRFS

Halo, Habr! Dalam seri ini, kami terus berteman secara intens dengan driver WinBtrfs dan ReactOS.


Apakah ini Windows Anda?

Mari kita mulai. Setelah posting sebelumnya , mini-driver untuk bootloader FreeLoader diimplementasikan, yang memungkinkan membaca file dari bagian BTRFS dalam mode read-only. Masalah pertama menunggu saya di sini - BTRFS adalah sistem file case-sensitive. Di sini, untuk mencari struktur inode ( struktur ini berisi informasi dasar tentang file), hash dari nama file digunakan dalam direktori, ini memungkinkan Anda untuk berjalan di jalur tanpa menarik semua file yang terkandung dalam direktori.

Namun, di dunia Windows, hal seperti register nama file menjadi perhatian kecil bagi siapa pun, sehingga jalur ke driver yang diperlukan untuk memuat OS dapat ditulis dalam registri dalam register apa pun.

Saat ini, masalah ini diselesaikan oleh kruk tua yang baik - ketika Anda meminta untuk mencari file, System32 dan SYSTEM32 diganti oleh system32, sama dengan folder driver. Sejauh ini, saya berpikir bagaimana seseorang bisa melakukannya dengan kompeten. Kemungkinan besar saya akan mengunggah daftar lengkap file dalam direktori setiap kali dan melakukan pencarian case-insensitive - speed loader tidak akan terlalu terlihat di bootloader.



Pemuat membaca file, kruknya mengeras - kami melanjutkan.

Saya mengembangkan kode bootloader di mesin virtual Bochs, karena itu adalah hal yang paling nyaman untuk dilakukan di dalamnya. Tapi dia (ternyata) memiliki masalah meluncurkan ReactOS, jadi saya harus mentransfer ke VirtualBox biasa.

Dan kemudian penyergapan lain menunggu saya - untuk beberapa alasan, sektor boot tidak berfungsi. Ternyata, ada beberapa masalah dalam implementasi INT 13h AH = 42h interrupt (extended read from disk), karena itu fungsi ini tidak dapat membaca lebih dari 8 sektor sekaligus.

Dan akhirnya, pesan kesalahan pertama (bahkan bukan BSOD!)



Pengecualian dengan STATUS_ACCESS_VIOLATION berasal dari subsistem WinSxS, yang sebagian besar diambil dari Wine. Beberapa hari harus dihabiskan untuk penyebab terjadinya, karena semua perpustakaan dimuat melalui WinSxS, dan ada banyak dari mereka pada saat startup. Pada akhirnya, ternyata masalahnya bukan pada WinSxS (fuch), tetapi pada panggilan sistem NtQueryDirectoryFile.

WinSxS sering menggunakan fungsi ini untuk mencari manifes dengan mask (membuat pertanyaan seperti: "* _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0. *. * _ * _ *. Manifest"), dan bug yang terkait dengan pemrosesan merangkak di driver WinBtrfs topeng dimulai dengan tanda bintang. Anda dapat melihat permintaan tarik yang sangat sederhana di sini .

Anehnya, ini sudah cukup untuk menyelesaikan instalasi dan boot ke desktop


Mungkin boot pertama di dunia dari driver WinBtrfs. Implementasi pertama dari perbaikan saya juga memiliki kesalahan, yang menyebabkan grafik pergi ke suatu tempat dan tidak memuat gambar.

Sebenarnya, sistem boot dan bahkan berfungsi (walaupun stabilitasnya tidak sama dengan rilis terbaru 0.4.9 ).

Tapi masalahnya masih penuh:

  • Tidak ada dukungan swap file. Secara umum, pada linux swap file pada disk btrfs juga tidak didukung, dan patch telah digantung selama beberapa tahun. Tetapi WinBtrfs mendukung mereka. Kami memiliki implementasi manajer memori yang sedikit berbeda daripada di Windows, yang membutuhkan panggilan sistem lain yang belum tersedia di WinBtrfs.
  • Kesalahan penulisan dan limpahan memori. Saya berhasil memperbaiki beberapa, misalnya, ketika menginstal klien Git. Kami akan mencari tahu di mana memori mengalir.
  • BSOD pada saat shutdown dan reboot. Patch sudah menunggu persetujuan

Sampai akhir, GSoC dibiarkan hanya sedikit, berencana untuk memperbaiki bug lebih lanjut, dan menyelesaikan masalah dengan file swap (tapi ini setelah akhir program).

Nah, mereka yang ingin mendukung pengembangan fitur ini dapat bergabung dalam pengujian dan pengembangan driver WinBtrfs .

Source: https://habr.com/ru/post/id418861/


All Articles