Panduan udev Gentoo
1.
Apa itu udev?
Direktori /dev
Ketika para pengguna Linux berbicara tentang hardware pada sistem mereka di
antara orang-orang yang percaya bahwa Linux adalah semacam virus atau merek
kopi, penggunaan "garis miring dev garis miring anu" tentunya akan menimbulkan
kebingungan. Tetapi bagi pengguna yang beruntung (termasuk anda), penggunaan
/dev/hda1 adalah cara singkat untuk menjelaskan bahwa kita sedang
berbicara tentang partisi pertama pada master primari IDE. Iya kan?
Kita semua tahu apa itu file device. Sebagian dari kita bahkan tahu mengapa
file device memiliki nomor khusus ketika kita melihat lebih dekat lagi pada
waktu kita menjalankan ls -l di dalam direktori /dev.
Namun apa yang selalu kita yakini adalah bahwa disk IDE master disebut
/dev/hda. Anda mungkin tidak memahaminya seperti itu, tetapi
ini merupakan salah satu cacat pada desain.
Pikirkanlah tentang perangkat dengan kemampuan hotplug seperti USB, IEEE1394,
PCI hot-swap,... Apa device pertamanya? Dan untuk berapa lama? Nama apa yang
akan diberikan untuk perangkat lain ketika perangkat yang sebelumnya hilang?
Apa pengaruhnya terhadap transaksi yang sedang berlangsung? Tidakkah lucu
jika tugas pencetakan tiba-tiba dipindahkan dari printer laser anda ke printer
jangkrik karena ibu anda telah mencabut kebel printer laser yang tadinya
terbaca sebagai printer pertama?
Temui udev. Tujuan-tujuan proyek udev sangat menarik dan diperlukan:
- Berjalan di userspace
- Menciptakan/menghapus file device secara dinamis
- Menyediakan penamaan yang konsisten
- Menyediakan sebuah API userspace
Untuk menyediakan fitur-fitur ini, udev dikembangkan di tiga proyek terpisah:
namedev, libsysfs dan, tentunya, udev.
namedev
Dengan namedev, anda dapat menentukan penamaan device terpisah dari program
udev. Anda dapat menggunakan aturan dan skema penamaan yang fleksibel yang
dikembangkan secara terpisah. Subsistem penamaan device ini menyediakan sebuah
antarmuka standar yang dapat digunakan oleh udev.
Untuk saat ini baru ada satu skema penamaan yang disediakan oleh namdev; skema
yang disediakan oleh LANANA, digunakan oleh kebanyakan sistem Linux saat ini
dan karenanya sangat cocok untuk hampir semua pengguna Linux.
namedev menggunakan prosedur 5 langkah untuk menemukan nama sebuah
perangkat. Jika nama perangkat ditemukan di salah satu langkah-langkah tersebut,
maka nama itu akan digunakan. Langkah-langkahnya adalah:
- label atau nomor serial
- nomor perangkat bus
- topologi bus
- nama statis yang telah ditentukan
- nama dari kernel
Langkah label atau nomor serial memeriksa apakah perangkat memiliki
pengenal khusus. Sebagai contoh, perangkat-perangkat USB memiliki sebuah
nomor serial khusus; perangkat SCSI memiliki UUID khusus. Jika namedev
menemukan kecocokan antara nomor khusus ini dan file konfigurasi, maka nama
yang ditentukan pada file konfigurasi akan digunakan.
Langkah nomor perangkat bus memeriksa nomor bus perangkat. Untuk
lingkungan non-hot-swappable, prosedur ini cocok untuk mengenali sebuah
perangkat. Sebagai contoh, nomor bus PCI jarang sekali berubah selama sistem
menyala. Lagi-lagi, jika namedev menemukan kecocokan antara posisi ini dan file
file konfigurasi, maka nama yang ditentukan pada file konfigurasi akan
digunakan.
Topologi bus adalah cara yang agak statis untuk mendefinisikan perangkat
selama user tidak menukar perangkat. Ketika posisi perangkat cocok dengan
setting yang diberikan, maka nama tersebut akan digunakan.
Langkah keempat, nama statis yang telah ditentukan, hanyalah merupakan
string pengganti. Ketika nama kernel (nama default) cocok dengan string
tersebut, nama pengganti itu akan digunakan.
Langkah terakhir (nama dari kernel) adalah langkah pamungkas: langkah
ini mengambil nama default yang disediakan oleh kernel. Pada kebanyakan kasus,
langkah ini baik digunakan karena cocok dengan penamaan perangkat yang saat
ini digunakan oleh sistem-sistem Linux.
libsysfs
udev berinteraksi dengan kernel melewati filsystem palsu sysfs. Proyek
libsysfs menyediakan sebuah API umum untuk mengakses informasi yang diberikan
oleh filesystem sysfs dengan cara biasa. Dengan begini, anda dapat menampilkan
daftar semua hardware yang ada tanpa perlu memperkirakan jenisnya.
udev
Setiap kali kernel menemukan update pada struktur perangkat, udev akan
diperintahkan untuk memeriksanya. udev mengikuti aturan-aturan yang tercantum
di direktori /etc/udev/rules.d/, kemudian menggunakan informasi
yang didapatkan dari kernel untuk menjalankan tugas yang diperlukan di
/dev (menciptakan atau menghapus file device).
2.
Menggunakan udev di Gentoo
Kebutuhan
udev ditujukan untuk digunakan dengan kombinasi kernel 2.6 (seperti
vanilla-sources atau gentoo-sources dengan profile default
2007.0). Jika anda menggunakan kernel ini, maka anda hanya perlu memastikan
bahwa anda menggunakan sys-apps/baselayout versi terbaru. Itu saja
yang anda butuhkan.
Daftar Kode 2.1: Instalasi udev |
# emerge udev
|
Dari sisi kernel, aktfikan opsi-opsi berikut:
Daftar Kode 2.2: Opsi-opsi kernel yang diperlukan |
General setup --->
[*] Support for hot-pluggable devices
File systems --->
Pseudo filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
|
Anda boleh membiarkan /dev file system support (OBSOLETE) aktif jika
anda suka, tetapi anda harus menonaktifkan "Automatically mount at boot":
Daftar Kode 2.3: Jangan mount otomatis devfsd |
File systems --->
Pseudo Filesystems --->
[*] /dev file system support (OBSOLETE)
[ ] Automatically mount at boot
|
Jika anda menggunakan genkernel, jangan lupa untuk menjalankannya dengan
opsi --udev untuk mengaktifkan semua opsi-opsi konfigurasi kernel yang
diperlukan. Konfigurasi default yang diberikan oleh perintah genkernel
sudah cukup.
Konfigurasi
Jika anda ingin menggunakan udev yang telah di-tweak oleh Gentoo agar hidup
anda lebih mudah, maka cukup sampai di sini. Gentoo menggunakan udev tetapi
menjaga /dev statis agar anda tidak pernah kehilangan node device.
Skrip init Gentoo tidak akan menjalankan daemon devfsd dan akan menonaktifkan
devfsd ketika boot.
Tetapi jika anda suka tantangan dan hanya ingin menjalankan udev saja, tanpa
sistem yang telah di-tweak seperti yang diinginkan oleh pengembangan udev
(termasuk masalah kehilangan node device karena udev belum mendukungnya),
silakan lanjut :)
Kita akan menonaktifkan aturan-aturan yang menyimpan node file device: edit
variabel RC_DEVICE_TARBALL di /etc/conf.d/rc lalu set ke
no:
Daftar Kode 2.4: /etc/conf.d/rc |
RC_DEVICE_TARBALL="no"
|
Jika anda telah memasukkan dukungan devfsd di kernel, anda dapat
menonaktifkannya di konfigurasi bootloader: tambahkan gentoo=nodevfs
sebagai parameter kernel. Jika anda ingin menggunakan devfs dan menonaktifkan
udev, tambahkan gentoo=noudev sebagai parameter kernel.
3.
Masslah-masalah yang telah diketahui
Kehilangan file node device ketika boot
Jika anda tidak dapat boot dengan sukses karena anda mendapatkan pesan error
tentang /dev/null yang tidak ditemukan, atau karena konsol dasar
tidak ditemukan, penyebabnya adalah, anda tidak memiliki beberapa file device
yang harus tersedia sebelum /dev di-mount dan ditangani
oleh udev. Hal ini biasa terjadi pada sistem Gentoo yang diinstal dari CD lama.
Jika anda memiliki sys-apps/baselayout-1.8.12 atau yang lebih baru,
masalah ini sudah menjadi lebih ringan karena proses boot masih dapat
dilanjutkan. Bagaimanapun juga, untuk menghilangkan pesan-pesan yang
mengganggu itu, anda perlu menciptakan node device seperti yang dijelaskan
di bawah ini.
Untuk mengetahui node device apa saja yang sudah ada sebelum filesystem
/dev di-mount, jalankan perintah-perintah berikut:
Daftar Kode 3.1: Menampilkan daftar node device yang tersedia ketika boot |
# mkdir test
# mount --bind / test
# cd test/dev
# ls
|
File-file device yang diperlukan agar boot sukses adalah
/dev/null dan /dev/console. Jika device-device ini
tidak ada pada daftar tadi, anda perlu menciptakannya sendiri. Jalankan
perintah-perintah berikut di dalam direktori test/dev/:
Daftar Kode 3.2: Menciptakan file-file node device yang diperlukan |
# mknod -m 660 console c 5 1
# mknod -m 660 null c 1 3
|
Ketika anda selesai, jangan lupa untuk meng-unmount direktori test/:
Daftar Kode 3.3: Unmount direktori test/ |
# cd ../..
# umount test
# rmdir test
|
udev dan nvidia
Jika anda menggunakan driver proprietari dari nVidia dan server X gagal pada
sistem yang hanya menggunakan udev, pastikan agar anda telah memiliki:
-
modul nvidia di
/etc/modules.autoload.d/kernel-2.6
-
versi baselayout yang sama atau lebih tinggi dari
sys-apps/baselayout-1.8.12
Tidak adanya Penamaan yang Konsisten antara DevFS dan udev
Walaupun tujuan kita adalah memiliki skema penamaan yang konsisten antara
kedua solusi manajemen device dinamis, terkadang, perbedaan pada penamaan
terjadi.
Salah satu perselisihan yang dilaporkan terjadi pada controller HP Smart Array
5i RAID (lebih tepatnya modul kernel cciss). Dengan udev,
perangkat-perangkat ini dinamakan /dev/cciss/cXdYpZ dengan X, Y
dan Z adalah nomor-nomor biasa. Dengan devfs, perangkat-perangkat ini dinamakan
/dev/hostX/targetY/partZ atau dijadikan symlink dari
/dev/cciss/cXdY.
Jika ini kasusnya, jangan lupa untuk meng-update /etc/fstab dan
konfigurasi bootloader anda.
Hal yang sama terjadi dengan symlink-symlink yang biasanya ada di
/dev, seperti /dev/mouse, yang tidak lagi diciptakan
oleh udev. Pastikan untuk memeriksa kembali file konfigurasi X anda
dan lihat apakah aturan Device untuk mouse anda menunjuk ke file device
yang tersedia.
Masalah lainnya adalah perbedaan pada penamaan terminal antara devfs dan udev.
Jika devfs menamakan terminalnya dengan tty, udev menamakannya
vc dan tty. Hal ini bisa mengakibatkan masalah jika anda mencegah
login root dari konsol dengan menggunakan /etc/securetty. Anda
perlu memastikan tty1 dan vc/1 tersedia di
/etc/securetty agar root dapat login menggunakan konsol.
Penamaan kembali Device
Versi terbaru dari udev (104 dan yang lebih baru) dan kernel baru (2.6.19 dan
yang lebih baru) mungkin merubah nama-nama device anda, karena adanya perubahan
pada implementasi libata di kernel. Perangkat CD-RW di
/dev/hdc mungkin telah diganti menjadi /dev/sr0.
Walaupun hal ini biasanya tidak menjadi masalah yang berarti, beberapa aplikasi
mungkin dibuat dengan aturan untuk mencari perangkat yang diperlukan di lokasi
lain. Misalnya, media-sound/rip akan mencari perangkat disk di
/dev/cdrom, yang akan menjadi masalah jika anda menggunakan kernel
baru dan udev menamakan device anda dengan /dev/cdrom1.
Untuk mengatasinya, anda harus mengedit
/etc/udev/rules.d/70-persistent-cd.rules dan mencantumkan nama
yang sesuai untuk perangkat anda.
Untuk mendapatkan informasi lebih lanjut tentang cara menulis aturan udev,
bacalah panduan dari
Daniel Drake.
udev memuat modul dengan urutan yang tidak menentu
Terkadang udev memuat modul dengan urutan yang tidak menentu dan tidak kita
inginkan. Hal ini biasanya terjadi pada sistem yang memiliki beberapa perangkat
yang memiliki tipe yang sama, begitu juga dengan perangkat-perangkat
multimedia, sehingga dapat mengubah nomor-nomor yang telah diberikan kepada
perangkat-perangkat tersebut. Misalnya, kartu suara biasanya sering berganti
nomor
Ada beberapa solusi yang dapat kita gunakan untuk memperbaiki penomoran
perangkat dan/atau mengurutkan pemuatan modul. Idealnya, anda cukup menggunakan
parameter modul untuk menentukan nomor perangkat yang anda inginkan. Beberapa
modul, seperti ALSA, memiliki parameter "index". Modul-modul yang menggunakan
parameter index dapat kita atur seperti berikut. Contoh ini diambil dari sistem
yang memiliki dua kartu suara. Kartu suara yang memiliki nomor index 0 akan
menjadi kartu suara pertama. Ketika parameter telah diganti, file-file
konfigurasi modul harus kita perbarui.
Daftar Kode 3.4: Menentukan parameter modul |
# echo "option snd-ice1724 index=0" >> /etc/modules.d/alsa
# echo "option snd-ymfpci index=1" >> /etc/modules.d/alsa
# update-modules
|
Contoh di atas adalah solusi yang dianjurkan. Namun, tidak semua modul
mendukung penggunaan parameter index. Untuk modul-modul seperti ini, anda harus
memaksakan urutan pemuatan modul. Pertama, anda harus mencegah udev agar tidak
memuat modul-modul tersebut secara otomatis dengan cara memasukkannya ke dalam
daftar hitam. Pastikan untuk menggunakan nama yang benar untuk modul yang
dimuat. Untuk perangkat PCI, anda harus menggunakan nama modul yang anda
dapatkan dari output pcimodules, yang disediakan oleh paket
pciutils. Contoh berikut ini menggunakan modul-modul DVB.
Daftar Kode 3.5: Mem-blacklist modul |
# echo "blacklist b2c2-flexcop-pci" >> /etc/modules.d/dvb
# echo "blacklist budget" >> /etc/modules.d/dvb
# update-modules
|
Selanjutnya, muat modul-modul dengan urutan yang benar. Tambahkan modul-modul
tersebut ke /etc/modules.autoload.d/kernel-2.6 dengan urutan
yang anda inginkan.
Daftar Kode 3.6: Memuat modul dengan urutan yang tepat |
# echo "budget" >> /etc/modules.autoload.d/kernel-2.6
# echo "b2c2-flexcop-pci" >> /etc/modules.autoload.d/kernel-2.6
|
Masalah-masalah lain
Jika node device tidak diciptakan ketika sebuah modul di-load dari
/etc/modules.autoload.d/kernel-2.6 tetapi diciptakan ketika
anda me-load modul tersebut secara manual dengan modprobe, maka anda
perlu mencoba untuk meng-upgrade ke sys-apps/baselayout-1.8.12 atau
yang lebih baru.
Dukungan untuk perangkat framebuffer (/dev/fb/*) disediakan oleh
kernel mulai dari versi 2.6.6-rc2.
Untuk kernel yang lebih tua dari 2.6.4, anda perlu memberikan dukungan untuk
filesystem /dev/pts.
Daftar Kode 3.7: Mengaktifkan opsi filesystem /dev/pts |
File systems --->
Pseudo filesystems --->
[*] /dev/pts file system for Unix98 PTYs
|
4.
Sumber-sumber & Ucapan Terima Kasih
Pidato tentang udev di Linux Symposium (Ottawa, Ontario Canada - 2003) oleh
Greg Kroah-Hartman (IBM Corporation) memberikan pemahaman yang solid tentang
aplikasi udev.
Decibel's
UDEV Primer adalah dokumen mendalam tentang udev dan Gentoo.
Menulis aturan-aturan
udev oleh pengembang Gentoo Daniel Drake merupakan dokumen yang sangat
bagus untuk mempelajari cara mengkustomisasi instalasi udev anda.
Isi dokumen ini dilisensikan dengan lisensi Creative Commons -
Attribution / Share Alike.
|