Tampilkan postingan dengan label linux. Tampilkan semua postingan
Tampilkan postingan dengan label linux. Tampilkan semua postingan

5.7.11

Memprogram hardware dengan python?

Python tampaknya telah terinstal secara default pada sistem operasi GNU/Linux. Jadi, mengapa tidak diupayakan akses hardware dengan python?

Kelebihan dan kekurangan jika menggunakan python untuk akses hardware:
1. tidak perlu instal kompiler atau interpreter. Begitu OS terintal, program siap dijalankan.
2. python adalah interpreter, jadi relatif lebih lambat daripada program yang ditulis dalam bahasa C.
3. dukungan library untuk python sangat besar, nyaris semua hal bisa dikerjakan dengan mudah.

18.11.08

Akses Memori PCI

(bagian akhir dari 7 artikel - ke artikel utama)

Untuk mengakses memori PCI milik sebuah devais, harus digunakan beberapa fungsi umum dan tidak disarankan untuk mengakses alamat memori secara langsung. Berbagai hardware mempunyai cara berbeda saat mengakses bus PCI. Jika digunakan fungsi umum, maka driver PCI yang dibuat akan dapat dijalankan di berbagai sistem linux (sehingga menjadi portabel)

Untuk membaca data dari bus PCI digunakan fungsi-fungsi berikut ini:


int pci_read_config_byte (struct pci_dev * dev , int where , u8 * val );
int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);

sedangkan untuk menuliskan data digunakan fungsi-fungsi ini:
int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);

Fungsi-fungsi di atas memungkinkan penulisan data berukuran 8, 16 atau 32 bit ke lokasi tertentu yang ditempat devais PCI. Jika diinginkan mengakses lokasi memori suatu devais PCI yang belum diinisialisasi oleh inti Linux PCI, maka dapat digunakan fungsi-fungsi berikut ini (yang terdapat dalam kode inti pci_hotplug:


int pci_read_config_byte_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u8 *val);
int pci_read_config_word_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u16 *val);
int pci_read_config_dword_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u32 *val);
int pci_write_config_byte_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u8 val);
int pci_write_config_word_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u16 val);
int pci_write_config_dword_nodev(struct pci_ops *ops, u8 bus, u8 device, u8 function, int where, u32 val);

Contoh cara membaca dan menulis memori PCI yang dilakukan melalui driver dapat dilihat pada driver USB OHCI driver pada berkas drivers/usb/host/usb-ohci.c:


pci_read_config_byte(dev, PCI_LATENCY_TIMER, &latency);
if (latency) {
pci_read_config_byte(dev, PCI_MAX_LAT, &limit);
if (limit && limit < latency) {
dbg("PCI latency reduced to max %d", limit);
pci_write_config_byte(dev, PCI_LATENCY_TIMER, limit);
ohci->pci_latency = limit;
} else {
/* it might already have been reduced */
ohci->pci_latency = latency;
}
}

14.11.08

Akses Memori I/O

(bagian 6 dari 7 artikel - ke artikel utama)

Tidak seperti sistem embedded umumnya, mengakses memori I/O di linux tak dapat dilakukan secara langsung. Sebabnya karena Linux mempunyai tipe dan peta memori yang sangat beragam dan Linux dirancang untuk jalan di beragam prosesor. Untuk mengakses memori I/O secara portabel, harus digunakan fungsi ioremap() untuk meminta jatah akses dan fungsi iounmap() untuk melepas jatah akses.

ioremap() didefinisikan sebagai berikut:

void __iomem *ioremap(unsigned long offset, unsigned long size);

Saat memanggil fungsi dua parameter dipassing. Pertama adalah offset awal dari region memori yang akan diakses dan kedua adalah ukuran region dalam byte. Hasil pemanggilan fungsi tidak dapat digunakan sebagai lokasi memori untuk ditulis baca secara langsung. Hasil pemanggilan fungsi itu merupakan token yang harus dipassing ke berbagai fungsi untuk membaca dan menulis data.

Berikut ini adalah fungsi-fungsi yang digunakan untuk membaca dan menulis data menggunakan memori yang teladh dipetakan oleh ioremap():

unsigned char  readb(const volatile void __iomem *addr);  /* read 8 bits */
unsigned short readw(const volatile void __iomem *addr); /* read 16 bits */
unsigned int readl(const volatile void __iomem *addr); /* read 32 bits */
void writeb (unsigned char value, volatile void __iomem *addr); /* write 8 bits */
void writew (unsigned short value, volatile void __iomem *addr); /* write 16 bits */
void writel (unsigned int value, volatile void __iomem *addr); /* write 32 bits */

