Menstabilkan Board GESBC-9G20

Ethernet down di Sistem Linux GESBC-9G20

Ethernet down di Sistem Linux GESBC-9G20

Memang akan sangat menyenangkan saat melihat board embedded kita dapat menjalankan sistem Linux. Saat console mengeluarkan prompt, hati bersorak: “Horee!”. Semua aplikasi yang ada di sistem Linux dapat dijalankan dengan sempurna. Tapi, setelah ‘beberapa saat’ (saya tidak tahu pasti, berapa lama), link Ethernet down. Ini berarti semua aplikasi internet akan mati. Padahal itu esensial, Duh. Saya tidak tahu kapan dan bagaimana problem itu muncul. Jadi, sekarang yang perlu dilakukan adalah menstabilkan sistem: membangkitkan error secara repetitif (bilamana itu terjadi), mengisolirnya dan memperbaikinya. Hihihi, mumet dah…. Sampai saat ini saya masih belum menemukan solusinya, mohon kalau ada yang bisa membantu.

Formulasi masalahnya adalah link ethernet seringkali down dengan pesan:

[root@gesbc-ippbx /root]# eth0: link down
nfs: server 167.205.24.118 not responding, still trying
nfs: server 167.205.24.118 not responding, still trying

Kalau beruntung, link akan up dalam waktu yang tidak bisa ditentukan. Board yang digunakan adalah GESBC-9G20 yang menggunakan prosesor Atmel AT91SAM9G20, device driver ethernet controler menggunakan macb, dan ethernet physical menggunakan Davicom DM9161AEP. Root filesystem tersimpan di server NFS Puppy Linux 4.31, jadi sistem menggunakan filesystem NFS yang termouting sebagai root /.

Potensi problem ini adalah:

  1. Lingkungan fisik: kabel ethernet, konektor, jaringan yang bermasalah
  2. NFS server yang bermasalah
  3. Driver ethernet di bootloader u-Boot dan kernel Linux perlu dipatch

Isolasi yang paling mudah adalah di lingkungan fisik. Jaringan disederhanakan. Board GESBC dan server NFS langsung terkoneksi ke satu switch dan berada di sub jaringan yang sama. Problem masih muncul. Saat link down konektor ethernet RJ45 dicabut colok ulang, tapi ini tidak mengatasi masalah, link masih down. Lampu link di port Ethernet mati dan berkedip dengan interval lama. Lingkungan fisik sudah dipastikan bukan merupakan sumber masalah.

Untuk masalah NFS server, tadinya akan mencoba mengganti dengan NFS server lain. Tapi, saya pikir NFS server ada di layer aplikasi, jadi ini akan bukan jadi sumber masalah karena saya ping ke board itupun ia tidak reply.

Usaha terakhir adalah inspect ke driver Linux dan bootloader u-Boot. Kernel Linux dan u-Boot perlu diupdate. Update u-Boot akan menjadi percobaan terakhir (susah je, perlu tahu konfigurasi dan mapping peripheral di board). Yang gampang adalah kernel Linux. Dari log konsole (atau dmesg dari prompt), ditunjukkan bagaimana probing Ethernet devices:

MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (3a:1f:34:08:54:54)
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:00, irq=-1)

Ethernet PHY menggunakan yang Generic PHY, padahal di board menggunakan DM9161A. Kernel harus dikompile ulang dengan CONFIG_DAVICOM_PHY=y. Setelah dikompile, image kernel uImage dapat diload, dan probing ethernet physical ini:

MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (3a:1f:34:08:54:54)
eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=ffffffff:00, irq=-1)

Berikut konfigurasi networknya:

[root@gesbc-ippbx /root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 3A:1F:34:08:54:54  
          inet addr:167.205.24.117  Bcast:167.205.24.127  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5391 errors:1 dropped:0 overruns:0 frame:0
          TX packets:2719 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5162692 (4.9 MiB)  TX bytes:487351 (475.9 KiB)
          Interrupt:21 Base address:0x4000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

[root@gesbc-ippbx /root]# uname -a
Linux gesbc-ippbx 2.6.27 #4 Wed May 26 12:23:59 GMT-7 2010 armv5tejl unknown

Sistem ‘sudah sangat jarang’ down linknya. Tapi, ini menjadikannya tidak reliable. Mungkin saja diperlukan untuk ‘melihat lebih dalam’ source code linux/drivers/net/macb.c dan rangkaian interfacing ethernet di board (menggunakan MII atau RMII). Fungsi di driver yang menangani perubahan status link dari PHY adalah macb_handle_link_change :

static void macb_handle_link_change(struct net_device *dev)
{
	struct macb *bp = netdev_priv(dev);
	struct phy_device *phydev = bp->phy_dev;
	unsigned long flags;

	int status_change = 0;

	spin_lock_irqsave(&bp->lock, flags);

	if (phydev->link) {
		if ((bp->speed != phydev->speed) ||
		    (bp->duplex != phydev->duplex)) {
			u32 reg;

			reg = macb_readl(bp, NCFGR);
			reg &= ~(MACB_BIT(SPD) | MACB_BIT(FD));

			if (phydev->duplex)
				reg |= MACB_BIT(FD);
			if (phydev->speed == SPEED_100)
				reg |= MACB_BIT(SPD);

			macb_writel(bp, NCFGR, reg);

			bp->speed = phydev->speed;
			bp->duplex = phydev->duplex;
			status_change = 1;
		}
	}

	if (phydev->link != bp->link) {
		if (!phydev->link) {
			bp->speed = 0;
			bp->duplex = -1;
		}
		bp->link = phydev->link;

		status_change = 1;
	}

	spin_unlock_irqrestore(&bp->lock, flags);

	if (status_change) {
		if (phydev->link)
			printk(KERN_INFO "%s: link up (%d/%s)\n",
			       dev->name, phydev->speed,
			       DUPLEX_FULL == phydev->duplex ? "Full":"Half");
		else
			printk(KERN_INFO "%s: link down\n", dev->name);
	}
}

Mungkin juga diperlukan profiling paket Ethernetnya. Tools atau utility apa yah yang bisa digunakan?

One Comment to “Menstabilkan Board GESBC-9G20”

  1. wah … bisa down juga yah …. semoga di ubuntu mah enggak bakalan begini:mrgreen: tapi lumayan ada info disini. kalau-kalau …

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: