Kernel Linux: Tutorial pemula yang baik [ditutup]

52

Saya tertarik memodifikasi kernel internal, menerapkan tambalan, menangani driver perangkat dan modul, untuk kesenangan pribadi saya.

Apakah ada sumber daya komprehensif untuk peretasan kernel, yang ditujukan untuk programmer berpengalaman?

Adam Matan
sumber
7
Lucu bagaimana pertanyaan dengan jumlah pandangan dan suara yang demikian ditutup sebagai di luar topik.
YoMismo
1
Dura lex, sed lex.
Adam Matan
1
Rectificare sapientis
Tentu. Bagaimanapun, quidquid Latine dictum sit altum videtur.
Adam Matan
XDDDD cukup benar
YoMismo

Jawaban:

33
**TODO** +editPic: Linux Kernel Developer -> (Ring Layer 0)
         +addSection: Kernel Virtualization Engine

KERN_WARN_CODING_STYLE: Do not Loop unless you absolutely have to.

Buku yang Direkomendasikan untuk Yang Tidak Diinisialisasivoid *i

"Laki-laki tidak mengerti buku sampai mereka memiliki kehidupan tertentu, atau setidaknya tidak ada orang yang mengerti buku yang dalam, sampai dia melihat dan hidup setidaknya sebagian dari isinya". –Ezra Pound

Perjalanan seribu kode-mil harus dimulai dengan satu langkah. Jika Anda bingung tentang buku-buku berikut ini, jangan khawatir, pilih salah satu dari pilihan Anda. Tidak semua yang berkeliaran hilang. Karena semua jalan akhirnya terhubung ke jalan raya , Anda akan menjelajahi hal-hal baru dalam perjalanan kernel Anda saat halaman berjalan tanpa menemui jalan buntu, dan akhirnya terhubung ke code-set. Baca dengan pikiran sadar dan ingat: Kode bukan Sastra .

Apa yang tersisa bukanlah benda atau emosi atau gambar atau gambar mental atau memori atau bahkan sebuah ide. Itu adalah sebuah fungsi. Suatu proses semacam. Aspek Kehidupan yang bisa digambarkan sebagai fungsi dari sesuatu yang "lebih besar". Dan karena itu, tampaknya itu tidak benar-benar "terpisah" dari sesuatu yang lain. Seperti fungsi pisau - memotong sesuatu - pada kenyataannya, tidak terpisah dari pisau itu sendiri. Fungsi ini mungkin atau mungkin tidak digunakan saat ini, tetapi berpotensi TIDAK PERNAH terpisah.

Algoritma Solovay Strassen Derandomized untuk Uji Primality :

Solovay Strassen Algoritma Derandomized untuk Primality Test

Baca untuk tidak bertentangan dan berselisih; atau untuk percaya dan menerima begitu saja; atau untuk menemukan pembicaraan dan wacana; tetapi untuk menimbang dan mempertimbangkan. Beberapa buku harus dicicipi, yang lain untuk ditelan, dan beberapa untuk dikunyah dan dicerna: yaitu, beberapa buku harus dibaca hanya dalam bagian-bagian, yang lain untuk dibaca, tetapi tidak ingin tahu, dan beberapa untuk dibaca seluruhnya , dan dengan ketekunan dan perhatian.

static void tasklet_hi_action(struct softirq_action *a)
{
        struct tasklet_struct *list;

        local_irq_disable();
        list = __this_cpu_read(tasklet_hi_vec.head);
        __this_cpu_write(tasklet_hi_vec.head, NULL);
        __this_cpu_write(tasklet_hi_vec.tail, this_cpu_ptr(&tasklet_hi_vec.head));
        local_irq_enable();

        while (list) {
                struct tasklet_struct *t = list;

                list = list->next;

                if (tasklet_trylock(t)) {
                        if (!atomic_read(&t->count)) {
                                if (!test_and_clear_bit(TASKLET_STATE_SCHED,
                                                        &t->state))
                                        BUG();
                                t->func(t->data);
                                tasklet_unlock(t);
                                continue;
                        }
                        tasklet_unlock(t);
                }

                local_irq_disable();
                t->next = NULL;
                *__this_cpu_read(tasklet_hi_vec.tail) = t;
                __this_cpu_write(tasklet_hi_vec.tail, &(t->next));
                __raise_softirq_irqoff(HI_SOFTIRQ);
                local_irq_enable();
        }
}

