BSD Kernel Loadable (KLD)
For English, see _introduction.EN.md.
Kernel FreeBSD bersifat modular. Modularitas ini membuat sebagian besar fungsionalitas kernel (device driver, filesystem, dsb) dapat dimuat (load) dan dibongkar (unload) saat runtime tanpa perlu membangun ulang ataupun me-restart kernel. Sebuah KLD adalah object code yang berisi implementasi fungsionalitas tersebut.
Setiap KLD mendaftarkan sebuah event_handler, fungsi yang dipanggil oleh kernel saat terjadi event tertentu terhadap module — paling umum adalah MOD_LOAD (module dimuat) dan MOD_UNLOAD (module dibongkar). Informasi module (nama dan event handler) didaftarkan melalui struktur moduledata_t dan macro DECLARE_MODULE().
static int event_handler (struct module * m, int evt_type, void *arg)
{
switch (evt_type)
{
case MOD_LOAD: /* inisialisasi */ break;
case MOD_UNLOAD: /* pembersihan */ break;
default: return EOPNOTSUPP;
}
return 0;
}
static moduledata_t kld_data = { "nama_module", event_handler, NULL };
DECLARE_MODULE(nama_module, kld_data, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);Seperti Unix pada umumnya, FreeBSD merepresentasikan device sebagai file khusus di /dev, dikelola oleh devfs. Sebuah character device driver mendaftarkan sekumpulan operasi (open, close, read, write, ioctl, dst) melalui struktur struct cdevsw, kemudian membuat device node dengan make_dev() saat module dimuat, dan menghapusnya dengan destroy_dev() saat module dibongkar.
Berbeda dengan Linux yang mengekspos major/minor number secara eksplisit ke userland, FreeBSD modern (5.0+) tidak lagi mengharuskan driver menentukan major/minor secara manual — make_dev() menciptakan node device langsung di /dev dengan nama yang ditentukan, dan kernel mengelola identitas device secara internal.