Hasil Uji Kernel 2.6.38.8 dan 3.0.4 di HP Compaq 435

11 Sep 2011

slackware_logo-150x150.pngSetelah masa libur Idul Fitri 1432H berlalu, meminjam istilah si Tukul, kembali ke Linux. Selama dua minggu berselang saya mencoba mengoptimasi kernel Linux 2.6.38.8 dan 3.0.4 di mainan baru HP Compaq 435 dengan spesifikasi sebagai berikut:

00:00.0 Host bridge: Advanced Micro Devices [AMD] Pavilion DM1Z-3000 Host bridge
00:01.0 VGA compatible controller: ATI Technologies Inc Device 9802
00:01.1 Audio device: ATI Technologies Inc Device 1314
00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 42)
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:15.0 PCI bridge: ATI Technologies Inc Device 43a0
00:15.1 PCI bridge: ATI Technologies Inc Device 43a1
00:15.3 PCI bridge: ATI Technologies Inc Device 43a3
00:16.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 0 (rev 43)
00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 3
00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 4
00:18.5 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 6
00:18.6 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 5
00:18.7 Host bridge: Advanced Micro Devices [AMD] Family 12h/14h Processor Function 7
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. Device 5209 (rev 01)
02:00.1 SD Host controller: Realtek Semiconductor Co., Ltd. Device 5209 (rev 01)
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 05)
07:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
Bus 002 Device 002: ID 04f2:b249 Chicony Electronics Co., Ltd 
Bus 004 Device 005: ID 0cf3:3005 Atheros Communications, Inc. 

Notebook ini menggunakan kartu audio HDA ATI SB dengan chipset Realtek ALC270 yang memiliki jalur audio-video HDMI dan audio TRS. Agar dapat digunakan oleh desktop (KDE) secara biasa (mode TRS) saya harus menambahkan opsi seperti ini ke snd-hda-intel, bisa dimasukkan ke /etc/modprobe/sound.conf agar dimuat saat boot:

options snd-hda-intel index=1

Karena antarmuka HDMI dikenali pertama dan antarmuka audio analog ATI SB dikenali sebagai antarmuka kedua. Jadi untuk membalikkan keadaan agar desktop KDE hanya menggunakan ATI SB, kita memaksa kernel untuk mengaktifkan antarmuka kedua sebagai antarmuka pertama (index=1). Bunyilah notebook saya.

Oke lanjut ke kernelnya. Pada dasarnya konfigurasi kernel yang saya lakukan untuk kedua versi tersebut adalah sama, yaitu menggunakan basis config-generic-smp-2.6.38.7-smp (slackware-current).

# cd /usr/src/linux-2.6.38.8
# cat ${PATH}/config-generic-smp-2.6.38.7-smp > .config
# make oldconfig
# make bzImage
# make modules
# make modules_install
# cp arch/x86/boot/bzImage /boot/vmlinuz-generic-smp-2.6.38.8-smp
# depmod -a 2.6.38.8-smp
# cd /boot
# mkinitrd -c -k 2.6.38.8-smp -m ext4 -f ext4 -r /dev/sda1 -o initrd-2.6.38.8-smp -L
(saya tambah 'opsi -L' soalnya saya menggunakan LVM2 untuk partisi selain / (ROOT))
edit lilo dan
# lilo -v

Hampir tidak ada perubahan kecuali beberapa driver yang tidak saya butuhkan untuk menjalankan komputer-komputer yang saya gunakan (mis. driver SATA, tipe partisi) saya keluarkan dari vmlinuz untuk mengurangi ukurannya. Tetapi karena ukuran driver ext4 cukup besar (sekitar 400kB), maka saya tetap menggunakan initrd untuk memuat driver ext4 saat boot. Perbedaan antara kernel 2.6 dan 3.x adalah pada driver RTC (Real Time Clock). Di kernel 3.x driver RTC harus dimuat oleh kernel sesegera mungkin karena akan digunakan untuk mengkalibrasi clock CPU, utamanya yang menggunakan multi CPU (SMP). Jadi sebenarnya pilihannya ya kalau menggunakan SMP, driver RTC harus masuk ke vmlinuz itu saja. cheeky

Tetapi sekali lagi HP ACPI berulah dengan kernel 3.0.4. Jadi begini, kode AML (ACPI Machine Language) yang digunakan di notebook ternyata membutuhkan dua buffer untuk mengaktifkan beberapa fitur pengontrol perangkat nirkabel yang ada. Nah, kernel hanya menyediakan satu buffer saja setelah kode AML dimuat ke kernel sehingga inisiasi buffer kedua oleh AML dianggap ilegal oleh kernel dan proses pemuatan kode ACPI untuk pengontrol perangkat nirkabel akhirnya tidak jadi dimuat oleh kernel dan ujung2nya fitur kontrol perangkat nirkabel menjadi tidak dapat digunakan di kernel 3.0.4 meskipun perangkat2nya jelas2 terlihat oleh kernel dan program2 user (mis. rfkill).

Sampai saat ini masih belum ada titik terang untuk mengatasi hal ini. Dan karena kasus ini juga terjadi di FreeBSD 8.x maka banyak pengembang2 opensource yang menyatakan bahwa kode inisiasi pemuatan AML di kernel sudah benar, yang keliru adalah kode AML itu sendiri. Salah sendiri kenapa memutuskan menggunakan dua buffer berbeda untuk memuat kode ACPI-nya. Notebook HP Compaq saya yang lain (berbasis Intel) juga tidak mengalami gangguan yang sama dan fitur nirkabel dapat berjalan normal. Jadi saya yakin bahwa yang keliru adalah kode AML dari BIOS yang digunakan. Tidak ada yang bisa saya lakukan. Masa saya harus ganti laptop lagi? Belum ada 3 bulan pakai laptop ini... sad

Atas dasar itu, maka saya memutuskan untuk menghentikan sementara penggunaan kernel 3.0.4 dan menggunakan kernel 2.6.38.8 di keseharian saya. Toh konfigurasi generic dari kernel 2.6.38.7-smp milik Slackware sudah dapat mengaktifkan semua fitur notebook ini. Perihal saya menggunakan compat-wireless adalah karena saya ingin menggunakan driver perangkat nirkabel (wifi dan bluetooth) secara lebih optimal karena patch perbaikan dan optimasi akan masuk ke compat-wireless terlebih dahulu sebelum digabung ke kode kernel oleh Linus di waktu yang akan datang.

Sementara ini dulu, jikalau berkenan dengan isi tulisan saya, silakan dicoba sendiri :D.