Setelah memori selesai diakses, fungsi iounmap() harus dipanggil agar yang lain dapat mengakses alamat memori I/O tersebut.

13.9.08

Penataan Posisi Data

(bagian 5 dari 7 artikel - ke artikel utama)

Kompailer gcc menata setiap field (ruas) dari struktur data ke lokasi memori yang dianggapnya akan mempercepat eksekusi program. Sebagai contoh perhatikan program berikut beserta outputnya:
#include <stdio.h>
#include <stddef.h>

struct foo {
char a;
short b;
int c;
};

#define OFFSET_A offsetof(struct foo, a)
#define OFFSET_B offsetof(struct foo, b)
#define OFFSET_C offsetof(struct foo, c)

int main()
{
printf ("offset A = %d\n",OFFSET_A);
printf ("offset B = %d\n",OFFSET_B);
printf ("offset C = %d\n",OFFSET_C);
return 0;
}
Output program ini adalah:
offset A = 0
offset B = 2
offset C = 4
Output program menunjukkan bahwa kompailer menata ruas variabel b dan c pada struktur foo pada alamat memori genap. Ini tidak baik JIKA kita ingin menuliskan satu per satu data pada struktur itu ke SATU alamat memori. Biasanya struktur data sebuah driver mempunyai lokasi byte berurutan. Oleh karena itu atribut gcc ((packed)) digunakan untuk meminta kompailer agar tidak membuat "lubang memori" dalam struktur data. (Perhatikan bahwa A berukuran satu byte, tapi B terletak di offset ke-2 sehingga offset ke-1 kosong dan tidak digunakan).

Jika struktur foo diubah menggunakan atribut packed:
struct foo {
char a;
short b;
int c;
} __attribute__((packed));
Maka output program akan menjadi sebagai berikut:
offset A = 0
offset B = 1
offset C = 3
Sekarang tidak ada lagi lubang memori di dalam struktur (offset ke-1 ditempati variabel b).

Atribut packed dapat digunakan terhadap seluruh struktur, seperti contoh di atas, atau digunakan terhadap ruas tertentu.

Sebagai contoh, struktur usb_ctrlrequest pada include/usb.h didefinisikan sebagai berikut:
struct usb_ctrlrequest {
__u8 bRequestType;
__u8 bRequest;
__le16 wValue;
__le16 wIndex;
__le16 wLength;
} __attribute__ ((packed));
untuk memastikan seluruh struktur tidak mempunyai lubang memori, sehingga datanya dapat langsung ditulis ke port USB.

Namun struktur usb_endpoint_descriptor didefinisikan seperti berikut ini:
struct usb_endpoint_descriptor {
__u8 bLength __attribute__ ((packed));
__u8 bDescriptorType __attribute__ ((packed));
__u8 bEndpointAddress __attribute__ ((packed));
__u8 bmAttributes __attribute__ ((packed));
__le16 wMaxPacketSize __attribute__ ((packed));
__u8 bInterval __attribute__ ((packed));
__u8 bRefresh __attribute__ ((packed));
__u8 bSynchAddress __attribute__ ((packed));
unsigned char *extra ; /* Extra descriptors */
int extralen;
};
agar bagian awal struktur tidak mempunyai lubang memori sehingga dapat digunakan langsung untuk meletakkan data yang dibaca dari USB, tapi ruas extra dan extralen dibiarkan untuk ditata oleh kompailer agar akses data oleh program menjadi lebih cepat.

26.8.08

Masalah Endian

(bagian 4 dari 7 artikel - ke artikel utama - ke bagian 5)

Processors store internal data in one of two ways: little-endian or big-endian. Little-endian processors store data with the right-most bytes (those with a higher address value) being the most significant, while big-endian processors store data with the left-most bytes (those with a lower address value) being the most significant.

For example, the table below shows how the decimal value 684686 is stored in a 4-byte integer on the two different processor types (684686 decimal = a728e hex = 00000000 00001010 01110010 10001110 binary)

AddressBig-EndianLittle-Endian
00000000010001110
1 0000101001110010
20111001000001010
31000111000000000

The Intel i386 family are little-endian machines, whereas the SPARC and 68k processors are big-endian. The Alpha, IA-64 and PowerPC processors can be run in either little- or big-endian mode; for Linux the Alpha and IA-64 are typically run in little-endian mode and the PowerPC is run in big-endian mode. The ARM processor can be either, depending on the specific ARM chip being used, the original ARMs were little-endian but for devices designed for network processing they are usually big-endian.

