Linux, Paralel Port ile 2x16 LCD Ekran Kullanımı

Çalıştığım projede linuxta paralel port ile lcd ekran kullanmam gerekti. Neredeyse internetin altını üstüne getirdim ama işime yarar çok birşey bulamadım. Sonunda DOS için yazılmış bir kod buldum. Bu kodu biraz inceleyip, gerekli püf noktaları bulunca kodu linux’a uydurmak çok zor olmadı. Hatta neredeyse sadece kullanılan fonksiyonun adını ve parametre yerlerini değiştirdim :)

Aslında olay çok basitmiş, lcd ekrandan çıkan 14 bacaktan, 8tanesini data ve komut göndermek için kullanıyoruz. 1 bacak enable, 1 set - reset seçimi için, 1 bacakta read/write seçimi için kullanılıyor. Geri kalan 3 bacak güç bağlantısı ve kontrast için kullanılıyor. Burdaki şemaya göre bağlantıları yapabilirsiniz. Ayrıca örnek aldığım kodda aynı sayfada bulunmakta.

Yorum satırları pek çok şeyi açıklıyor. Ama birkaç noktaya değinmekte fayda var. Data bacaklarına gerekli inputları verdikten sonra, enable bacağını 1’den 0’a düşürerek lcd’nin data bacaklarında sinyali alıp işleme sokmasını sağlıyoruz. init array’i içinde lcd’nin temizlenmesi ve çalışmaya uygun hale gelmesi için gerekli komutlar tutuluyor. 0x378 paralel portun adresi.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>

#define PORTADDRESS 0x378  /* Enter Your Port Address Here */

#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2

int main()
{
    if (ioperm(DATA , 3, 1)) {perror("ioperm"); exit(1);}
    char string[] = {"Testing 1,2,3                           "
                     "It' Works !                             "};

    char init[10];
    int count;
    int len;
    init[0] = 0x0F; /* Init Display */
    init[1] = 0x01; /* Clear Display */
    init[2] = 0x38; /* Dual Line / 8 Bits */

    outb(inb(CONTROL) & 0xDF, CONTROL); /* Reset Control Port - Make sure Forward Direction */
    outb(inb(CONTROL) | 0x08, CONTROL); /* Set Select Printer (Register Select) */

    for (count = 0; count < = 2; count++)
    {
        outb(init[count], DATA);
        outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe (Enable)*/
        usleep(20);                                 /* Larger Delay for INIT */
        outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe (Enable)*/
        usleep(20);                                 /* Larger Delay for INIT */
    }

    outb(inb(CONTROL) & 0xF7, CONTROL);  /* Reset Select Printer (Register Select) */

    len = strlen(string);

    for (count = 0; count < len; count++)
    {
        outb(string[count], DATA);
        outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe */
        usleep(2);
        outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe */
        usleep(2);
    }

    return 0;
}

Linke birşey olması durumunda bu adresten gerekli şemayı indirebilirsiniz.


Saçmalayan konsol ekranını temizleme

Bir binary dosyayı cat ile görüntüleyince konsol ekranı sapıtabiliyor :) Böyle bir durumda konsolu adam etmek için

 reset

komutunu kullanabiliriz. Her seferinde komutu unutup neydi neydi diye düşünüyorum. Buraya yazıyorum ki bir daha unutursam hemen bakıp bulayım :)


Emacs ile bul değiştir / find and replace

M-x
replace-string RET aranan_string RET yerine_konulacak_string

Bunu regexli yapmak için replace-string yerine replace-regex kullanabilirsiniz. Birde buna kısayol eklesek tadından yenmez.

.emacs dosyamıza aşağıdaki satırı ekliyoruz.

