KLD (Dynamic Kernel Linker) merupakan istilah untuk fasilitas Loadable Kernel Module di FreeBSD, dengan fasilitas kld kita bisa meyisipkan kode2 kernel pada kernel yang sedang berjalan secara on the fly. Untuk menyisipkan suatu kernel object kita pakai perintah : "kldload" dan untuk unload kernel object kita pakai : "kldunload". Dengan kldload kita bisa meload suatu kernel object ke dalam kernel dg menggunakan kernel linker. daftar2 modul2 yang akan diload saat boot bisa dilihat di: ==================== /boot/defaults/loader.conf ==================== misal kita akan meload sound driver ke freebsd kernel kita: ========= ev1lut10n# cat /boot/defaults/loader.conf | grep snd_driver snd_driver_load="NO" # All sound drivers ========= <img src=bsd1.jpg> sebelum meload snd_driver : =================== ev1lut10n# kldstat Id Refs Address Size Name 1 9 0xc0400000 bd97b4 kernel 2 1 0xc63aa000 9000 i915.ko 3 1 0xc63b3000 14000 drm.ko 4 1 0xc70a0000 b000 ntfs.ko =================== kemudian load snd_driver dengan kldload: ========== ev1lut10n# kldload snd_driver ev1lut10n# kldstat Id Refs Address Size Name 1 82 0xc0400000 bd97b4 kernel 2 1 0xc63aa000 9000 i915.ko 3 1 0xc63b3000 14000 drm.ko 4 1 0xc70a0000 b000 ntfs.ko 63 1 0xc76b7000 2000 snd_driver.ko 64 1 0xc76bb000 5000 snd_vibes.ko 65 34 0xc76c0000 4c000 sound.ko 66 1 0xc7711000 4000 snd_via82c686.ko 67 1 0xc77c0000 7000 snd_via8233.ko 68 1 0xc77c7000 5000 snd_t4dwave.ko 69 3 0xc77cc000 3000 snd_spicds.ko 70 1 0xc77db000 5000 snd_solo.ko 71 4 0xc77e3000 4000 snd_sbc.ko 72 1 0xc77e7000 4000 snd_sb8.ko 73 1 0xc77eb000 4000 snd_sb16.ko 74 1 0xc77ef000 11000 snd_neomagic.ko 75 2 0xc7812000 a000 snd_mss.ko 76 1 0xc781e000 a000 snd_maestro3.ko 77 1 0xc7828000 8000 snd_maestro.ko 78 1 0xc7830000 6000 snd_ich.ko 79 1 0xc7853000 1a000 snd_hda.ko 80 1 0xc7879000 4000 snd_fm801.ko 81 1 0xc787d000 5000 snd_ess.ko 82 1 0xc7882000 8000 snd_es137x.ko 83 1 0xc7899000 7000 snd_envy24ht.ko 84 1 0xc78a0000 8000 snd_envy24.ko 85 1 0xc78a8000 12000 snd_emu10kx.ko 86 1 0xc78bc000 b000 snd_ds1.ko 87 2 0xc78c7000 7000 snd_csa.ko 88 1 0xc78d0000 5000 snd_cs4281.ko 89 1 0xc78d5000 5000 snd_cmi.ko 90 1 0xc78dc000 6000 snd_atiixp.ko 91 1 0xc78e2000 5000 snd_als4000.ko 92 1 0xc97bc000 4000 snd_ad1816.ko ev1lut10n# ================ di atas kita bisa melihat semua kernel object yang berhubungan dengan snd_driver sudah berhasil diload secara on the fly. untuk mengetahui path dari kernel module bisa kita cek dg sysctl kern.module_path ====== 127# sysctl kern.module_path kern.module_path: /boot/kernel;/boot/modules ====== di situ terlihat module ada di /boot/kernel dan /boot/modules ======== ev1lut10n# readelf -h /boot/kernel/snd_driver.ko ELF Header: Magic: 7f 45 4c 46 01 01 01 09 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - FreeBSD ABI Version: 0 Type: DYN (Shared object file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x740 Start of program headers: 52 (bytes into file) Start of section headers: 3624 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 3 Size of section headers: 40 (bytes) Number of section headers: 18 Section header string table index: 15 ============== snd_driver.ko merupakan ELF 32-bit LSB shared object tiap elf object selalu ditandai 16 magic bytes yang berbeda untuk masing2 objek ==== Magic: 7f 45 4c 46 01 01 01 09 00 00 00 00 00 00 00 00 ==== Untuk lebih detail tentang elf objects akan sy bahas dalam tulisan lain (krn ga sesuai dg permainan kali ini).