Core Linux (5 -> 1 -> 3 -> 2 -> 7 -> 4 -> 6)

“Alam tidak memiliki kernel atau shell; dia adalah segalanya sekaligus ”- Johann Wolfgang von Goethe

Pembaca harus berpengalaman dengan konsep sistem operasi ; pemahaman yang adil tentang proses yang berjalan lama dan perbedaannya dengan proses dengan ledakan eksekusi yang singkat; toleransi kesalahan saat memenuhi kendala real time lembut dan keras. Saat membaca, penting untuk memahami dan n/ackpilihan desain yang dibuat oleh sumber kernel linux di subsistem inti.

Sinyal [dan] sinyal adalah jejak penderitaan, keputusasaan, horor, dan kegilaan yang bergantung pada platform (~ Anthony Baxte). Dikatakan bahwa Anda harus menjadi ahli C yang mengevaluasi diri, sebelum menyelam ke dalam kernel. Anda juga harus memiliki pengalaman yang baik dengan Linked Linked, Stacks, Antrian, Red Blacks Trees, Hash Functions, et al.

volatile int i;
int main(void)
{
    int c;
    for (i=0; i<3; i++) {
        c = i&&&i;
        printf("%d\n", c);    /* find c */
    }
    return 0;
}

Keindahan dan seni dari sumber Kernel Linux terletak pada kebingungan kode yang disengaja yang digunakan bersama. Ini sering diperlukan untuk menyampaikan makna komputasi yang melibatkan dua atau lebih operasi dengan cara yang bersih dan elegan. Ini terutama benar ketika menulis kode untuk arsitektur multi-core.

Video Ceramah tentang Sistem Real-Time , Penjadwalan Tugas , Kompresi Memori , Memory Barriers , SMP

#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
  1. Pengembangan Kernel Linux - Robert Love
  2. Memahami Kernel Linux - Daniel P. Bovet, Marco Cesati
  3. Seni Desain KerneL Linux - Yang Lixiang
  4. Arsitektur Kernel Linux Profesional - Wolfgang Mauerer
  5. Desain Sistem Operasi UNIX - Maurice J. Bach
  6. Memahami Linux Virtual Memory Manager - Mel Gorman
  7. Linux Kernel Internals - Tigran Aivazian
  8. Primer Linux Tertanam - Christopher Hallinan

Driver Perangkat Linux (1 -> 2 -> 4 -> 3 -> 8 -> ...)

"Musik tidak membawa Anda. Anda harus membawanya dengan ketat dengan kemampuan Anda untuk benar-benar hanya fokus pada inti kecil emosi atau cerita". - Debbie Harry

Tugas Anda pada dasarnya adalah membuat antarmuka komunikasi berkecepatan tinggi antara perangkat keras dan kernel perangkat lunak. Anda harus membaca lembar data / manual referensi perangkat keras untuk memahami perilaku perangkat dan kontrol serta status datanya dan menyediakan saluran fisik. Pengetahuan tentang Majelis untuk arsitektur khusus Anda dan pengetahuan yang adil tentang VLSI Hardware Deskripsi Bahasa seperti VHDL atau Verilog akan membantu Anda dalam jangka panjang.

T : Tapi, mengapa saya harus membaca spesifikasi perangkat keras?

A : Karena, "Ada jurang karbon dan silikon yang tidak dapat dijembatani oleh perangkat lunak" - Rahul Sonnad

Namun, hal di atas tidak menimbulkan masalah bagi Algoritma Komputasi ( kode driver - pemrosesan setengah-bawah ), karena dapat sepenuhnya disimulasikan pada Mesin Universal Turing . Jika hasil yang dihitung berlaku di domain matematika , itu adalah kepastian bahwa itu juga berlaku di domain fisik .

Video Ceramah tentang Driver Perangkat Linux (Lec. 17 & 18), Anatomi Driver KMS Tertanam , Kontrol Pin dan Pembaruan GPIO , Kerangka Jam Umum , Tulis Driver Linux Nyata - Greg KH