;; Find and Replace
(global-set-key (kbd "C-q") 'replace-string)

C-q kombinasyonuna bastığımıza işlem başlamış oluyor.


BusyBox - date ile saat ve tarihi ayarlamak

BusyBox içinde gelen date komutunun kullanımı biraz daha farklı. Saat ayarlamada bir değişiklik yok fakat tarihi ayarlamak biraz daha farklı. Saat ayarlama:

date -s "23:59:59"

Tarih ve saati ayarlama

date -s AAGGSSDDYYYY
date -s 123123592010

12-31-2010 23:59’a karşılık geliyor.


Genius!

Scp ile sembolik linkleri takip etmeden indirme işlemi yapmak için araştırma yaptığımda, aşağıdaki kodu buldum. Böyle bir kullanım 40 yıl düşünsem aklıma gelmezdi.

cd /destination/directory
ssh user@remote.host "cd /original/directory; tar cf - ./" | tar xvf -

Kaynak


Pardus ile Eduroam ağına bağlanma

Eduroam Pardusun ağ yöneticisi gayet şık bir arayüze sahip, fakat bize Eduroam ağına bağlanma özelliği sunmuyor.
Ancak Pardus kurulumu ile birlikte gelen 2 araç bizim bu ağa bağlanmamız için yeterli. Bu araçlar wpa_supplicant ve dhcpcd. Wpa_supplicant ağda kimlik denetimini sağlamak için, dhcpcd ise ağdan ip almamız için gerekli.

Öncelikle wpa_supplicant için ayar dosyası oluşturmamız gerekiyor.

network={
        ssid="eduroam"
        key_mgmt=WPA-EAP
        pairwise=TKIP
        group=TKIP
        eap=TTLS
        phase2="auth=PAP"
        anonymous_identity="anonymous@ogr.deu.edu.tr"
        identity="ogrencinumarasi@ogr.deu.edu.tr"
        password="sifre"
}

Bu ayarlar Dokuz Eylül Üniversitesi için. Kendi okulunuza göre düzenlemeniz gerekiyor. Sadece ogr.deu.edu.tr adresi yerine kendi okulunuzun adresini yazmalısınız.

Bu dosyayı /etc/wpa_supplicant.con adıyla kaydediyoruz.

Sıra geldi wpa_supplicantı çalıştırmaya.

wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf

-D parametresi hangi sürücüyü kullanacağımızı belirtiyor. Wpa_supplicantın man dosyalarına bakarak kendinize uygun bir sürücü seçebilirsiniz.
-i hangi arayüzü kullanacağınızı belirtiyor. Genellikle wlan0 dır. iwconfig komutunun çıktısı size kablosuz ağ kartlarını gösterecektir.
-c ile ayar dosyamızın yerini belirtiyoruz.

Eğer bu komut başarılı olursa artık ip alabiliriz.

dhcpcd wlan0

Eğer bu komutta başarılı olduysa artık internete bağlanabilirsiniz hayırlı olsun :)

Bu işlemi kolaylaştırmak için pem adında bi script yazdım.

git clone git://github.com/askin/pem.git

Bu komutla pem’e ulaşabilirsiniz.
Bu aracı daha fazla geliştirecektim fakat ağ yöneticisiyle bu işleri nasıl yapabileceğimi öğrendim. Bugün oturup biraz network-managerın kodlarıyla uğraştım. Sanırım pazartesi günü bu işi ağ yöneticisiyle kolayca yapılabilecek bir hale getirebilirim. Şimdilik en güzel yöntem bu gibi :)

Ayrıca sevgili dostum Mete bu işin wicd kullanarak nasıl yapıldığını daha önce yazmış buradan o yazıya ulaşabilirsiniz.


Pardus 2009

Pardus Sonunda Pardus 2009’u bilgisayarıma kurabildim. Ailemin yanına geldiğim için Pardus’u indiremiyordum. Malum kotalı internet, sıkıntı yaratıyor.
Kurulum sorunsuz tamamlandı. Kurulum arayüzü çok hoş olmuş. Çok kullanışlı ve çok kolay bir arayüzü olmuş. Bilgisayarıma en hızlı kurulabilen Pardus sürümü. Saat tutmadım ama, 20 dakka ile 30 dakka arasında bir sürede kurulduğunu tahmin ediyorum.
Kablosuz ağ kartımı sorunsuz tanıdı ve WPA2 şifreli ağıma çok kolay bir şekilde bağlandı. Daha önce de tanıyordu, fakat ağımı göremiyordu, ben de mecburen ndiswraper ile kullanıyordum. Hiç bir ek program kurmama ve kapalı kodlu windows sürücülerine ihtiyaç duymamak beni gayet mutlu etti. Ve ilk defa wi-fi ledinin yanıp söndüğü gördüm:)
KDE4 gerçekten çok güzel, çok hoş duruyor fakat bana göre değil. Arada açıp gönül eğlendirebilirim ama gnome herzamanki gibi 1 numaralı tercihim. Bu nedenle biraz KDE4 turu yaptıktan sonra hemen gnome’u kurdum. Bu nedenle Burak Çalışkan‘a teşekür ediyorum.
İhtiyaç duyduğum bazı programlar depoda bulunmuyordu. Bu nedenle devel deposundan bazı paketleri derleyip kurdum. Bi kaç program paketlenemedi, onlarda kısa sürede hazır olur diye umuyorum.
Her şeye rağmen güzel bi dağıtım olmuş. Emeği geçen herkese teşekür ediyorum.