Because of the different endian types of processors, you need to be aware of data you receive from external sources and the order in which it appears. For example, the USB specification dictates that all multibyte data fields are in little-endian form. So if you have a USB driver that reads a multibyte field from the USB connection, you need to convert that data into the processor's native format. Code that assumes the processor is little-endian could ignore the data format coming from the USB connection successfully. But this same code would not work on PowerPC and is the leading cause of drivers that are broken on different platforms. Conversely most networking data is defined in terms of big endian data structures.

Thankfully, there are a number of helpful macros that have been created to make this an easy task. All of the following macros can be found in the asm/byteorder.h header file.

To convert from the processor's native format into little-endian form you can use the following functions:

__le64 cpu_to_le64(u64);
__le32 cpu_to_le32(u32);
__le16 cpu_to_le16(u16);

To convert from little-endian format into the processor's native format you should use these functions:

u64 le64_to_cpu(__le64);
u32 le32_to_cpu(__le32);
u16 le16_to_cpu(__le16);

For big-endian forms, the following functions are available:

__be64 cpu_to_be64(u64);
__be32 cpu_to_be32(u32);
__be16 cpu_to_be16(u16);
u64 be64_to_cpu(__be64);
u32 be32_to_cpu(__be32);
u16 be16_to_cpu(__be16);

If you have a pointer to the value to convert, then you should use the following functions:

__le64 cpu_to_le64p(u64 *);
__le32 cpu_to_le32p(u32 *);
__le16 cpu_to_le16p(u16 *);
u64 le64_to_cpup(__le64 *);
u32 le32_to_cpup(__le32 *);
u16 le16_to_cpup(__le16 *);
__be64 cpu_to_be64p(u64 *);
__be32 cpu_to_be32p(u32 *);
__be16 cpu_to_be16p(u16 *);
u64 be64_to_cpup(__be64 *);
u32 be32_to_cpup(__be32 *);
u16 be16_to_cpup(__be16 *);

If you want to convert the value within a variable and store the modified value in the same variable (in situ), then you should use the following functions:

void cpu_to_le64s(u64 *);
void cpu_to_le32s(u32 *);
void cpu_to_le16s(u16 *);
void le64_to_cpus(u64 *);
void le32_to_cpus(u32 *);
void le16_to_cpus(u16 *);
void cpu_to_be64s(u64 *);
void cpu_to_be32s(u32 *);
void cpu_to_be16s(u16 *);
void be64_to_cpus(u64 *);
void be32_to_cpus(u32 *);
void be16_to_cpus(u16 *);

As stated before, the USB protocol is in little-endian format. The code snippet from drivers/usb/serial/visor.c below shows how a structure is read from the USB connection and then converted into the proper CPU format.

struct visor_connection_info *connection_info;
/* send a get connection info request */
usb_control_msg(serial->dev,
usb_rcvctrlpipe(serial->dev, 0),
VISOR_GET_CONNECTION_INFORMATION,
0xc2, 0x0000, 0x0000,
transfer_buffer, 0x12, 300);
connection_info = (struct visor_connection_info *)transfer_buffer;
num_ports = le16_to_cpu(connection_info->num_ports);

24.8.08

Satu Laptop untuk Tiap Siswa di Niue

Program Satu Laptop Per Anak (One Laptop Per Child - OLPC) berhasil dilaksanakan 100% di Niue, sebuah negara kecil di kepulauan Pasifik. Setiap siswa mendapat satu laptop.

Sejumlah 500 laptop sudah dibagikan minggu lalu kepada siswa sekolah dasar dan menengah. Sebanyak 4500 lagi sudah disiapkan untuk negeri lain di wilayah Pasifik itu.

Laptop yang kokoh dan tahan air ini dirancang sebagai perangkat murah bagi anak-anak di negara berkembang untuk mengakses komputer dan internet.

Peristiwa ini bukan yang pertama bagi Niue untuk menjadi yang terdepan dalam hal penerapan teknologi. Pada tahun 2003, Niue menjadi negeri pertama yang menyediakan internet wireless gratis bagi seluruh penduduknya.

Di samping untuk menelusur web secara wireless, laptop ini dapat digunakan berkomunikasi di antara para siswa dalam radius satu kilometer tanpa harus online.

Direktur Jendral Sekretariat Masyarakat Pasifik, Jimmie Rodgers sebagaimana dikutip AFP menyatakan bahwa laptop tersebut "mempunyai potensi untuk membuat revolusi yang luar biasa di bidang pendidikan".

Berawal dari pengembangan oleh Laboratorium Media milik Massachusetts Institute of Technology, proyek laptop murah ini tumbuh dan mendapat dukungan dari perusahaan-perusahaan besar seperti Google.

Berita disadur dari: BBC

16.8.08

Masalah memori