static irqreturn_t phy_interrupt(int irq, void *phy_dat)
{
         struct phy_device *phydev = phy_dat;

         if (PHY_HALTED == phydev->state)
                 return IRQ_NONE;                /* It can't be ours.  */

         /* The MDIO bus is not allowed to be written in interrupt
          * context, so we need to disable the irq here.  A work
          * queue will write the PHY to disable and clear the
          * interrupt, and then reenable the irq line.
          */
         disable_irq_nosync(irq);
         atomic_inc(&phydev->irq_disable);

         queue_work(system_power_efficient_wq, &phydev->phy_queue);

         return IRQ_HANDLED;
}
  1. Driver Perangkat Linux - Jonathan Corbet, Alessandro Rubini, dan Greg Kroah-Hartman
  2. Essential Device Drivers Linux - Sreekrishnan Venkateswaran
  3. Menulis Driver Perangkat Linux - Jerry Cooperstein
  4. Panduan Pemrograman Modul Kernel Linux - Peter Jay Salzman, Michael Burian, Ori Pomerantz
  5. Panduan Programmer PCMCIA Linux - David Hinds
  6. Linux Pemrograman SCSI Howto - Heiko Eibfeldt
  7. Panduan Pemrograman Serial untuk Sistem Operasi POSIX - Michael R. Sweet
  8. Linux Graphics Drivers: an Introduction - Stéphane Marchesin
  9. Panduan Pemrograman untuk Linux USB Device Drivers - Detlef Fliegl
  10. Model Perangkat Kernel Linux - Patrick Mochel

Kernel Networking (1 -> 2 -> 3 -> ...)

“Sebut saja klan, sebut saja jaringan, sebut itu suku, sebut saja keluarga: Apa pun Anda menyebutnya, siapa pun Anda, Anda memerlukannya.” - Jane Howard

Memahami paket walk-through di kernel adalah kunci untuk memahami jaringan kernel. Memahami itu adalah suatu keharusan jika kita ingin memahami Netfilter atau IPSec internal, dan banyak lagi. Dua struktur paling penting dari lapisan jaringan kernel linux adalah: struct sk_buffdanstruct net_device

static inline int sk_hashed(const struct sock *sk)
{
        return !sk_unhashed(sk);
} 
  1. Memahami Linux Network Internal - Christian Benvenuti
  2. Jaringan Kernel Linux: Implementasi dan Teori - Rami Rosen
  3. Pemrograman Jaringan UNIX - W. Richard Stevens
  4. Panduan Definitif untuk Pemrograman Jaringan Linux - Keir Davis, John W. Turner, Nathan Yocom
  5. Linux TCP / IP Stack: Jaringan untuk Sistem Tertanam - Thomas F. Herbert
  6. Pemrograman Socket Linux dengan Contoh - Warren W. Gay
  7. Linux Advanced Routing & Traffic Control HOWTO - Bert Hubert

Kernel Debugging (1 -> 4 -> 9 -> ...)

Kecuali dalam berkomunikasi dengannya seseorang mengatakan dengan tepat apa yang dimaksud seseorang, masalah pasti akan terjadi. ~ Alan Turing, tentang komputer

Brian W. Kernighan, dalam makalah Unix for Beginners (1979) mengatakan, "Alat debugging yang paling efektif masih dipikirkan dengan cermat, ditambah dengan pernyataan cetak yang ditempatkan dengan bijaksana". Mengetahui apa yang harus dikumpulkan akan membantu Anda mendapatkan data yang tepat dengan cepat untuk diagnosis cepat. Ilmuwan komputer yang hebat Edsger Dijkstra pernah mengatakan bahwa pengujian dapat menunjukkan keberadaan bug tetapi tidak adanya mereka. Praktik investigasi yang baik harus menyeimbangkan kebutuhan untuk menyelesaikan masalah dengan cepat, kebutuhan untuk membangun keterampilan Anda, dan penggunaan ahli materi pelajaran yang efektif.

Ada saat-saat Anda mencapai titik terendah, sepertinya tidak ada yang berhasil dan Anda kehabisan semua opsi Anda. Kemudian debugging yang sebenarnya dimulai. Bug mungkin memberikan istirahat yang Anda butuhkan untuk melepaskan diri dari fiksasi pada solusi yang tidak efektif.

