Bagaimana cara mulai mengubah kode sumber linux untuk membuat OS kustom? [Tutup]

15

Saya telah mendengar bahwa kita dapat menyesuaikan Linux (katakanlah Ubuntu) seperti yang kita inginkan dengan mengubah kode sumbernya dan dapat membuat OS yang sepenuhnya baru. Saya telah mengunduh kode sumber kernel linux dari situs web www.kernel.org. Tetapi dengan melihatnya, saya tidak dapat memahami apa pun, ada begitu banyak direktori, file di dalam file (karena saya pikir akan ada satu program besar tunggal). Saya ingin melakukan ini sebagai proyek perguruan tinggi dan saya juga ingin berkontribusi untuk Linux dengan membuat perubahan yang diperlukan di dalamnya. Tetapi setelah menanyakan pertanyaan ini di beberapa situs, mereka mengatakan bahwa kode sumber Linux sangat besar. Anda dapat mencoba minix. Sekarang saya sangat bingung.

Tolong beri saya saran dengan detail tentang bagaimana saya harus memulai perjalanan ini (mengubah kode sumber untuk menyesuaikan Linux) dengan langkah-langkah yang diperlukan, bersama dengan beberapa buku tingkat pemula.

dubex
sumber
Apa tujuanmu? Bagaimana Anda ingin berkontribusi?
Spidey
Untuk membuat OS kustom saya sendiri dengan mengubah kode sumbernya (linux) ... dan untuk mempelajari cara kerja OS dan bersenang-senang juga
dubex
Kernel bernama Linux bukan Gnu / Linux (Ubuntu, Debian, RedHat, Suse, dll distrowatch.com ) Namun sebagian besar orang bingung menggunakan istilah Linux berarti GNU / Linux + X11 +. Namun Linux hanyalah salah satu dari kernel, yang dapat digunakan dengan GNU, dan sistem operasi lainnya. Jika Anda ingin memodifikasi Ubuntu atau yang serupa, itu tidak sama dengan memodifikasi kernel bernama Linux.
ctrl-alt-delor

Jawaban:

29

Selamat datang di unix.stackexchange.com!

Tidak ada jawaban mudah untuk pertanyaan Anda, dan orang-orang yang jauh lebih baik daripada saya telah menulis seluruh buku tentang masalah kernel Linux dan sistem operasi pada umumnya.

Tentang ruang lingkup proyek: menulis sistem operasi bukanlah tugas yang mudah! Bahkan OS dengan sengaja minimal seperti Minix adalah hal yang cukup kompleks! Untuk memberi Anda gambaran tentang Linux, pikirkan tentang program C yang telah Anda tulis sejauh ini. Kursus universitas rata-rata cenderung menjadi beberapa ribu baris C paling banyak. Saya pikir proyek tahun terakhir saya adalah sekitar 30-35.000 baris C ++. Kernel Linux kira-kira 13.000.000 baris kode C.

Mengapa semuanya ada di file terpisah? Proyek yang cukup besar disimpan dalam file terpisah untuk alasan logistik dan praktis. Pertimbangkan saja memuat 13.000.000 file baris ke dalam editor! Sebelum menangani proyek besar seperti Linux, Anda harus mengasah keterampilan C Anda ke titik di mana pertanyaan 'mengapa banyak file' menjawab sendiri. Anda juga harus dapat membaca kode C , bukan hanya menulisnya. (Lebih sulit dari yang terlihat pada awalnya)

Anda pasti harus sangat mahir dalam C. Kernel dikelola oleh ribuan orang, dan Anda akan dipanggil untuk memahami idiom C pribadi masing-masing (diberikan, dalam standar pengkodean kernel yang cukup kaku, tetapi masih - setiap orang memiliki gaya pemecahan masalah mereka sendiri).

Setelah Anda mendapatkan C fu Anda, pastikan Anda memahami sistem operasi. Ini akan membantu Anda memahami kode. Tidak semua Linux sangat penting. Kernelnya cukup kecil! Apa itu gemuk:

  • Ribuan driver perangkat keras untuk berbagai perangkat.
  • Lapisan abstraksi untuk berbagai kelas perangkat untuk menyederhanakan API dan penulisan driver. Misalnya, kami memiliki VFS untuk sistem file, lapisan Peristiwa untuk perangkat input, dan lain-lain.
  • Mengejutkan jumlah kode dan file yang dikompilasi secara kondisional yang melayani berbagai arsitektur yang menjalankan Linux (tidak setiap mesin Linux adalah PC Intel, dan beberapa sangat berbeda dari yang Anda harapkan). Kernel harus berurusan dengan perbedaan-perbedaan ini, dan itu berarti lebih banyak kode.

Satu masalah yang akan Anda temukan segera adalah bahwa komponen-komponen ini tidak begitu mudah untuk dicabut, diganti, dan pasang kembali bersama-sama. Ada banyak keterkaitan. Singkatnya, mengubah bit dari kernel itu rumit.

Alasan orang menyarankan Minix kepada Anda adalah sederhana: ini adalah sistem operasi penuh, tetapi tidak dibebani oleh kebutuhan sistem yang sekompleks Linux. Kode ini kecil, tetapi masih menyediakan fungsionalitas penuh. Bagaimanapun, versi pertama Linux terinspirasi oleh Minix.

Tentu, Minix memiliki lebih sedikit dukungan perangkat keras hari ini. Terus? Itu adalah anugerah! Komputer modern melakukan virtualisasi dengan sangat baik. Gunakan itu untuk keuntungan Anda: VM untuk menjalankan Minix sangat ringan, itu akan membuat pengembangan menjadi dawdle.

Jika proyek Anda adalah untuk membangun sistem operasi, Anda bisa melakukan lebih buruk daripada memulai dengan mempelajari Minix. Anda mungkin juga ingin membeli dan membaca buku yang ditulis Minix untuk menemani, ' Sistem Operasi Modern Andrew Tanenbaum '.

Anda juga harus menetapkan target dan mendefinisikan istilah Anda dengan tepat . Jika definisi OS Anda sendiri adalah Microsoft (OS dengan GUI dan perangkat lunak lengkap), Anda mungkin berada dalam proyek yang sangat panjang! Ratusan ribu orang telah bekerja sejak 1960-an untuk membawa kita ke tempat kita sekarang.

Akhirnya, ingat seruan pertempuran Ilmuwan Komputer: ' jangan pernah menemukan kembali roda! '(kami ingin membuat pengecualian saat belajar, tentu saja. Dan untuk bersenang-senang :))

Alexios
sumber
1
akan [tautan] (www.linuxfromscratch.org) memenuhi impian saya ... terima kasih telah menunjukkan minat pada pertanyaan saya
dubex
LFS sangat luar biasa untuk mempelajari bagaimana ruang pengguna sistem POSIX bekerja. Sejauh yang saya tahu itu khusus Linux, jadi tidak berurusan dengan memodifikasi kernel ke arah yang tidak biasa (seperti yang Anda lakukan ketika membuat kernel Anda sendiri). Tapi itu intinya, karena begitu kernel Anda berpindah dari POSIX, ruang pengguna tidak akan kompatibel dan harus porting atau diimplementasikan kembali.
Alexios
Maaf untuk kesalahpahaman ... Tapi saya tidak bermaksud bahwa saya akan membuat kernel sendiri (karena saya tidak banyak berbakat :)). Saya ingin membuat perubahan dalam kode sumber sehingga dapat terlihat berbeda dari yang lain dan sepertinya itu adalah kreativitas saya sendiri. Sebagai contoh: Saya ingin beberapa jenis animasi dengan suara (yang telah saya buat), di layar ketika linux (katakanlah Ubuntu) sedang boot dengan beberapa perangkat lunak pengenal suara yang diinstal di dalamnya. Sekali lagi terima kasih.
dubex
1
Dalam hal ini, Anda membuat distribusi Linux Anda sendiri, dan bukan sistem operasi yang berbeda. LFS adalah alat yang tepat untuk itu. Semoga berhasil!
Alexios
1
@Alexios, jawaban yang sangat bagus dan deskriptif, terima kasih.
0xAF
7

Periksa proyek Linux Dari Awal . Seperti namanya, ini berisi semua detail yang diperlukan untuk membangun distribusi Linux Anda sendiri

Matcheek
sumber
4

Saya pikir hal pertama yang perlu Anda tetapkan adalah "perubahan apa yang ingin Anda bawa ke OS". Sampai Anda memutuskan ini, Anda tidak akan benar-benar pergi ke mana pun. Tidak ada "satu jalur" pembelajaran.

Selanjutnya, saya pikir Anda harus mendefinisikan lebih baik apa yang Anda maksud dengan OS. Sebagian besar (sebagian besar) dari kode sumber Ubuntu berada di luar Linux. Linux hanya kernel , (kadang-kadang disebut sebagai Sistem Operasi , terutama di kalangan akademik, maka kebingungan), dan karena itu ia memiliki pekerjaan "sederhana" :

  • mengelola sumber daya.
  • berkomunikasi dengan perangkat keras.

Setiap perubahan lain akan terjadi pada tingkat yang berbeda, apakah itu utilitas pengguna inti (sering disebut utils ), GUI, aplikasi dasar sebuah distro, dll.

Namun, jika Anda masih belajar tentang cara meretas kernel, Anda mungkin harus mulai dengan pertanyaan ini , pertanyaan dengan pilihan tertinggi di situs ini;)

rahmu
sumber
maaf karena tidak begitu spesifik dalam mengajukan pertanyaan ... tetapi dalam kenyataannya saya tidak tahu tentang semua ini secara rinci. Sebenarnya saya ingin beberapa jenis animasi (dengan suara) di layar ketika linux (katakanlah Ubuntu) sedang boot ... tolong beri saya ide tentang menjelajahi semua bidang ini dan bagaimana bergerak lebih jauh dalam bidang tertentu (katakanlah gui dengan berkomunikasi dengan perangkat keras ) ...
dubex
@dubex mulai dengan plymouth dan lihat perpustakaan Linux untuk memainkan suara. SDL_mixer mungkin yang mudah.
sourcejedi
2

Ini mungkin sedikit di luar intinya, tetapi jika Anda ingin mempelajari tentang kernel Linux dan mulai mengembangkannya, Anda harus benar-benar melihat ke pemula kernel . Ini adalah situs yang memberi Anda wawasan tentang mekanisme kernel (seperti yang dilakukan Alexios dengan sangat baik), tetapi juga mari Anda memilih tugas kecil untuk ditangani (menjadi yang disebut sebagai janitor kernel). Ini cara yang bagus untuk belajar, dan saya sangat merekomendasikannya!

Tommy
sumber