Mysql Data Dizinini Değiştirme

Mysql Mysql data dizini ön tanımlı /var/lib/mysql olarak belirlenmiştir. Çeşitli ihtiyaçlardan dolayı bunun yerini değiştirmemiz gerekebilir. Mesela ben ayrı bir bölümde tuttuğum /home dizini altına taşımak istiyorum. Tüm işlemleri root yetkisiyle yapıyoruz. Öncelikle mysql servisini durduralım. Ben pardus kullandığım için

$ service mysql-server stop

Diğer dağıtımlarda farklı olabilir. Ardından ilgili dizini yeni yerine kopyalayalım.

$ cp -a /var/lib/mysql /home

Daha sonra mysql sunucusuna yeni dizinimizi haber verelim. /etc/mysql/my.cnf dosyasında datadir = /var/lib/mysql olan satırı datadir = /home/mysql olarak değiştirelim. Şimdi servisi yeniden başlatabiliriz.

$ service mysql-server start

Eğer düzgün bir şekilde çalışıyorsa /var/lib/mysql dizinini silebiliriz. Ama ismini değiştirip birkaç gün her ihtimale karşı saklamak çok mantıklı.


Pidgin Titreşim Eklentisi - Attention Button

Pidgin Pidginin en sevdiğim özelliklerinden bir tanesi, sohbet ettiğiniz kişi size tireşim gönderdiğinde ekrana sadece "… size uyarı gönderdi" yazması. Bu özelliğer sahip olmasının birde dezavantajı var tabiki, siz de başkalarına titreşim yollayamıyorsunuz. Bugün bu eksikliği fazlasıyla hissedince ufak çaplı bir araştırma yaptım ve Attention Button eklentisiyle karşılaştım.
Kurulumu çok basit. Burdan en güncel sürümünü indiriyorsunuz (şimdilik 0.3), arşivden çıkartıp .so uzantılı dosyayı ev dizininiz altında .purple/plugins/ dizinine kopyalıyorsunuz. Ardından pidgine gidip eklentiler(plugins) kısmından aktif ediyorsunuz.
Konsoldan halletmek isterseniz:

$ wget http://pidgin-attentionbutton.googlecode.com/files/attentionbutton-0.3.tar.gz
$ tar -xvzf attentionbutton-0.3.tar.gz
$ mkdir $HOME/.purple/plugins
$ mv attentionbutton.so $HOME/.purple/plugins/
$ rm attentionbutton-0.3.tar.gz attentionbutton.c 

Bu eklentinin birkaç güzel özelliğide var. Mesela karşı tarafa sınırsız sayıda titreşim yollayabilirsiniz. Ve karşı taraf çevrim dışı bile görünse titretebilirsiniz. Tabi aşırı kullanım sağlığa zararlı :)


Pardus - Atheros AR242x - WPA2

Wi-Fi Pardus 2008 kurulumla beraber Atheros AR242x kablosuz ağ kartını tanıyor, fakat nedense başka ağları görmesine rağmen evimde WPA2 ile kurulu kablosuz ağımı göremiyordu. Bende diğer dağıtımlarda kullandığım ndiswrapper ile sorunumu çözmeyi denedim.
Öncelikle ndiswrapperı kurduktan sonra windows için yazılmış driverları seçmemiz gerekiyor. Ardından
/etc/modules.autoload.d/kernel-2.6
dosyasına
ndiswrapper
satırını ve
/etc/modprobe.d/blacklist-compat
dosyasına da
blacklist ath_pci
satırını eklemek gerekiyor. Bunları ekledikten sonra kde’de ağ programcığıyla bağlanabiliyorsunuz.
Fakat XFCE kullanıyorsanız wicd kullanmanız gerekiyor. Wicd ile doğrudan kullanamıyoruz. Öncelikle birkaç ufak düzenleme yapmak gerekiyor.
Wicd -> Tercihler yolunu takip ettikten sonra WPA Suplicant Sürücüsü: kısmına wext, Kablosuz arabirim kısmına da wlan0 yazmak gerekiyor.
Bu ayarlarla kolaylıkla kullanabilirsiniz, kolay gelsin.