Kompilasi kernel – step 2: Konfigurasi

Genius doesn’t work on an assembly line basis. You can’t simply say,
“Today I will be brilliant.”
— Kirk, “The Ultimate Computer”, stardate 4731.3

Sebelum melanjutkan pembahasan, kita ulas step sebelumnya. Pada dasarnya di step awal kita melakukan pengumpulan informasi mengenai perangkat keras komputer kita sedetil-detilnya. Informasi tersebut kita pakai sebagai dasar pengetahuan ketika nanti menjawab berbagai pertanyaan di tahap konfigurasi –tahap ini. Maka itu, semakin lengkap informasi kita jelas akan memudahkan konfigurasi.

Tahap konfigurasi diawali di dalam direktori source code kernel; untuk itu Anda masuk saja langsung ke sana dan lihat-lihat isinya. Anda akan melihat beberapa file dan sub direktori (yang biasanya berwarna biru).

Untuk masuk ke sebuah direktori dengan cd dan melihat isinya dengan ls.

Saya coba terangkan terlebih dulu tentang beberapa file di situ dan mekanisme kompilasi program di GNU/Linux, baru setelah itu saya bahas konfigurasi kernel. Pertama mungkin lebih dulu tentang file-file di situ; yang sudah tahu mohon sabar yach😉

Adalah satu kelaziman jika bukan malah “keharusan” bahwa source code program berisi file: README, COPYING, CREDITS, REPORTING-BUGS dan MAINTAINER. Masih ada beberapa file lain, misalnya Changelog atau TODO. Tentu ini semua hanya ada di program free atau open. Tidak semua harus ada, biasanya bervariasi dan namanya kadang tidak persis seperti itu. File-file tersebut standard, dan namanya telah jelas mencerminkan apa isinya. Satu yang terpenting adalah file bernama “Makefile” yang akan diulas nanti. Sebelum ke step konfigurasi, satu lagi yang perlu disinggung: perintah make.

Utilitas, atau program, atau juga “perintah” (di Linux banyak program disebut “command” atau “perintah” begitu saja) bernama make ini begitu spesial, begitu istimewa. Bagi yang pernah merasakan “jasa” utilitas ini, silakan bayangkan sejenak bagaimana kira-kira rasanya melakukan kompilasi tanpa utilitas ini😉 Menurut manualnya…

The `make’ utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them.

Yup, ia memang bukan compiler (program yang melakukan kompilasi) dalam arti langsung, namun dengan memperhatikan perannya, jelas ia tak bisa dianggap remeh. Dan dalam tiap kasus nyata, kompilasi menjadi virtually impossible jika dilakukan tanpa bantuan utilitas ini. Dasar kerja utilitas ini tidak lain file bernama Makefile tadi; di dalamnya berisi rules yang mengatur urutan file yang harus dikompilasi, file mana saja yang harus dikompilasi (lagi) jika sebuah file tertentu diubah (atau berubah). Termasuk pula: mana sajakah file yang harus dikompilasi untuk menyertakan fitur tertentu ke dalam program, file mana saja yang harus dihapus saat pengguna menghendaki uninstall, dan sebagainya. Dengan adanya rules, kita bisa melakukan langkah tertentu seperti kompilasi, instalasi, dan uninstall semudah mengetikkan perintah make, make install dan make uninstall.

Proses konfigurasi sebelum kompilasi bertujuan untuk mengatur hal-hal berikut ini:

  • fitur mana saja yang dikehendaki untuk didukung;
  • mengisi nilai parameter atau seting khusus fitur tersebut;
  • apakah fitur tertentu dikompilasi agar menjadi satu (file) dengan kernel, atau terpisah;
  • mengoptimasi agar kernel baru nanti sesuai dengan prosesor yang kita pakai.

Itulah maksud utamanya. Perhatikan butir nomor 3, bahwa ada elemen tertentu yang tak bisa dikompilasi terpisah dengan kernel. Sementara yang dikompilasi secara terpisah bisa diaktifkan kapan saja sesuai kebutuhan kita.

Seperti yang telah diulas sebelumnya, kita menggunakan bantuan make untuk melakukan konfigurasi, kompilasi dan bahkan beberapa hal lain juga. Berikan argumen “help” kepada make untuk memperlihatkan daftar argumen apa saja yang bisa Anda berikan kepada make sekaligus fungsinya. Perintah make help di sistem saya memberikan hasil seperti ini:

kazekage@sunagakure:/usr/src/linux-2.6.23.12# make help
Cleaning targets:
clean           - Remove most generated files but keep the config and
                     enough build support to build external modules
mrproper     - Remove all generated files + config + various backup files
distclean      - mrproper + remove editor backup and patch files

Configuration targets:
config                - Update current config utilising a line-oriented program
menuconfig        - Update current config utilising a menu based program
xconfig               - Update current config utilising a QT based front-end
gconfig               - Update current config utilising a GTK based front-end
oldconfig            - Update current config utilising a provided .config as base
silentoldconfig    - Same as oldconfig, but quietly
randconfig          - New config with random answer to all options
defconfig             - New config with default answer to all options
allmodconfig        - New config selecting modules when possible
allyesconfig         - New config where all options are accepted with yes
allnoconfig           - New config where all options are answered with no

Other generic targets:
all             - Build all targets marked with [*]
* vmlinux         - Build the bare kernel
* modules         - Build all modules
modules_install - Install all modules to INSTALL_MOD_PATH (default: /)
dir/            - Build all files in dir and below
dir/file.[ois]  - Build specified target only
dir/file.ko     - Build module including final link
rpm             - Build a kernel as an RPM package
tags/TAGS       - Generate tags file for editors
cscope          - Generate cscope index
kernelrelease   - Output the release version string
kernelversion   - Output the version stored in Makefile
headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH
                         (default: /usr/src/linux-2.6.23.12/usr)

Static analysers
checkstack      - Generate a list of stack hogs
namespacecheck  - Name space analysis on compiled kernel
headers_check   - Sanity check on exported headers

Kernel packaging:
rpm-pkg         - Build the kernel as an RPM package
binrpm-pkg    - Build an rpm package containing the compiled kernel
                        and modules
deb-pkg         - Build the kernel as an deb package
tar-pkg         - Build the kernel as an uncompressed tarball
targz-pkg      - Build the kernel as a gzip compressed tarball
tarbz2-pkg    - Build the kernel as a bzip2 compressed tarball

Documentation targets:
Linux kernel internal documentation in different formats:
htmldocs        - HTML
installmandocs  - install man pages generated by mandocs
mandocs         - man pages
pdfdocs         - PDF
psdocs          - Postscript
xmldocs         - XML DocBook

Architecture specific targets (i386):
* bzImage       - Compressed kernel image (arch/i386/boot/bzImage)
install       - Install kernel using
                  (your) ~/bin/installkernel or
                  (distribution) /sbin/installkernel or
                  install to $(INSTALL_PATH) and run lilo
bzdisk       - Create a boot floppy in /dev/fd0
fdimage      - Create a boot floppy image
isoimage     - Create a boot CD-ROM image

make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build
make V=2   [targets] 2 => give reason for rebuild of target
make O=dir [targets] Locate all output files in "dir", including .config
make C=1   [targets] Check all c source with $CHECK (sparse by default)
make C=2   [targets] Force check of all c source with $CHECK

Execute "make" or "make all" to build all targets marked with [*]
For further info see the ./README file
kazekage@sunagakure:/usr/src/linux-2.6.23.12#

Catatan: jangan permasalahkan tulisan “kazekage“, di kebanyakan sistem mestinya itu “root“. Tak masalah, hanya perbedaan nama saja😉

Menurut hasil di atas, kita mempunyai 11 cara hanya untuk melakukan konfigurasi saja (daftar di bawah nama kategori “Configuration targets:“). Dari sebegitu banyak yang sering dipakai ada 4, yaitu config, menuconfig, xconfig dan gconfig. Namun saya duga, sangat sedikit yang memakai config😉

Catatan: masing-masing argumen tersebut telah jelas deskripsinya; saya harapkan pembaca sedikit banyak mengerti bahasa Inggris. Jika saya belum pernah menyebutkan soal satu ini sebagai persyaratan maka berarti itu terlupakan dan anggap saja catatan ini pemberitahuan atas pentingnya syarat itu.

Sempatkan mencermati juga 3 macam argumen di kelompok “Cleaning targets:“. Di sini arti cleaning tak lain adalah uninstall, alias menghapus.
Masing-masing berbeda dalam hal tingkat “kebersihan” menghapus😉

Perhatikan pula daftar argumen di bawah nama “Other generic targets:” kita kelak akan sering memakai 4 argumen teratas dalam daftar itu. Nah, kita kembali ke step konfigurasi. Jadi pilih dari 4 metode di atas lalu jalankan. Sebagai contoh, di sini saya memilih konfigurasi berbasis menu di modus teks saja; jadi saya akan menggunakan make menuconfig.

Catatan: perhatikan sekali lagi argumen-argumen di bawah “Cleaning targets:“, tergantung dengan situasi Anda, mungkin saja sebelum make menuconfig Anda perlu melakukan salah satu dari metode cleaning tersebut. Jika ini adalah kompilasi kali pertama, AFAIK cukuplah make menuconfig langsung, atau metode konfigurasi lain yang Anda sukai.

Setelah eksekusi salah satu metode konfigurasi, kita akan berhadapan dengan menu konfigurasi; tampilannya bervariasi tergantung metode yang Anda pilih, namun esensinya sama. Mulai dari titik ini, kerjaan kita adalah browse ke pilihan-pilihan tersebut, membaca dokumen yang disarankan atau sekedar membaca “help” singkat lalu berpikir untuk mencernanya dan akhirnya menetapkan sebuah pilihan atau isian nilai tertentu. Tak semua akan kita mengerti dalam seketika –saya sudah tulis bahwa:

Genius doesn’t work on an assembly line basis. You can’t simply say,
“Today I will be brilliant.”
— Kirk, “The Ultimate Computer”, stardate 4731.3

Jadi, nikmati prosesnya dan dengan demikian kita belajar sedikit demi sedikit untuk tanpa sadar beberapa tahun berikutnya ternyata kita faham begitu banyak hal “baru” yang menarik. Sabar. Ingat bahwasanya:

Your focus determines your reality. –by Qui-Gon Jinn, Star Wars I: The Phantom Menace.😉

Baca. Coba telusuri dan fokus ke hal-hal yang terjangkau oleh otak kita saat ini; yang belum terjangkau, catat dalam ingatan (atau real notes) untuk digali informasinya di saat senggang nanti. Sebenarnya untuk belajar istilah “saat senggang” itu agak ngga’ kondusif. IMHO, untuk belajar itu harus disempatkan. Harus dicari-cari kesempatannya ‘coz jika tidak fokus kita dengan sangat mudahnya teralihkan ke hal lain. Ini utamanya penting buat Anda yang mengalami kesulitan mengatur fokus, bukan karena penyakit rabun jauh atau rabun dekat dan semacamnya, tapi karena memang mengidap penyakit cepet bosen atau kadang sebenarnya “cuma” malez…😉

Baiklah, cukup OOT-nya🙂

Yang jelas banyak baca, karena hanya dengan itu shortcut terdekat untuk memahami poin-poin pilihan yang sedemikian banyak. Anda tak bisa mengandalkan saya walau pun memang, saya bisa saja terjemahkan atau terangkan beberapa poin, tapi TIDAK semuanya. Saya sudah ingatkan tentang kemampuan berbahasa Inggris. Sekali lagi, baca dan jawab, toh ada saran jika Anda bingung hendak menjawab gimana. Sebelum dialog atau menu muncul, ada proses kompilasi sebentar; yang dikompilasi tak lain si program bantu konfigurasi itu sendiri. Di tempat saya hasilnya seperti ini:

kazekage@sunagakure:/usr/src/linux-2.6.23.12# make menuconfig
HOSTCC  scripts/basic/fixdep
HOSTCC  scripts/basic/docproc
HOSTCC  scripts/kconfig/conf.o
HOSTCC  scripts/kconfig/kxgettext.o
HOSTCC  scripts/kconfig/lxdialog/checklist.o
HOSTCC  scripts/kconfig/lxdialog/inputbox.o
HOSTCC  scripts/kconfig/lxdialog/menubox.o
HOSTCC  scripts/kconfig/lxdialog/textbox.o
HOSTCC  scripts/kconfig/lxdialog/util.o
HOSTCC  scripts/kconfig/lxdialog/yesno.o
HOSTCC  scripts/kconfig/mconf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC  scripts/kconfig/zconf.tab.o
HOSTLD  scripts/kconfig/mconf
scripts/kconfig/mconf arch/i386/Kconfig
#
# using defaults found in arch/i386/defconfig
#

Ada banyak sub direktori di direktori arch, itu tak lain adalah arsitektur hardware apa saja yang didukung oleh Linux. Arsitektur ini autodetected oleh program bantu konfigurasi. Perhatikan 1 baris sebelum karakter “#” teratas; nama mconf tersebut tak lain adalah nama program bantu konfigurasi ini. Anda bisa lihat sendiri di dalam direktori bersangkutan, yakni scripts/kconfig, ada banyak yang lain namun masih berupa source code karena tidak dikompilasi (sebabnya jelas: karena saya memilih memakai make menuconfig). Untuk selanjutnya, di artikel ini saya akan sebut saja “mconf” tanpa tanda kutip daripada “program bantu konfigurasi” —‘coz terlalu panjang.

General setup

Namanya telah cukup menjelaskan apa isinya; hal-hal umum diatur di bagian ini, so ini bagian yang layak ditengok lebih dulu. Ada sekitar 20an hal menarik, iya khan😉 dan bagi yang baru pertama kali mencoba kompilasi kernel, ini saja sudah menyita waktu (untuk membaca help-nya). Namun memang belajar harus gitu

Saya mulai terjangkiti ilfil sampai di sini😐
Haruskah saya terjemahkan cukup detil, atau tidak? Saya harap pembaca betul-betul “cukup” punya kemandirian dan tak berharap diterangkan apa arti kalimat “Arrow keys navigate the menu. <Enter> selects submenus…”.
It will really annoying me. Ambil dan buka kamus jika perlu. Serius.❗
Saya jelaskan atau ulas poin yang penting saja ya (tentu “penting” menurut saya) dan yang lain silahkan dieksplorasi sendiri😉

Prompt for development and/or incomplete code/drivers

Fitur-fitur serta komponen telah diatur agar punya label yang mengindikasikan status “kematangan” mereka. Dalam dunia programming, maturity atau kematangan (bencinya aku terjemahan Indonesia) berarti antara: stabil atau belum; antara alpha, beta atau production. Istilahnya bervariasi. Bicara soal kernel, biasanya sih memakai istilah “development” dan “stable” saja. Arti yang pertama adalah: bahwa fitur atau komponen yang bersangkutan masih dalam tahap pengembangan, sehingga membutuhkan tahap testing yang cukup sebelum ia inyatakan stabil dan “tidak berbahaya bagi user umum”. Arti “stable” telah jelas.

Nah, jika kita memilih ini, maka semua fitur dan komponen kernel yang masih dalam status “development” akan ikut ditawarkan kepada kita. Jika tidak kita pilih, maka mereka tidak akan ditampilkan oleh mconf.

Saran: jika untuk kepentingan coba-coba dan khawatir terjadi salah pilih, barangkali lebih bijak untuk tidak memilih ini agar segala macam yang masih belum stabil akan disembunyikan oleh mconf dan kita pun tak salah pilih. Dan tenang juga…😉

Local version – append to kernel release

Ini bagian yang menarik; kita bisa menambahkan kata sebagai info tambahan ke versi kernel. Versi kernel akan muncul dengan perintah uname -a. Di tempat saya hasilnya seperti ini:

in@sunagakure:/usr/src/linux-2.6.23.12$ uname -a
Linux sunagakure 2.6.22.9-suna_rebuilt1 #2 Mon Oct 1 23:19:26 WIT 2007 i686 Intel(R) Celeron(R) CPU 1.80GHz GenuineIntel GNU/Linux
in@sunagakure:/usr/src/linux-2.6.23.12$

Nah, “suna_rebuilt1” itulah info tambahannya. Bukan (hanya) untuk gaya saja loh, itu akan ditambahkan juga ke nama direktori modul kernel sehingga tak perlu khawatir modul baru akan menimpa yang lama; tentunya jika kita membedakan namanya. Contohnya, di tempat saya begini:

in@sunagakure:/usr/src/linux-2.6.23.12$ ls /lib/modules/ -l
total 2
drwxr-xr-x 3 kazekage kazekage 488 2007-09-30 19:51 2.6.21.5/
drwxr-xr-x 3 kazekage kazekage 488 2007-06-13 04:51 2.6.21.5-smp/
drwxr-xr-x 3 kazekage kazekage 488 2007-10-01 23:24 2.6.22.9-suna_rebuilt1/
in@sunagakure:/usr/src/linux-2.6.23.12$

Makanya, info tambahan ini penting.

Support for paging of anonymous memory (swap)

Jika pernah melakukan instalasi GNU/Linux sendiri tentu pernah disuguhi istilah swap memory. Kalangan Windowser lebih mengenalnya sebagai virtual memory. Itu sama saja; maksudnya: sebagian area HDD, baik berupa partisi atau file yang khusus didedikasikan untuk perluasan RAM. Saya kutipkan deskripsinya:

CONFIG_SWAP:

This option allows you to choose whether you want to have support
for so called swap devices or swap files in your kernel that are
used to provide more virtual memory than the actual RAM present
in your computer. If unsure say Y.

Symbol: SWAP [=y]
Prompt: Support for paging of anonymous memory (swap)
Defined at init/Kconfig:95
Depends on: MMU && BLOCK
Location:
-> General setup

Jangan lupa memperhatikan informasi setelah deskripsi, itu penting juga walau tak perlulah menghafalkannya. Yang penting: kita tahu akhirnya bahwa fitur ini tergantung pada fitur lain berlabel “MMU” dan “BLOCK”. Dan sekedar dugaan saja, MMU mungkin sekali singkatan dari Memory Management Unit. Cuma tebakan lho…😉

BSD Process Accounting

Deskripsi menyatakan “This is generally a good idea, so say Y” maka tak ada jeleknya menyertakan fitur ini😉
Istilah process accounting sejauh yang bisa saya terangkan adalah pencatatan info tentang suatu proses ketika ia berakhir; yang dicatat antara lain nama perintahnya, pemakaian memori, user pemiliknya dan sebagainya. Fitur semacam ini semakin penting jika Anda peduli pada aspek ketertiban administrasi maupun security😉

Export task/process statistics through netlink (EXPERIMENTAL)

Ini mirip dengan BSD Process Accounting, hanya saja statistik tersedia tidak hanya setelah proses berakhir namun selama proses diesekusi juga. Saya kutipkan deskripsi fitur ini:

Export selected statistics for tasks/processes through the generic netlink interface. Unlike BSD process accounting, the statistics are available during the lifetime of tasks/processes as responses to commands. Like BSD accounting, they are sent to user space on task exit.

Perhatikan bahwa walaupun pada namanya mengandung “EXPERIMENTAL” yang menandakan statusnya masih eksperimental, namun ketika saya menon-aktifkan fitur “Prompt for development and/or incomplete code/drivers” maka fitur ini tidak hilang. Jika informasi di bawah deskripsi dicermati, maka nampak bahwa fitur ini hanya tergantung kepada fitur lain bernama “NET“. Berbeda dibanding fitur “POSIX Message Queues” yang walaupun namanya tak mengandung “EXPERIMENTAL” tapi informasi di bawah deskripsi nyata-nyata memperlihatkan ia tergantung kepada “NET” dan “EXPERIMENTAL“. Jadi, saya rasa ini hanyalah kekurang telitian saja😉

Optimize for size (Look out for broken compilers!)

Ah, barangkali tawaran satu ini begitu sayang untuk disia-siakan. Tanpa membaca deskripsi hampir tiap orang tahu apa ini. Jika Anda memilihnya, maka kompilasi akan dioptimasikan sedemikian hingga menghasilkan file kernel berukuran kecil. Tak ada salahnya dicoba, saya suka sesuatu yang hemat dan “kecil”🙂

Modul kernel

File modul disimpan di dalam direktori /lib/modules, di bawah direktori dengan nama versi kernelnya. Modul kernel sendiri adalah:

Kernel modules are small pieces of compiled code which can be inserted in the running kernel, rather than being permanently built into the kernel

Jadi, bagian tertentu dari kode kernel rupanya bisa dikompilasi ke/di file terpisah untuk kemudian dipanggil atau disisipkan ke kernel yang sedang bekerja saat itu. Dan tentunya bisa “dicabut” lagi. Fitur ini sangat diajurkan; tak seorang pun ingin memiliki kernel raksasa yang berisi segala macam hal –sebab ini tindakan boros. Lanjutan deskripsinya:

You use the “modprobe” tool to add (and sometimes remove) them. If you say Y here, many parts of the kernel can be built as modules (by answering M instead of Y where indicated): this is most useful for infrequently used options which are not required for booting. For more information, see the man pages for modprobe, lsmod, modinfo, insmod and rmmod.

Jadi kita bisa gunakan perintah tertentu untuk “menyisipkan” modul ke dalam kernel dan “mencabutnya” lagi jika dianggap perlu. Agar suatu fitur dikompilasi sebagai modul kita perlu memilihnya dengan tanda/huruf “M” alih-alih “Y”. Dan sekali lagi ingat, ada komponen atau fitur tertentu yang tidak bisa diset menjadi “M”. Selanjutnya kita baca kutipan terakhir:

If you say Y here, you will need to run “make modules_install” to put the modules under /lib/modules/ where modprobe can find them (you may need to be root to do this).

Jelas. Jika kita aktifkan, nanti kita harus juga menjalankan make modules_install untuk menginstalasi file modul yang dihasilkan proses kompilasi. Fitur ini bernama “Enable loadable module support“. Aktifkan dan jangan lupa opsi “Automatic kernel module loading”😉

Processor type and features

Poin ke tiga yang utama menangani pilihan-pilihan terkait dengan prosesor. Di bagian ini antara lain kita bisa mengatur agar kernel yang dihasilkan dioptimasi untuk prosesor yang kita pakai saja, mengatur apakah kernel nantinya mendukung arsitektur SMP atau tidak dan lain sebagainya. Berikut ini ulasan beberapa sub poin yang terpenting.

Symmetric multi-processing support

Non aktifkan fitur ini, kebanyakan orang tidak mempunyai sistem yang SMP capable. Ringkasnya, SMP adalah sistem multi prosesor. Namun sistem multi prosesor tidak selalu berwujud motherboard dengan dua slot atau soket prosesor. Prosesor dengan fitur hyper threading, atau Dual Core™ series milik Intel, adalah contoh untuk sistem multi prosesor walaupun prosesor secara fisik cuma satu. Jika fitur SMP ini dipilih dan sistem Anda itu memang benar-benar SMP capable, maka Anda akan melihat logo pinguin yang tampil di awal proses booting tak hanya satu, melainkan sesuai dengan “jumlah” prosesor Anda😉 Oya, tentunya jika fitur framebuffer juga dipilih (dijelaskan nanti).

Subarchitecture Type (PC-compatible)

Ini jelas; pilihlah yang sesuai. Kebanyakan kita mungkin akan memilih “PC-compatible“.

Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon)

Ini keluarga prosesornya; punya saya adalah Celeron-nya Pentium 4. Silakan pilih sesuai prosesor Anda. Salah pilih, jika tak terlalu jauh paling hanya akan membuat segalanya lambat. Namu jika terlalu jauh bisa jadi kernel gagal bekerja nantinya.

Generix x86 support

Yang ini boleh juga; gunanya agar kernel yang dihasilkan selain optimal di prosesor pilihan kita, ia masih optimal pula di prosesor keluarga x86.

Preemption Model (No Forced Preemption (Server))

Jangan khawatir, saya juga tak terlalu faham tentang “preemptive thing” namun apa yang ada di deskripsi jelas; jika Anda hendak membuat server, pilihlah seperti yang saya ambil😉

Power management options (ACPI, APM)

Di sini diatur apakah kernel mendukung pengaturan penggunaan daya listrik atau tidak, teknologi mana yang dipakai, level penghematan yang didukung hendak sejauh mana dan sebagainya. Perhatikan bahwa pilihan-pilihan di sini harus disesuaikan dengan perangkat keras Anda. Untuk board baru, pilih ACPI, dan jika memakai board lama pilihlah APM. Anda hanya perlu memilih salah satu, jangan semuanya. Anda mungkin tertarik dengan fitur “Suspend to RAM and standby” atau fitur “Hibernation (aka ‘suspend to disk’)“. Keduanya fitur baru.

Perhatikan bahwa fitur canggih biasanya memerlukan konfigurasi lebih lanjut; yang Anda lakukan sekarang hanyalah konfigurasi agar fitur tertentu itu didukung oleh kernel yang akan Anda buat melalui kompilasi. Jadi, bacalah deskripsinya selalu; di sana biasanya ada referensi lagi. Bacalah juga referensi itu.

Masuklah ke menu “ACPI support” dan pilih detil fitur mana saja yang diinginkan. Saran saja, jika sistem Anda adalah sebuah mobile device (laptop misalnya) pilihlah fitur “AC Adapter” dan “Battery“. Boleh juga fitur “Fan“. Jika ada sub fitur lain yang terkait dengan nama perangkat Anda, jangan ragu membuka deskripsinya dan cari tahu informasi berharga di sana.

Karena tidak saya peruntukkan dipasang di laptop, maka saya hanya memilih fitur Button, Fan dan Thermal Zone; masing-masing sebagai modul saja agar ukuran file kernel saya tak terlalu besar. Jangan aktifkan fitur Debug statements kecuali jika Anda seorang developer kernel atau sedang ingin berbaik hati membantu mereka😉

Bus options (PCI, PCMCIA, EISA, MCA, ISA)

Bagian ini tempat untuk mengatur dukungan terhadap bus dan segala hal yang terkait dengannya. Seperti biasa, sesuaikan dengan perangkat keras yang Anda miliki. Jika tak ada slot ISA, yaa jangan sertakan dukungan terhadap bus ISA, tak ada gunanya dan hanya pemborosan. Selain laptop tentu tidak membutuhkan dukungan terhadap PCMCIA. Bagian ini cukup mudah, kerjaan kita hampir cuma memilih mana yang kita punya perangkat kerasnya dan mana yang tidak. Kita ke bagian selanjutnya.

Executable file formats

Tak banyak konfigurasi di sini; sesuai namanya, Anda bisa menetapkan format file eksekusi apa yang ingin didukung. Teknologi terbaru di Linux soal format file ini ialah ELF. Jika Anda ingin agar file EXE bisa dieksekusi di GNU/Linux, masukkan atau aktifkan poin ke tiga: Kernel support for MISC binaries. Tentu tak semata-mata bisa menjalankan EXE; butuh emulator untuk itu. Saya memasukkannya sebagai modul.

Networking

Bagian ini berisi menu konfigurasi pengatur fitur dan komponen jaringan. Sub bagian Network options utamanya berisi pilihan protokol apa saja yang didukung; termasuk di sini adalah dukungan ke IP versi 6. Sub bagian sisanya berisi berbagai jenis kelompok teknologi seperti infra merah, bluetooth, wireless dan lain sebagainya.

Device Drivers

Bagian ini adalah tempat yang terbanyak memerlukan konfigurasi. Seperti tersirat dari namanya, di sini tempat drivers berada. Bila memerlukan dukungan terhadap perangkat simpan seperti kartu MMC dan sejenisnya, aktifkan Memory Technology Device (MTD) support. Masih mempunyai printer pararel? Sertakan Pararel port support.

Bagian Block devices berisi macam-macam perangkat penyimpan data seperti floppy disk dan RAM disk.

ATA/ATAPI/MFM/RLL support

Dukungan untuk chipset controller berbagai perangkat yang terkait untuk baca dan simpan data ada di sini. Berikut ini pembahasan tentang beberapa poin terpenting.

  • Include IDE/ATA-2 DISK support; ini penting jika Linux punya Anda terinstal di hard disk IDE. Saya kutipkan dari deskripsinya:

    To compile this driver as a module, choose M here: the module will be called ide-disk. Do not compile this driver as a module if your root file system (the one containing the directory /) is located on the IDE disk.

    Mengonfigurasi ini sebagai modul akan menyebabkan kernel gagal booting sebab tidak bisa menemukan partisi utama tempat sistem berada. Penjelasannya: driver untuk partisi utama ada sebagai modul, padahal akses ke partisi utama terjadi sebelum modul-modul dipanggil😉

  • Include IDE/ATAPI CDROM support; jika Anda punya CDROM, CDRW atau perangkat keras yang kompatibel dengan ATAPI, maka fitur ini harus disertakan dalam kompilasi.
  • Generic PCI bus-master DMA support; Anda pasti menginginkan ini, kecuali kompilasi diperuntukkan bagi sistem yang sangat jadoel. Penggunaan DMA akan mendongkrak kinerja sistem dan lagi perangkat keras sekarang ini telah mendukung teknologi DMA semua. Jangan lewatkan.

Di bagian menu merk chipset, pilih yang sama dengan chipset Anda; di sini saya pilih VIA82CXXX chipset support (ingat hasil pengumpulan informasi di step 1, di artikel sebelumnya).

SCSI device support

Berdasar pengalaman pribadi, tidak banyak yang punya perangkat keras SCSI; tapi jangan salah, walau hard disk SCSI kita tak bakalan pernah punya, ternyata USB flash disk membutuhkan dukungan di sini. USB flash disk memakai skema penamaan partisi layaknya perangkat SCSI, ini artinya Anda harus masukkan dukungan SCSI jika ingin memakai USB flash disk –yang hampir tiap orang punya. Ingat, pilih yang relevan saja: SCSI disk support. SCSI generic support tidak diperlukan terkait soal USB flash disk ini. SCSI low-level drivers juga tak perlu, kecuali memang punya alat SCSI betulan.

Tentang Serial ATA dan Pararrel ATA silakan disesuaikan; saya tidak memakai SATA sehingga walaupun board mendukung fitur ini bakal tak dipakai. Saya pilih mengikutkannya dalam kompilasi nantinya sebagai modul saja. Karena saya juga tidak memakai RAID ataupun LVM (walau ingin sekali belajar) maka fitur tersebut tidak saya pilih. Bagian penting berikutnya adalah Network device support.

Network device support

Ini tempat driver kartu jaringan, demikian penjelasan singkatnya. Cari kartu yang Anda pakai sesuai kelompoknya; ada kartu 100an Mbps, 10 Mbps sampai yang kaliber gigabit. Berdasar info yang terkumpul (dicontohkan di artikel sebelumnya) saya perlu mencari driver untuk kartu VIA Rhine-II dan D-Link yang berchipshet Realtek 8139 (RTL8139). Kedua kartu itu drivernya saya kompilasi di dalam kernel, menyatu. Saya lewati semua sisanya. Anda mungkin masih perlu melihat-lihat bagian yang lain, tergantung perangkat keras yang Anda punyai.

Input device support

Periksalah kategori Keyboard, Mice dan Miscellaneous devices; bagi saya, ketiganya diperlukan. Jika punya perangkat kategori yang lain, silakan periksa sendiri. Untuk mouse saya pilih PS/2 dan PC Speaker support dari kategori Miscellaneous devices; masing-masing sebagai modul saja. Kita lanjut ke bagian berikutnya.

Character devices

Periksa poin-poin terkait random number generator support; pilih yang sesuai dengan board Anda, saya memilih VIA HW Random Number Generator support. Jika punya kartu AGP, atau hanya slot AGP, jangan lupa pilih AGP Support, lalu ada sub poin di bawahnya tentang chipset VGA, pilih yang sesuai; saya memilih VIA chipset support.

Hardware Monitoring support

Jika board mendukung teknologi ini, pilihlah sebagai modul (atau, built-in boleh juga) lalu pilih lagi chipsetnya. Saya mencoba semua yang VIA. Sekali lagi sesuaikan saja dengan board Anda.

Graphic support

Yang penting di bagian ini ialah Support for frame buffer devices, pilih ini lalu pilih lagi driver yang sesuai dengan VGA. Saya memilih VIA VT8623 support, hanya ini yang VIA. Lalu masuk ke sub menu Console display driver support, pilih Framebuffer Console support. Setelah itu kembali ke layar sebelumnya, dan pilih Bootup logo, ada tiga pilihan lagi, sebaiknya ambil salah satu saja walaupun semuanya secara default terpilih. Saya memilih logo 224 warna.

Sound

Jika mempunyai sound card, silakan masuk ke sini dan memilih-milih driver yang sesuai. Pertama, ada dua teknologi terkait fitur ini; yang satu ALSA dan yang lebih dulu adalah Open Sound System (OSS). Setelah memilih antara ALSA atau OSS, pilihlah driver bagi sound card Anda. Kumpulan driver ada di sub menu PCI devices (jika kartunya PCI) atau di USB devices (jika USB). Saya memilih VIA 82C686A/B, 8233/8235 AC97 Controller.

USB support

Yang sering membingungkan biasanya memilih antara OHCI, UHCI dan EHCI; mana yang benar… Tengok info hasil investigasi di artikel sebelumnya tentang mana yang tepat. Si sistem saya yang tepat adalah UHCI. EHCI adalah dukungan ke USB 2.0, board baru hampir pasti mendukung ini, jadi Anda bisa pilih ini juga. USB Mass Storage support hampir pasti diperlukan; berguna jika Anda menghendaki USB flash disk terbaca di sistem baru nanti. Sampai di sini bagian Device Drivers selesai…

File systems

Ini adalah bagian terakhir dari beberapa cabang bagian utama yang sifatnya penting untuk dibahas bagi praktisi kompilasi kernel pemula. Seperti tersurat dari namanya, bagian ini berisi konfigurasi dukungan terhadap macam-macam file system. Hal yang penting: jangan kompilasi dukungan file system partisi utama Anda sebagai modul. Itu saja; yang lain “tidak begitu berbahaya”…😉

Maka itu, saya pilih fitur Second extended fs support dan Ext3 journalling file system support sebagai modul; Reiserfs support dipilih built-in. Selain itu yang disarankan dicoba ialah Quota support, dan sebaiknya pilih semua sub poin yang ditawarkan.

Mengakhiri tahap konfigurasi

Ketika keluar dari mconf, kita akan ditawari untuk menyimpan semua konfigurasi yang kita tetapkan tadi. Dan akan ada beberapa baris tambahan semisal dengan ini:

...
# configuration written to .config
#

*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.

kazekage@sunagakure:/usr/src/linux-2.6.23.12#

Di titik ini tahap konfigurasi selesai. Seperti yang telah Anda ikuti, tahap ini begitu panjang. Apa yang saya coba ulas masih jauh dari lengkap. Dan mengingat jenis perangkat keras dari orang ke orang sangat beragam, maka tidak mungkinlah untuk membahas tahap konfigurasi ini secara detil 100%. Yang lebih baik adalah setiap kita mencobanya sendiri, di perangkat keras masing-masing. Jika setelah itu muncul masalah, kita bicarakan dan cari solusinya.

Artikel ini saya coba susun tidak terlalu mendalam; saya ulas beberapa contoh dengan harapan konsepnya tersampaikan ke rekan-rekan pembaca. Bilamana ada rekan yang mempunyai pengalaman lebih, bolehlah dibagi agar bisa kita nikmati bersama-sama.

Sebagai penutup, saya mohon maaf tidak (sanggup) menuliskan daftar istilah asing sebagaimana artikel sebelumnya, dan mohon koreksi, tanggapan terutama atas kesalahan penyusunan yang mungkin saja saya lakukan.

Selesai ditulis setelah perjuangan hampir 24 jam…

6 responses to “Kompilasi kernel – step 2: Konfigurasi

  1. Kaya’ gini niy yang bikin malez buka Blog-nya sampeyan…
    Ga’ mudeng banget🙂 apalagi klo udah ngomongin Root(akar?) ubuntu (usus buntu saya tau😀 )
    Tapi kliatannya kok intelek banget ya? sangat menguasai di bidangnya gt🙂
    what ever, good luck deeh

  2. @Muadz Abu Muhammad Jibril Z. F:
    Halah…😛
    Guyooon…😆
    Jadi inget ada orang nanya:

    Silly (S): OS di Jardiknas ni apa yach mas?
    Admin (A): Yang mana yach Pak, yang di sisi client ato NOC; klo di client ya da yang Linux, da yg Windows, terserah merekalah.
    S: Owh, [CentOS]… brarti pake Linux yach…
    A: Iyach…
    Silly 2 (S2): Trus…linuxnya apa yah pak???
    A: *Gdubraxxx…*
    Cerita diambil dari sini. Ada beberapa cerita semisal itu di sana.
    Selamat ketawa (dan miris, sekaligus).😕

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s