(bagian 3 dari 7 artikel - ke artikel utama - ke bagian 4)

Seperti dijelaskan di Tipe data kernel internal dari contoh yang diambil dari berkas drivers/char/serial.c, program dapat meminta alokasi halaman memori ke kernel. Ukuran halaman memori tidak selalu 4KB (seperti pada arsitektur i386). Karena itu, untuk merujuk suatu halaman memori, harus digunakan parameter PAGE_SHIFT dan PAGE_SIZE.

PAGE_SHIFT adalah banyaknya pergeseran bit ke kiri (bit shift left) agar diperoleh nilai PAGE_SIZE. Arsitektur yang berbeda mempunyai nilai parameter yang berbeda, seperti yang ditampilkan pada tabel di bawah ini.

ArsitekturPAGE_SHIFTPAGE_SIZE
i386124K
MIPS124K
Alpha138K
m68k124K
m68k138K
ARM124K
ARM1416K
ARM1532K
IA-64124K
IA-64138K
IA-641416K
IA-641664K

Bahkan terdapat arsitektur yang mempunyai ukuran halaman yang bervariasi. Perbedaan ini bisa disebabkan perbedaan opsi (seperti pada IA-64) atau perbedaan varian prosesor (seperti pada ARM). Potongan program drivers/usb/class/audio.c di bawah ini memperlihatkan bagaimana kedua parameter: PAGE_SHIFT dan PAGE_SIZE digunakan untuk akses memori:
static int dmabuf_mmap(...)
{
size >>= PAGE_SHIFT;
for(nr = 0; nr < size; nr++)
if (!db->sgbuf[nr])
return -EINVAL;
db->mapped = 1;
for (nr = 0; nr < size; nr++) {
unsigned long pfn;

pfn = virt_to_phys(db->sgbuf[nr]) >> PAGE_SHIFT;
if (remap_pfn_range(vma, start, pfn, PAGE_SIZE, prot))
return -EAGAIN;
start += PAGE_SIZE;
}
return 0;
}

14.8.08

Mengenal uClinux

Ini adalah "distro" Linux yang spesial. uClinux (dibaca: yu-si-linux) adalah singkatan dari MicroController Linux. Huruf pertama sebenarnya bukan huruf latin u, melainkan huruf yunani μ (myu) yang biasa dijadikan singkatan imbuhan micro dalam microprosesor atau microcontroller.

Distro ini spesial karena tidak mempunyai komponen kernel MMU (memory management unit). Sedikit tentang komponen ini bisa dibaca di Sekilas kernel Linux. Distro ini pertama kali dibuat oleh D. Jeff Dionne dan Kenneth Albanowski di tahun 1998. Awal mulanya ditargetkan untuk jalan di prosesor Motorola DragonBall menggunakan kernel Linux 2.0.33.

Pada dasarnya uClinux hanyalah kernel, bukan distro. Namun telah ditambahkan beberapa kode di wilayah user, misalnya library C standar dan mini sh untuk shell sehingga uClinux boleh disebut distro. Distro ini banyak dipakai pada sistem embedded.

Pengembangan terus dilakukan dengan mengadopsi kernel yang lebih baru seperti versi 2.4 hingga 2.6. Banyak program bantu (tools) dikembangkan untuk mendukung penggunaan Linux di mikrokontroler. Banyak arsitektur didukung. Aplikasi uClinux bervariasi dari router jaringan, kamera sekuriti, DVD atau MP3 player, VoIP gateway, scanner dan card reader.

Arsitektur yang didukung oleh uClinux antara lain:

  • Altera NIOS
  • ADI Blackfin
  • ARM
  • ETRAX
  • Freescale M68K (termasuk DragonBall, ColdFire, PowerQUICC dan lain-lain)
  • Fujitsu FRV
  • Hitachi H8
  • Intel i960
  • MIPS
  • Xilinx MicroBlaze
(dirangkum dari: Wikipedia)

13.8.08

Tipe data kernel internal

(bagian 2 dari 7 artikel - ke artikel utama - bagian 3)

Ketika membuat program yang portabel, perlu diperhatikan benar jumlah byte dari variabel yang digunakan di dalam program. Berbagai prosesor mempunyai jumlah byte berbeda untuk tipe data int dan long. Ada juga perbedaan cara menentukan apakah variabel signed atau unsigned. Jadi kalau program yang dibuat harus menggunakan jumlah bit tertentu, dan harus tegas signed atau unsigned, maka Anda harus menggunakan tipe data yang sudah built-in. Typedefs berikut ini dapat dipakai di sembarang tempat dalam program kernel dan didefinisikan dalam berkas header linux/types.h.

 u8    unsigned byte (8 bit)
