diff --git a/openwrt/package/Config.in b/openwrt/package/Config.in
index 934c759a1b5933e3b39432510c45c9a0f0991c1d..c606055560b9a7625b4481e65059aeeee332e219 100644
--- a/openwrt/package/Config.in
+++ b/openwrt/package/Config.in
@@ -222,6 +222,7 @@ source "package/setpwc/Config.in"
 comment "Serial communications & terminal emulation"
 source "package/microcom/Config.in"
 source "package/picocom/Config.in"
+source "package/serdisplib/Config.in"
 source "package/setserial/Config.in"
 
 comment "Utilities"
diff --git a/openwrt/package/Makefile b/openwrt/package/Makefile
index 7203d9f94fd79bd2ca3126c7f5c678d8e1e94598..7168c3f557dbd4dc0182e067910626b48d598505 100644
--- a/openwrt/package/Makefile
+++ b/openwrt/package/Makefile
@@ -177,6 +177,7 @@ package-$(BR2_PACKAGE_SCDP) += scdp
 package-$(BR2_PACKAGE_SCREEN) += screen
 package-$(BR2_PACKAGE_SDK) += sdk
 package-$(BR2_PACKAGE_SER) += ser
+package-$(BR2_PACKAGE_SERDISPLIB) += serdisplib
 package-$(BR2_PACKAGE_SETPWC) += setpwc
 package-$(BR2_PACKAGE_SETSERIAL) += setserial
 package-$(BR2_PACKAGE_SHAT) += shat
