Archive for ‘Kernel & Device Driver’

Mei 6, 2010

Memanfaatkan ARM_Thumb?

Sebenarnya sudah lama saya tahu tentang arm thumb ini sejak 4tahunan lalu saat bermain-main dengan single board TS-7200 yang menggunakan prosesor berbasis ARM920T dari Cirrus EP9302. Tapi, belum pernah mencobanya.

Thumb ini adalah fitur ekstensi dari prosesor ARM untuk bisa mengeksekusi instruksi 16-bit dari suatu program biner. Prosesor arm dengan nomor seri ditambahi ‘T’ akan mempunyai fitur ini, mulai dari ARM720t sampai generasi ARM1026 dan ARM feroceron. Program user yang dikompile dengan fitur thumb ini tentu akan memiliki ukuran biner yang lebih kecil, sehingga bisa disimpan ke storage yang berukuran kecil (misalnya flash NOR 4MB atau SPI flash 2MB). Dan tentu saja, ini akan menghemat memori jika program ini diload ke memori. Mmm, mungkin bisa dimanfaatkan nih…

Dan saya ingin mencobanya.

read more »

Iklan
Juni 15, 2009

Modem CDMA Venus VT-11 di Linux

Modem CDMA Venus VT-11 di vanilla Linux tidak akan dikenali. Tidak ada kernel modul yang bisa mendeteksi modem ini. Dengan dmesg dan lsusb saat modem dicolokkan menghasilkan keluaran berikut:

=== dmesg output, driver tidak diattach ke device node apa pun
--snip
usb 2-1: new full speed USB device using uhci_hcd and address 3
usb 2-1: configuration #1 chosen from 1 choice
--snip
=== lsusb output
Bus 005 Device 003: ID 04f2:b026
Bus 005 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0001
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 006: ID 6971:7492 --- Ini vendorID dan deviceID modem vt-11
Bus 002 Device 001: ID 1d6b:0001
Bus 001 Device 004: ID 046d:c019
Bus 001 Device 001: ID 1d6b:0001

Tidak ada device driver (modul kernel) di vanilla Linux yang mengklaim usb device modem vt11 dengan vendorID:deviceID 6971:7492. Berikut sedikit hack di Linux agar kernel bisa mengenali modem ini.

read more »

Juni 8, 2009

Open Kernel Labs OK:Android ~ EDA Blog

Open Kernel Labs (OK Labs) telah merilis OK:Android, sebuah platform smartphone Android paravirtualized yang memungkinkan Android digunakan sebagai guest OS yang berjalan di platform virtualisasi mobile phone OKL4 microvisor. Hal ini membantu manufaktur handset (OEM) untuk mengembangkan desain device dan aplikasi baru berbasis Android dengan menggunakan embedded virtualization. Kombinasi OK:Android dan OKL4 akan menambah level sekuriti dan robustness ke OS smartphone Android Google dan Open Handset Alliance (OHA). Ketersediaan platform dan Info selengkapnya dapat ditemui di Open Kernel Labs website.

Sumber berita: Open Kernel Labs OK:Android ~ EDA Blog.dar

Tag: , ,
Desember 24, 2008

Watchdog Timer: Membuat Sistem Tetap ON

Jika kita punya satu sistem yang remote (misalnya server embedded berbasis Linux), tentunya kita berharap sistem tersebut dapat menjalankan fungsinya dengan baik secara terus menerus. Tapi bagaimana jika sistem mengalami kegagalan yang berakibat fatal (hang) yang disebabkan misalnya oleh harddisk crash, error memori atau lainnya? Jika kondisi ini terjadi, sistem pasti tidak akan dapat berfungsi sama sekali (dan termasuk network), dan satu-satunya jalan adalah dengan meresetnya. Tapi sistem kan ada di remote? Masak kita harus datang ke lokasi remote dan memencet tombol reset untuk mereboot sistem? Watchdog timer dapat mengatasi problem ini.

Watchdog Timer (WDT) merupakan hardware (atau emulasi hardware) yang dapat mereset sistem secara otomatis jika terjadi software fault. Terdapat 2 jenis watchdog yang di support oleh kernel driver: hardware dan software watchdog (softdog). Hardware watchdog dimiliki salah satunya oleh board yang menggunakan prosesor EP93XX, misalnya board Technologic System TS72XX, sehingga watchdog inilah yang akan digunakan, karena board inilah yang kami miliki.

flow watchdog

flow watchdog

Untuk mengaktifkan watchdog diperlukan daemon userspace yang akan membuka node device /dev/watchdog dan memberitahu driver watchdog kernel secara berkala bahwa userspace/sistem masih hidup, dan driver ini selanjutnya akan memberitahu hardware watchdog bahwa sistem OK dan watchdog harus menunggu notifikasi berikutnya dalam timeout yang telah ditentukan. Jika userspace gagal (misalnya RAM error, kernel bug, atau lainnya), notifikasi tidak terkirim, dan watchdog akan mereset sistem (reboot) setelah lewat timeout.

Mengaktifkan Watchdog

Langkah-langkah yang perlu dilakukan untuk mengaktifkan watchdog di Linux:

read more »

September 5, 2008

Power Management di Linux

Saya saat ini sedang coba mendesain sistem Linux dengan trade-off performansi versus power requirement, yaitu bagaimana sistem bisa menjalankan aplikasi dan servicenya dengan kebutuhan daya serendah mungkin. Linux sendiri mempunyai modul power management untuk mengatur daya yang akan digunakan oleh proses dan peripheral dalam suatu sistem. Hal yang dilakukan adalah dengan mencoba mengkonfigurasi kernel. Board yang akan digunakan sebagai platform sistem Linux tersebut adalah berbasis prosesor ARM.