u16 unsigned word (16 bit)
u32 unsigned 32-bit
u64 unsigned 64-bit

s8 signed byte (8 bit)
s16 signed word (16 bit)
s32 signed 32-bit
s64 signed 64-bit

Sebagai contoh, driver i2c mempunyai beberapa fungsi yang digunakan untuk mengirim dan menerima data melalui bus i2c:

s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value);
s32 i2c_smbus_read_byte_data(struct i2c_client *client,
u8 command);

s32 i2c_smbus_write_byte_data(struct i2c_client *client,
u8 command, u8 value);

Semua fungsi di atas mempunyai output nilai 32 bit signed dan mempunyai input nilai 8 bit unsigned untuk semua parameternya. Dengan menggunakan tipe data seperti ini, program di atas portabel untuk semua prosesor.

Jika ingin agar variabel dapat diakses melalui program di wilayah user (user-space), maka harus digunakan tipe data exportabel di bawah ini. Contoh tipe data ini terdapat dalam struktur data yang di-passing saat memanggil perintah ioctl(). Tipe data ini didefinisikan di berkas header linux/types.h.

__u8   unsigned byte (8 bit)
__u16 unsigned word (16 bit)
__u32 unsigned 32-bit
__u64 unsigned 64-bit

__s8 signed byte (8 bit)
__s16 signed word (16 bit)
__s32 signed 32-bit
__s64 signed 64-bit

Sebagai contoh, berkas header usbdevice_fs.h mempunyai beberapa struktur data untuk digunakan berkomunikasi dengan piranti USB (USB device) melalui program di wilayah user (user space). Berikut adalah definisi ioctl yang digunakan mengirim pesan kontrol USB ke piranti:

struct usbdevfs_ctrltransfer {
__u8 requesttype;
__u8 request;
__u16 value;
__u16 index;
__u16 length;
__u32 timeout; /* in milliseconds */
void *data;
};
#define USBDEVFS_CONTROL_IOWR('U', 0,
# struct usbdevfs_ctrltransfer)

Pada mesin 64-bit, ada satu hal yang sering menimbulkan problem yaitu bahwa jumlah byte pointer tidak sama dengan jumlah byte unsigned integer. Jumlah byte pointer sama dengan unsigned long seperti terlihat pada get_zeroed_page():

extern unsigned long FASTCALL
(get_zeroed_page(unsigned int gfp_mask))

Fungsi get_zeroed_page() membuat halaman memori kosong (free memory) yang isinya sudah dinolkan semua. Fungsi ini mempunyai output unsigned long yang harus diubah (typecast) ke tipe data lain yang sesuai. Potongan program drivers/char/serial.c dalam fungsi rs_open() berikut ini memperlihatkan caranya (catatan: kode ini dari kernel 2.4.x).

static unsigned char *tmp_buf;
unsigned long page;

if (!tmp_buf) {
page = get_zeroed_page(GFP_KERNEL);
if (!page)
return -ENOMEM;
if (tmp_buf)
free_page(page);
else
tmp_buf = (unsigned char *)page;
}
Terdapat beberapa tipe data kernel yang dapat digunakan sebagai pengganti tipe data unsigned long, misalnya pid_t, key_t, gid_t, size_t, ssize_t, ptrdiff_t, time_t, clock_t, dan caddr_t. Gunakan tipe data ini untuk menghindari permasalahan portabilitas.

9.8.08

Membuat driver yang portabel

(bagian 1 dari 7 artikel - ke bagian 2)

Hampir semua driver Linux dapat berjalan di semua jenis prosesor. Agar bisa seperti itu, driver harus ditulis mengikuti aturan tertentu, termasuk misalnya menggunakan tipe variabel tertentu, tidak berasumsi tentang ukuran halaman memori, dan mengakses alamat device menggunakan interface tertentu. Secara rinci aturan-aturan itu adalah sebagai berikut.

Jika aturan-aturan ini ditaati, maka program yang dihasilkan akan bisa berjalan di semua prosesor. Aturan inipun sebaiknya diperhatikan ketika mendebug driver yang hanya jalan di satu platform.

Untuk membuat driver portabel, perlu dipelajari kode-kode kernel dan driver yang sudah diketahui bisa jalan di berbagai platform. Hal ini bisa dilakukan karena Linux bersifat open source (kode terbuka) sehingga siapapun bisa mempelajari kode sumber yang ada.

(disadur dari: Writing Portable Drivers)

17.7.08

Kernel Linux 2.6.26 untuk embedded system