Video Ceramah tentang Kernel Debug dan Profiling , Analisis Core Dump , Debugging Multicore dengan GDB , Mengontrol Kondisi Ras Multi-Core , Debugging Electronics

/* Buggy Code -- Stack frame problem
 * If you require information, do not free memory containing the information
 */
char *initialize() {
  char string[80];
  char* ptr = string;
  return ptr;
}

int main() {
  char *myval = initialize();
  do_something_with(myval);
}
/*  “When debugging, novices insert corrective code; experts remove defective code.”
 *     – Richard Pattis
#if DEBUG
 printk("The above can be considered as Development and Review in Industrial Practises");
#endif
 */
  1. Linux Debugging dan Tuning Kinerja - Steve Best
  2. Aplikasi Linux Teknik Debugging - Aurelian Melinte
  3. Debugging dengan GDB: Debugger Level-Sumber GNU - Roland H. Pesch
  4. Debugging Embedded Linux - Christopher Hallinan
  5. Seni Debugging dengan GDB, DDD, dan Eclipse - Norman S. Matloff
  6. Mengapa Program Gagal: Panduan untuk Debugging Sistematis - Andreas Zeller
  7. Eksorsisme Perangkat Lunak: Buku Pegangan untuk Debugging dan Mengoptimalkan Kode Warisan - Bill Blunden
  8. Debugging: Menemukan Masalah Perangkat Lunak dan Perangkat Keras yang Paling Elusif - David J. Agans
  9. Debugging dengan Berpikir: Pendekatan Multidisiplin - Robert Charles Metzger
  10. Temukan Bugnya: Buku Program yang Salah - Adam Barr

Sistem File (1 -> 2 -> 6 -> ...)

"Saya ingin memiliki memori virtual, setidaknya karena digabungkan dengan sistem file". - Ken Thompson

Pada sistem UNIX, semuanya adalah file; jika sesuatu bukan file, itu adalah proses, kecuali untuk pipa dan soket bernama. Dalam sistem file, file diwakili oleh inode, semacam nomor seri yang berisi informasi tentang data aktual yang membentuk file. Linux Virtual File System VFSmenyimpan informasi dalam memori dari setiap sistem file saat terpasang dan digunakan. Banyak kehati-hatian harus diambil untuk memperbarui sistem file dengan benar karena data di dalam cache ini dimodifikasi ketika file dan direktori dibuat, ditulis dan dihapus. Cache yang paling penting adalah Buffer Cache, yang terintegrasi ke dalam cara masing-masing sistem file mengakses perangkat penyimpanan blok yang mendasarinya.

Video Ceramah tentang Sistem Penyimpanan , Sistem File Flash Friendly

long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
{
        struct open_flags op;
        int fd = build_open_flags(flags, mode, &op);
        struct filename *tmp;

        if (fd)
                return fd;

        tmp = getname(filename);
        if (IS_ERR(tmp))
                return PTR_ERR(tmp);

        fd = get_unused_fd_flags(flags);
        if (fd >= 0) {
                struct file *f = do_filp_open(dfd, tmp, &op);
                if (IS_ERR(f)) {
                        put_unused_fd(fd);
                        fd = PTR_ERR(f);
                } else {
                        fsnotify_open(f);
                        fd_install(fd, f);
                }
        }
        putname(tmp);
        return fd;
}

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
        if (force_o_largefile())
                flags |= O_LARGEFILE;

        return do_sys_open(AT_FDCWD, filename, flags, mode);
}
  1. Sistem File Linux - Moshe Bar
  2. Sistem File Linux - William Von Hagen
  3. Sistem File UNIX: Evolusi, Desain, dan Implementasi - Steve D. Pate
  4. Desain Sistem File Praktis - Dominic Giampaolo
  5. Analisis Forensik Sistem File - Brian Carrier
  6. Hierarki Sistem File Linux - Binh Nguyen
  7. BTRFS: Sistem File B-tree Linux - Ohad Rodeh
  8. StegFS: Sistem File Steganografis untuk Linux - Andrew D. McDonald, Markus G. Kuhn