diff --git a/openwrt/package/serdisplib/Config.in b/openwrt/package/serdisplib/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..3fb41b37f5bba00f551b6ec41ed54e63585df28d
--- /dev/null
+++ b/openwrt/package/serdisplib/Config.in
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_SERDISPLIB
+	tristate "serdisplib........................ a library for controlling displays"
+	default m if CONFIG_DEVEL
+	help
+		serdisplib is a library to drive serial and parallel displays with built-in controllers.
diff --git a/openwrt/package/serdisplib/Makefile b/openwrt/package/serdisplib/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..2c16775f91cc5a6843f44d5c5387bdc109447c9f
--- /dev/null
+++ b/openwrt/package/serdisplib/Makefile
@@ -0,0 +1,55 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=serdisplib
+PKG_VERSION:=1.96
+PKG_RELEASE:=1
+PKG_MD5SUM:=b074e02d8d63f34cba8ec45c23f63f78
+
+PKG_SOURCE_URL:=http://dl.sourceforge.net/sourceforge/serdisplib
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_CAT:=zcat
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,SERDISPLIB,serdisplib,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured: $(PKG_BUILD_DIR)/.prepared
+	(cd $(PKG_BUILD_DIR); \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \
+		LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \
+		./configure \
+			--target=$(GNU_TARGET_NAME) \
+			--host=$(GNU_TARGET_NAME) \
+			--build=$(GNU_HOST_NAME) \
+			--prefix=/usr \
+			--without-libiconv-prefix \
+			--without-libintl-prefix \
+			--disable-nls \
+	);
+	touch $@
+
+$(PKG_BUILD_DIR)/.built:
+	rm -rf $(PKG_INSTALL_DIR)
+	mkdir -p $(PKG_INSTALL_DIR)/usr/bin
+	mkdir -p $(PKG_INSTALL_DIR)/usr/lib
+	$(MAKE) -C $(PKG_BUILD_DIR)/src \
+		prefix="$(PKG_INSTALL_DIR)/usr"
+	cp -fpR $(PKG_BUILD_DIR)/src/testserdisp $(PKG_INSTALL_DIR)/usr/bin
+	cp -fpR $(PKG_BUILD_DIR)/lib/libserdisp.so* $(PKG_INSTALL_DIR)/usr/lib
+	touch $@
+
+$(IPKG_SERDISPLIB):
+	install -d -m0755 $(IDIR_SERDISPLIB)/usr/bin
+	cp -fpR $(PKG_INSTALL_DIR)/usr/bin/testserdisp $(IDIR_SERDISPLIB)/usr/bin
+	install -d -m0755 $(IDIR_SERDISPLIB)/usr/lib
+	cp -fpR $(PKG_INSTALL_DIR)/usr/lib/libserdisp.so* $(IDIR_SERDISPLIB)/usr/lib
+	$(RSTRIP) $(IDIR_SERDISPLIB)
+	$(IPKG_BUILD) $(IDIR_SERDISPLIB) $(PACKAGE_DIR)
+
+mostlyclean:
+	make -C $(PKG_BUILD_DIR) clean
+	rm $(PKG_BUILD_DIR)/.built
diff --git a/openwrt/package/serdisplib/ipkg/serdisplib.control b/openwrt/package/serdisplib/ipkg/serdisplib.control
new file mode 100644
index 0000000000000000000000000000000000000000..3fcddcc70aa418c0d2eaae1bdcea048043465f81
--- /dev/null
+++ b/openwrt/package/serdisplib/ipkg/serdisplib.control
@@ -0,0 +1,4 @@
+Package: serdisplib
+Priority: optional
+Section: libs
+Description: A library for controlling displays 
diff --git a/openwrt/package/serdisplib/patches/100-io.patch b/openwrt/package/serdisplib/patches/100-io.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5b78e10f2ab7d1a3be033fd3cce9e930762b9f01
--- /dev/null
+++ b/openwrt/package/serdisplib/patches/100-io.patch
@@ -0,0 +1,19 @@
+diff -ru serdisplib-1.96.orig/src/serdisp_connect.c serdisplib-1.96/src/serdisp_connect.c
+--- serdisplib-1.96.orig/src/serdisp_connect.c	2005-10-07 20:40:50.000000000 +0200
++++ serdisplib-1.96/src/serdisp_connect.c	2005-12-12 18:48:58.000000000 +0200
+@@ -60,6 +60,7 @@
+ /* directIO only with linux and i386 */
+ #if defined(__linux__) && (defined(__i386__) || defined(__x86_64__))
+   #define __sd_linux_use_directIO__ 1
++  #include <sys/io.h>
+ #endif
+ 
+ 
+@@ -67,7 +68,6 @@
+ #if defined(__linux__)
+   #include <linux/ppdev.h>
+   #include <linux/parport.h>
+-  #include <sys/io.h>
+   #include <stdlib.h>
+   #define OUTB(_d, _p)  outb( (_d), (_p) )
+   #define INB(_p)       inb( (_p) )
diff --git a/openwrt/package/serdisplib/patches/101-test_shared.patch b/openwrt/package/serdisplib/patches/101-test_shared.patch
new file mode 100644
index 0000000000000000000000000000000000000000..af0cd5d38753f7c2dc4b426104c79d4e39b7d1ca
--- /dev/null
+++ b/openwrt/package/serdisplib/patches/101-test_shared.patch
@@ -0,0 +1,14 @@
+diff -ru serdisplib-1.96.orig/src/Makefile.in serdisplib-1.96/src/Makefile.in
+--- serdisplib-1.96.orig/src/Makefile.in	2005-10-19 01:12:42.000000000 +0200
++++ serdisplib-1.96/src/Makefile.in	2005-12-12 19:18:12.000000000 +0200
+@@ -73,8 +73,8 @@
+ 	$(CC) -fPIC -shared -o $(LIB_DIR)/$(LIB_SHARED) $(LIB_OBJECTS)
+ 	cd $(LIB_DIR) && $(LN_S) -f $(LIB_SHARED) $(LIB_NAME).so
+ 
+-testserdisp: $(LIB_DIR)/$(LIB_STATIC) $(OBJECTS)
+-	$(CC) -o testserdisp $(OBJECTS) $(LIB_DIR)/$(LIB_STATIC)
++testserdisp: $(LIB_DIR)/$(LIB_SHARED) $(OBJECTS)
++	$(CC) -o testserdisp $(OBJECTS) $(LIB_DIR)/$(LIB_SHARED)
+ 
+ clean:
+ 	/bin/rm -f $(OBJECTS) $(LIB_OBJECTS) $(LIB_DIR)/*.a $(LIB_DIR)/*.so*