Kernel baru sudah keluar. Proses pembuatan memakan waktu tiga bulan. Linux 2.6.26 memiliki beberapa fitur: read only bind mount, KVM port untuk sistem komputer "besar", support USB webcam, WiFi 802.11s mesh, built-in support untuk debug kernel secara remot, dan perbaikan dukungan arsitektur embedded.

Peluncuran kernel terbaru ini diumumkan oleh Linus Torvalds hari Minggu 13 Juli 2008. Kernel stabil ini mempunyai kode sumber sebesar 330MB dikompresi bzip2 menjadi 48.3MB. Bagi developer sistem embedded terdapat perbaikan dukungan untuk chip dan board tertentu, ditambah fitur menarik "yang luar biasa", misalnya built-in support untuk debug kernel secara remot (remote debugging) menggunakan KGDB.



Opsi Kernel Hacking pada make menuconfig


Seperti biasa, Kernel Newbies telah menampilkan detil fitur kernel baru ini di sini. Hal-hal menarik bagi para developer sistem embedded adalah:
  • Built-in support untuk debug jarak jauh menggunakan KGDB
  • Port KVM untuk Itanium (IA64), S390, dan PowerPC 440, plus banyak fitur KVM baru misalnya task switching perangkat keras x86
  • USB Video Class driver untuk dukungan webcam yang lebih baik.
  • Perbaikan pada 802.11n, support jaringan mesh 802.11s menggunakan Open80211s
  • Read only bind mount (apa sih ini?)
  • Perbaikan dokumentasi untuk opsi penjadwalan real-time
  • Perbaikan dukungan EXT4 (masih "eksperimental")
Kernel baru juga memperbaiki dukungan terhadap beberapa arsitektur khusus, termasuk di antaranya:
  • Dukungan nyata untuk:
  • Frequency scaling, NO_HZ pada Blackfin
  • Kernel preemption pada ColdFire
  • Banyak driver baru maupun perbaikan driver yang ada
  • Dukungan awal Radeon r500
  • Driver untuk PXA3xx audio dan NAND controller
  • Fitur manajemen daya untuk Asus EEE PC (kontrol kipas hwmon, backlight)
  • Dukungan flash pada Atmel AT25DF641 SPI
  • Hardware ECC controller pada Atmel AT91SAM9263 dan AT91SAM9260
Versi terbaru kernel dapat diketahui dengan menjalankan perintah di konsol/terminal GNU/Linux: finger linux at kernel.org, atau finger linux@kernel.org. Kernel 2.6.26 dapat diunduh melalui ftp di sini (berkas sig di sini) dan di sini change log.

Sumber asli: LinuxDevices.com

7.7.08

Contoh penelitian sistem embedded pada robotika

Sebuah robot dikendalikan secara remot. Robot mempunyai "mata", yang dilengkapi subsistem untuk menghindari rintangan. Pada kondisi awal, operator yang menggerakkan robot sampai berada pada posisi tertentu. Operator dapat mengendalikan robot menggunakan tombol-tombol sederhana dan apa yang terekam di kamera robot tampil di monitor video di depan operator. Setelah robot berada pada posisi yang dikehendaki operator, fungsi semi-otonom menjadi aktif untuk mengidentifikasi dan mencabut rumput. Fungsi semi-otonom mempunyai algoritma pengambilan keputusan atau yang semacamnya untuk menentukan posisi rumput dalam area yang terekam di kamera.

Fokus utama penelitian adalah pengembangan sistem itu sendiri dan pengendalian gerak robot secara remot. Perangkat terdiri atas sistem embedded, jaringan, pemrograman jaringan dan elektronika. Robot terdiri atas sensor, rangkaian kemudi motor dan mesin lainnya. Sistem seperti ini merupakan salah satu bentuk awal robot pelayanan personal yang menjadi target ilmuwan dalam menciptakan robot yang "otonom". Pengembangan lebih lanjut adalah mesin yang mampu belajar dalam kondisi yang tidak menentu (uncertain).

Secara ideal, sejumlah akselerometer perlu ditempatkan pada chassis untuk mendeteksi getaran saat robot dijalankan. Getaran ini dikirim ke operator bersama dengan gambar video. Dengan demikian, operator bisa merasakan getaran pada konsol kendali di hadapannya. Video, sinyal kendali dan umpan balik dikirim menggunakan protokol internet (TCP/IP) wireless 802.11. Otak robot berada di atas platform embedded linux, jadi berbagai algoritma (harus) dikembangkan dengan bahasa C.

Untuk memungkinkan pengembangan sistem oleh berbagai pihak, perangkat lunak yang bisa saja dibuat opensource.

3.7.08

Sepuluh tips memakai Linux secara aman