Keamanan (1 -> 2 -> 8 -> 4 -> 3 -> ...)

"UNIX tidak dirancang untuk menghentikan penggunanya dari melakukan hal-hal bodoh, karena itu juga akan menghentikan mereka dari melakukan hal-hal yang pintar". - Doug Gwyn

Tidak ada teknik yang berfungsi jika tidak digunakan. Etika berubah dengan teknologi.

" F × S = k " produk kebebasan dan keamanan adalah konstan. - Hukum Niven

Kriptografi membentuk dasar kepercayaan online. Peretasan mengeksploitasi kontrol keamanan baik dalam elemen teknis, fisik atau berbasis manusia. Melindungi kernel dari program lain yang sedang berjalan adalah langkah pertama menuju sistem yang aman dan stabil, tetapi ini jelas tidak cukup: beberapa tingkat perlindungan harus ada di antara berbagai aplikasi pengguna lahan. Eksploitasi dapat menargetkan layanan lokal atau jarak jauh.

"Kamu tidak bisa meretas nasibmu, brute force ... kamu butuh pintu belakang, saluran samping ke dalam Life." - Clyde Dsouza

Komputer tidak memecahkan masalah, mereka menjalankan solusi. Di balik setiap kode algoritmik non-deterministik , ada pikiran yang ditentukan . - / var / log / dmesg

Video Ceramah tentang Kriptografi dan Keamanan Jaringan , Ruang Nama untuk Keamanan , Perlindungan Terhadap Serangan Jarak Jauh , Secure Embedded Linux

env x='() { :;}; echo vulnerable' bash -c "echo this is a test for Shellsock"
  1. Peretasan: Seni Eksploitasi - Jon Erickson
  2. The Rootkit Arsenal: Escape dan Evasion in the Dark Corners of System - Bill Blunden
  3. Peretasan Terungkap: Rahasia Keamanan Jaringan - Stuart McClure, Joel Scambray, George Kurtz
  4. Panduan untuk Eksploitasi Kernel: Menyerang Inti - Enrico Perla, Massimiliano Oldani
  5. Seni Memori Forensik - Michael Hale Ligh, Andrew Case, Jamie Levy, AAron Walters
  6. Reverse Engineering Praktis - Bruce Dang, Alexandre Gazet, Elias Bachaalany
  7. Analisis Malware Praktis - Michael Sikorski, Andrew Honig
  8. Keamanan Linux Maksimum: Panduan Peretas untuk Melindungi Server Linux Anda - Anonim
  9. Keamanan Linux - Craig Hunt
  10. Keamanan Linux Dunia Nyata - Bob Toxen

Sumber Kernel (0.11 -> 2.4 -> 2.6 -> 3.18)

"Seperti anggur, penguasaan pemrograman kernel matang seiring waktu. Tetapi, tidak seperti anggur, prosesnya menjadi lebih manis dalam proses". - Hukum Mucheka

Anda mungkin tidak berpikir bahwa programmer adalah seniman, tetapi pemrograman adalah profesi yang sangat kreatif. Ini kreativitas berbasis logika. Pendidikan ilmu komputer tidak dapat membuat siapa pun menjadi programmer ahli seperti mempelajari kuas dan pigmen dapat membuat seseorang menjadi pelukis ahli. Seperti yang sudah Anda ketahui, ada perbedaan antara mengetahui jalan dan berjalan di jalan; itu sangat penting untuk menyingsingkan lengan baju Anda dan membuat tangan Anda kotor dengan kode sumber kernel. Akhirnya, dengan pengetahuan kernel yang Anda peroleh , ke mana pun Anda pergi, Anda akan bersinar .

Peniru yang tidak dewasa meniru; coders dewasa mencuri; coders yang buruk merusak apa yang mereka ambil, dan coders yang baik membuatnya menjadi sesuatu yang lebih baik, atau setidaknya sesuatu yang berbeda. Coder yang baik mengelas pencuriannya ke dalam seluruh perasaan yang unik, sangat berbeda dari yang darinya robek.

Video Ceramah tentang Resep Kernel