Terdapat 2 power management yang bisa digunakan, yaitu 1) APM (Advanced Power Management) dan terbaru 2) ACPI (Advanced Configuration and Power Interface). ACPI sekarang lebih banyak digunakan, karena memungkinkan OS mengontrol langsung power management policy, dibandingkan APM yang membutuhkan APM BIOS untuk mengontrol CPU.

Dengan googling ketemu guide power management menggunakan ACPI di Gentoo. Lengkap juga referensinya.

Saat mencoba konfigurasi kernel, ketemu masalah, ACPInya kok tidak ada?. Konfigurator di kernel 2.6.21 mensyaratkan arsitektur yang bisa ACPI adalah prosesor CISC: IA64 dan X86, sedangkan arsitektur RISC seperti ARM, MIPS tidak didukung ACPI. Hehehe, apakah hal ini karena prosesor RISC sudah low power consumption, jadi tidak diperlukan ACPI lagi. Ini dia referensinya.

Selidik punya selidik akhirnya ketemu. Kernel akan menggunakan CONFIG_SYS_SUPPORTS_APM_EMULATION (bios-less APM driver for ARM Linux) jika ARCH yang dipilih ARM. Jadi power management yang digunakan mungkin APM dan membutuhkan user daemon untuk mengontrolnya, yaitu apmd. Tapi bagaimana cara menggunakannya, belum ngerti. Mungkin frekuensi scaling, idle suspend atau yang lainnya.

Coba cari-cari lagi ketemu DPM (Dynamic Power Management) , yaitu power management untuk embedded system. Papernya ada di sini. Nanti lagi aja ah, diexplore.

Bacaan:
Dynamic power management techniques for multimedia processors

September 4, 2008

Explore MaverickCrunch

Penasaran juga tentang fitur kode MaverickCrunch yang ditawarkan oleh SoC EP93xx dari Cirrus Logic yang ada di board TS-7200. Fitur ini akan mempercepat eksekusi operasi-operasi floating point (misalnya multimedia decoder), dibandingkan dengan softfloat (atau emulasi FPU) yang biasanya digunakan di sistem embedded. Bagaimana cara mengimplementasikan MaverickCrunch ini di Linux?

Tentang MaverickCrunch

MaverickCrunch adalah core math coprosesor untuk floating point dari Cirrus Logic, yang saat ini diimplementasikan bersama core ARM920T di SoC EP9302, EP9307, EP9312 dan EP9315.

EP93xx mempunyai set instruksi sendiri yang mengimplementasikan 32- dan 64-bit integer dan IEEE-754 untuk operasi addition, subtraction, multiplication, negation, absolute value dan comparison, fungsi-fungsi multiply-and-accumulate, konversi antara integer dan floaing. Di MaverickCrunch terdapat 16 register 64-bit, 4 register multiply-and-accumulate 72-bit dan sebuah register status.

Perbaikan toolchain untuk mensupport MaverickCrunch

read more »

September 3, 2008

Linux IO Scheduller

Hari ini melakukan konfigurasi kernel lagi. Beberapa catatan saat konfigurasi dibuat. Yang menarik adalah tentang Linux IO Scheduler. Bagaimana memilih scheduler yang cocok untuk kebutuhan sistem Linux kita. IO scheduler ini akan mengefisienkan akses ke storage disk, misalnya harddisk.

Tanpa I/O scheduller ini, kernel akan langsung mengirimkan tiap request ke disk ketika ia menerimanya. Hal ini dapat menimbulkan Harddisk trashing, yaitu jika satu proses sedang membaca suatu bagian dari disk, dan proses lain menulis ke bagian lain, maka head dari disk harus seek back dan bolak-balik untuk setiap operasi. Fungsi utama dari scheduler ini adalah untuk mengoptimasi waktu akses disk.

Teknik yang digunakan oleh I/O scheduler ini untuk meningkatkan performansinya adalah:

  • Request merging
    Scheduler ini akan menggabungkan request-request yang berdekatan untk mengurangi disk seeking
  • Elevator
    Scheduler ini akan mengurutkan request berdasarkan lokasi fisiknya di block device, dan akan berusaha untuk seek dalam satu arah sebanyak mungkin
  • Prioritisation
    Scheduler ini mempunyai kontrol yang lengkap dalam memberikan prioritas terhadap request

Di Linux 2.6 tersedia 4 pilihan scheduler: yaitu 1) No-op: request merging, 2) Anticipatory I/O atau AS : request merging, one-way elevator, read and write request batching dan berusaha untuk mengantisipasi pembacaan dengan menunggu setelah read batch jika menganggap user akan meminta data lagi serta optimisasi physical disk dengan menghindari perpindahan head jika mungkin, 3) Deadline: request merging, one-way elevator, dan memberikan deadline ke semua operasi dan 4) CFQ (Complete Fair Queueing): request merging, elevator, dan memberikan semua user sejumlah request IO dengan jumlah sama. Masing-masing mempunyai kelebihan dan kekurangannya masing-masing di sistem tertentu. Misalnya, di apache web server anticipatory scheduller lebih efisien, di sistem database lebih baik menggunakan deadline, sedangkan sistem desktop dengan multiuser sebaiknya menggunakan CFQ seperti yang ada di ubuntu, dll

Biasanya scheduler ini terinstall di kernel, bisa juga sebagai modul. Saat runtime pertama kali (loading kernel), scheduler yang digunakan dapat dipilih dengan memasukkan opsi kernel “elevator”, yang dapat diset “as”, “cfq”, “deadline” atau “noop” untuk menggunakan scheduler yang diinginkan.

Referensinya ada di sini.