Linux sebenarnya mempunyai faktor keamanan yang jauh lebih baik dari yang lain. Untuk memperoleh keamanan maksimal, sebenarnya tidak terlalu sulit. Tips berikut ini merupakan hal-hal sederhana yang mungkin tidak terpikir sebelumnya.

1. Sebelum meninggalkan komputer, lakukan screen lock atau log out

Kadang orang lupa atau tidak sadar bahwa Linux merupakan sistem multi-user. Jika anda akan meninggalkan komputer dalam waktu lama, anda bisa logout sehingga orang lain bisa login dan menggunakan komputer tersebut secara aman, artinya data dan pekerjaan anda tidak terusik. Tapi jika anda hanya pergi sebentar dan akan kembali bekerja dengan program yang sama, kunci layar agar anda bisa bekerja lagi dengan kondisi komputer seperti ketika anda meninggalkannya.

2. Buat berkas anda menjadi "hidden"

Dalam dunia Linux, berkas dan direktori akan tersembunyi (hidden) dengan menambah tanda "." sebelum nama berkas. Misalnya, berkas 'coba' dapat tampil pada browser, tapi berka '.coba' tidak tampil. Tidak banyak yang tahu bahwa menggunakan perintah 'ls -a' akan menyebabkan semua berkas ditampilkan. Mengganti nama berkas supaya hidden sangatlah mudah. Contoh: 'mv coba .coba'.

3. Gunakan password yang "kuat"

Password adalah kunci emas. Jika anda memberitahukan password, atau menggunakan password yang lemah (=mudah ditebak), kunci emas tadi bisa jatuh ke tangan siapa saja termasuk orang jahat. Kalau anda memakai distro semacam Ubuntu, kunci emas tadi bisa digunakan membuka lebih banyak pintu di banding kalau anda menggunakan distro semacam Fedora. Jadi gunakan password yang kuat (=sulit ditebak orang lain).

4. Hindari aplikasi "file sharing"

Aplikasi file sharing memungkinkan semua orang: anda, teman di kantor, pengacara anda, polisi, atau penjahat di luar kantor untuk mengakses data anda. Jadi harus berhati-hati, dan jika tidak diperlukan tidak usah diinstal.

5. Update komputer secara teratur

Update security sangat penting. Update aplikasi jika anda juga perlu.

6. Menginstal anti virus ada baiknya juga

Memang kemungkinan Linux terkena virus sangatlah kecil. Tapi email yang diforward ke komputer Windows bisa mendatangkan masalah.

7. SE Linux

SE Linux adalah paket aplikasi dengan faktor keamanan yang diperkuat. SE Linux dibuat oleh Badan Keamanan Nasional Amerika Serikat. Jika anda menginstal Fedora, ada opsi untuk menggunakan paket SE Linux.

8. Membuat direktori /home pada partisi sendiri

Kebanyakan instalasi standar linux meletakkan direktori /home di direktori root. Tapi anda bisa setting agar /home diinstal pada partisi tersendiri. Atau jika anda bisa memigrasikan /home dari root ke partisi tersendiri. Meletakkan /home pada partisi terpisah mempunyai keuntungan bahwa anda bisa upgrade sistem anda tanpa mengusik data, atau seandainya sistem karena suatu hal rusak, maka data anda akan selamat.

9. Menggunakan desktop yang tidak standar

Gunakan desktop alternatif: Enlightenment, Blackbox, Fluxbox, dll. Tampaknya aneh. Tapi dengan cara ini orang lain yang tidak terbiasa tidak akan bisa berbuat banyak. Tentu saja cara ini manjur jika anda tahu apa yang anda lakukan.

10. Menyetop service

PC anda bukan server kan? Jadi tidak perlu menjalankan service seperti httpd, ftpd dan sshd.

India membagikan 100.000 laptop linux untuk sekolah

Apa yang dilakukan oleh pemerintah India berikut ini patut jadi contoh.

Negara bagian Tamil Nadu di India berencana membagikan 100.000 laptop Linux untuk para siswa sekolah di sana. Pemerintah negara bagian ini memutuskan menggunakan Linux secara eksklusif setelah kecewa dengan taktik Microsoft menjual dalam bentuk bundel.
Tamil Nadu merupakan satu dari 28 negara bagian di India dan terletak di daerah paling selatan, di mana terdapat pusat teknologi Chennai (dahulu "Madras").