linux-0.11
├── boot
│   ├── bootsect.s      head.s      setup.s
├── fs
│   ├── bitmap.c    block_dev.c buffer.c        char_dev.c  exec.c
│   ├── fcntl.c     file_dev.c  file_table.c    inode.c     ioctl.c
│   ├── namei.c     open.c      pipe.c          read_write.c
│   ├── stat.c      super.c     truncate.c
├── include
│   ├── a.out.h     const.h     ctype.h     errno.h     fcntl.h
│   ├── signal.h    stdarg.h    stddef.h    string.h    termios.h
│   ├── time.h      unistd.h    utime.h
│   ├── asm
│   │   ├── io.h    memory.h    segment.h   system.h
│   ├── linux
│   │   ├── config.h    fdreg.h fs.h    hdreg.h     head.h
│   │   ├── kernel.h    mm.h    sched.h sys.h       tty.h
│   ├── sys
│   │   ├── stat.h      times.h types.h utsname.h   wait.h
├── init
│   └── main.c
├── kernel
│   ├── asm.s       exit.c      fork.c      mktime.c    panic.c
│   ├── printk.c    sched.c     signal.c    sys.c       system_calls.s
│   ├── traps.c     vsprintf.c
│   ├── blk_drv
│   │   ├── blk.h   floppy.c    hd.c    ll_rw_blk.c     ramdisk.c
│   ├── chr_drv
│   │   ├── console.c   keyboard.S  rs_io.s
│   │   ├── serial.c    tty_io.c    tty_ioctl.c
│   ├── math
│   │   ├── math_emulate.c
├── lib
│   ├── close.c  ctype.c  dup.c     errno.c  execve.c  _exit.c
│   ├── malloc.c open.c   setsid.c  string.c wait.c    write.c
├── Makefile
├── mm
│   ├── memory.c page.s
└── tools
    └── build.c
  1. Pemula mulai dengan sumber Linux 0.11 (kurang dari 20.000 baris kode sumber). Setelah 20 tahun pengembangan, dibandingkan dengan Linux 0,11, Linux telah menjadi sangat besar, kompleks, dan sulit dipelajari. Namun konsep desain dan struktur utama tidak memiliki perubahan mendasar. Mempelajari Linux 0.11 masih memiliki arti praktis yang penting.
  2. Bacaan Wajib untuk Peretas Kernel => Linux_source_dir/Documentation/*
  3. Anda harus berlangganan dan aktif di setidaknya satu milis kernel. Mulai dengan pemula kernel .
  4. Anda tidak perlu membaca kode sumber lengkap. Setelah Anda terbiasa dengan API kernel dan penggunaannya, langsung mulai dengan kode sumber sub-sistem yang Anda minati. Anda juga dapat mulai dengan menulis modul plug-n-play Anda sendiri untuk bereksperimen dengan kernel.
  5. Penulis Driver Perangkat akan mendapat manfaat dengan memiliki perangkat keras khusus mereka sendiri. Mulailah dengan Raspberry Pi .
manav mn
sumber
2
Terima kasih! itu jawaban yang cukup komprehensif. Akan kita lihat
Adam Matan
1
Jawaban ini luar biasa
pkqxdd
Jawaban yang luar biasa! Saya juga membuat tutorial yang mungkin menarik bagi saya: github.com/cirosantilli/linux-kernel-module-cheat. Ini berisi setup yang sangat otomatis yang membangun kernel Linux, QEMU dan root filesystem untuk Anda. Termasuk pengaturan debug langkah kernel GDB Linux.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
5

Saya sarankan Anda membaca " Linux Kernel in a Nutshell ", oleh Greg Kroah-Hartman dan " Understanding the Linux Kernel ", oleh Robert Love. Harus dibaca :)

wzzrd
sumber
2
kroah.com/lkn - Online Gratis
Joshua Enfield
@Josh Buku-buku ini ditulis 5-6 tahun yang lalu, apakah masih hangat?
Alex Bolotov
Saya tidak bisa menjawabnya dengan kredibilitas yang masuk akal :( Tanggung jawab lain menghabiskan waktu saya, dan saya tidak pernah sempat membacanya. Mudah-mudahan wzzrd melihat komentar ini dan dapat berkomentar.
Joshua Enfield
1
Ya, buku-buku itu masih relevan. Banyak, banyak detail telah berubah di luar pengakuan. Lihatlah halaman kernel pemula yang disebutkan di atas (atau halaman kernel lwn.net untuk diskusi mendalam dan berita terkini).
vonbrand
4

Linux Device Drivers adalah sumber yang bagus. Itu akan memberi Anda cara lain untuk masuk ke pekerjaan batin. Dari kata pengantar:

Di permukaan, ini adalah buku tentang menulis driver perangkat untuk sistem Linux. Itu adalah tujuan yang layak, tentu saja; aliran produk perangkat keras baru kemungkinan tidak akan melambat dalam waktu dekat, dan seseorang harus membuat semua gadget baru itu bekerja dengan Linux. Tetapi buku ini juga tentang bagaimana kernel Linux bekerja dan bagaimana menyesuaikan kerjanya dengan kebutuhan atau minat Anda. Linux adalah sistem terbuka; dengan buku ini, kami berharap, buku ini lebih terbuka dan dapat diakses oleh komunitas pengembang yang lebih besar.

Larry Smithmier
sumber
Saya selalu menemukan pembelajaran yang berorientasi pada tujuan lebih produktif daripada pembelajaran abstrak bagi saya. Buku LDD memberi saya kesempatan untuk menggigit sepotong cukup kecil untuk membuat kemajuan.
Larry Smithmier
2

Linux Kernel 2.4 Internal adalah sumber online lain untuk dilihat. Tampaknya mengambil pendekatan 'ground up' yang cantik, dimulai dengan booting. Di sini TOC:

  1. Booting
    • 1.1 Membangun Image Kernel Linux
    • 1.2 Booting: Gambaran Umum
    • 1.3 Booting: BIOS POST
    • 1.4 Booting: bootector dan setup
    • 1.5 Menggunakan LILO sebagai bootloader
    • 1.6 Inisialisasi tingkat tinggi
    • 1.7 Boot SMP pada x86
    • 1.8 Membebaskan data dan kode inisialisasi
    • 1.9 Memproses baris perintah kernel
  2. Manajemen Proses dan Interupsi
    • 2.1 Struktur Tugas dan Tabel Proses
    • 2.2 Pembuatan dan penghentian tugas dan utas kernel
    • 2.3 Penjadwal Linux
    • 2.4 Implementasi daftar tertaut Linux
    • 2.5 Tunggu Antrian
    • 2.6 Timer Kernel
    • 2.7 Bagian Bawah
    • 2.8 Antrian Tugas
    • 2.9 Tasklets
    • 2.10 Softirqs
    • 2.11 Bagaimana Panggilan Sistem Diimplementasikan pada Arsitektur i386?
    • 2.12 Operasi Atom
    • 2.13 Spinlocks, Spinlocks Baca-tulis dan Spinlocks Pembaca Besar
    • 2.14 Semafor dan baca / tulis Semafor
    • 2.15 Dukungan Kernel untuk Memuat Modul
  3. Sistem File Virtual (VFS)
    • 3,1 Inode Cache dan Interaksi dengan Dcache
    • 3.2 Pendaftaran / Pembatalan Pendaftaran Sistem File
    • 3.3 Manajemen Deskriptor File
    • 3.4 Manajemen Struktur File
    • 3.5 Superblock dan Mountpoint Management
    • 3.6 Contoh Virtual Filesystem: pipefs
    • 3.7 Contoh Sistem File Disk: BFS
    • 3.8 Domain Eksekusi dan Format Biner
  4. Cache Halaman Linux
  5. Mekanisme IPC
    • 5.1 Semaphores
    • 5.2 Antrian pesan
    • 5.3 Memori Bersama
    • 5.4 Linux IPC Primitives

Dan, untuk membuatnya lebih manis, ada Linux Kernel Development Edisi Ketiga oleh Robert Love out dan Slashdot memiliki ulasan.

Larry Smithmier
sumber
1

Mulai dengan Linux Kernel Primer oleh Claudia Salzberg et al. Bagus untuk memulai dengan untuk pemula. Buku Robert Love jelas bukan buku yang harus dimulai oleh pemula. Buku terakhir berada di atas tingkat menengah.

PaulDaviesC
sumber