Adalah perusahaan milik pemerintah lokal bernama ELCOT (
Electronics Corporation of Tamil Nadu) yang mendapat proyek pengadaan laptop tersebut. ELCOT akan membeli 100.000 laptop dan menjual ke siswa dengan harga harga USD 500 - 600, harga yang cukup murah. ELCOT memberi dua syarat pada laptop yang akan dibeli. Syarat pertama: tidak rusak diinjak seseorang dengan berat badan 80 kg. Syarat kedua, dan ini tentu saja mudah :), harus mensupport Linux secara penuh.

Menurut pihak ELCOT, mereka menolak tawaran Microsoft untuk menggunakan Windows dalam bentuk bundel lengkap dengan anti virus dan Office meskipun sudah mendapat "diskon akademik" seharga $57. ELCOT hanya bersedia membayar $12 untuk sistem operasinya saja sembari mengatakan, "penjualan dalam bentuk bundel mengeksploitasi konsumen."

Pada tahun 2001, Jaksa Agung semasa pemerintah Clinton mendakwa Microsoft melanggar UU anti monopoli Amerika Serikat karena membundel Windows 98 dengan Internet Explorer. Pada waktu itu sempat diupayakan agar software itu dipecah menjadi beberapa unit, seperti Windows, Office, Internet Explorer, dll. Namun, saat pergantian pemerintahan ke Bush, negosiasi Microsoft berhasil memperlunak sikap kejaksaan.

Dalam websitenya ELCOT menyatakan, "ELCOT sudah menjual lebih dari 2000 PC dan laptop yang diinstal SUSE Linux dan Ubuntu selama dua tahun belakangan ini dan kedua OS itu lebih superior dibanding OS lain, termasuk OS dari Microsoft."

Lebih jauh tentang berita ini: ELCOT's student laptop

26.8.06

Mengapa lebih baik Linux

Ada berbagai alasan mengapa sebaiknya menggunakan Linux, dan bukan sistem operasi berlisensi.
  1. Bebas virus. Ah apa betul? Sebetulnya Linux juga ada virusnya, tapi tidak banyak dan belum ada yang ganas. Mengapa demikian? Ada tiga alasan. Pertama karena pemakai Windows jauh lebih banyak. Betul, tapi tidak sepenuhnya. Buktinya Apache lebih banyak digunakan dibanding Microsoft IIS, tapi ternyata IIS lebih sering kena serangan virus. Kedua karena Linux punya sistem otorisasi yang bagus, di mana tidak setiap program bisa mengacak-acak berkas sistem. Ketiga karena Linux bersifat Open Source, banyak mata yang mengawasi jadi kekurangan sistem lebih cepat diketahui dan kemudian diperbaiki.
  2. Linux lebih stabil. Tentu saja tidak ada sistem operasi yang sempurna, tapi terbukti Linux dapat terus berjalan di komputer selama beberapa tahun tanpa restart. Ini benar terjadi pada berbagai server Linux. Jangan katakan hal yang sama anda alami dengan Windows, karena jika ada sedikit update saja, anda sudah diminta untuk restart komputer.
  3. Tidak ada virus, trojan, adware, spyware.
  4. Gratis, eh lebih tepatnya sangat murah. Jika anda menggunakan Windows untuk keperluan perkantoran, maka anda harus membeli lisensi Windows, Anti Virus dan Office. Total harga bisa lebih dari $300, hmm atau ada versi student yang lebih murah tapi dengan fitur yang sudah dipangkas. Jika menggunakan Linux, anda hanya perlu beli keping CD $1 - 2, atau kalau anda tidak mau repot anda bisa minta orang lain menginstalkan untuk anda dan biayanya.... $10 sudah cukup. Dengan biaya itu anda sudah dapat OS, Office, Image editor, dan berbagai software standar lainnya.
  5. Merdeka! Jika anda cukup pandai di bidang pemrograman, anda dapat mengutak-atik OS anda secara bebas. Bahkan mengembangkan sendiri menurut selera anda. Microsoft melarang anda melakukan hal seperti ini dengan Windows (baca EULA-nya).
  6. Sekali instal semua program tersedia, ya, semua program standar. Sekali klik semua program bisa diupdate. Bandingkan, setelah menginstal Windows, anda harus menginstal anti virus, instal Office, dan lain-lain. Setiap program punya cara update sendiri: Windows, Anti virus, Adobe Reader, Java... .
  7. Halal dan legal. Mengapa menggunakan software bajakan padahal anda bisa menggunakan software legal dan gratis. Jika anda orang yang menjunjung moral, memanfaatkan barang bajakan pastilah bukan hal yang direstui secara moral agama.
  8. Menghemat devisa negara. Microsoft adalah perusahaan Amerika. Setengah dari harga lisensi akan lari ke negara tersebut.
  9. dan lain-lain.... lebih lengkap lihat di: Mengapa Linux Lebih Baik