Italiano English
Modifica History Actions

OpenWRT-UML-Netkit

Notes on OpenWRT UML + Netkit

The goal of this guide is to use Netkit with OpenWRT hosts in the emulated environment.

http://wiki.netkit.org/index.php/Main_Page

UML binaries are built with the host toolchain and are meant to run on the host they were built on.

We used a Gentoo machine amd64 profile (64bit processor)

Create OpenWRT UML images

Download and compile OpenWRT for the UML target (tested at 9/12/2009 revision 18717)

svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
make menuconfig

select the UML target and compile

  • Make sure you disabled kmod-mac8011-hwsim in your OpenWRT config, if you have it enables it will make Netkit act weird.
  • Make sure the kernel configuration has support for the ext2 file system !

we are using the following CHOST x86_64-pc-linux-gnu-4.3.4

we had a problem with some script looking for a lib64 dir that was not existing, solved like this:

cd $trunk_dir$/staging_dir/toolchain-x86_64_gcc-4.1.2_uClibc-0.9.30.1/
ln -s lib lib64

if the firmware compiles you have the binaries in $trunk_dir$/bin/uml

Test the UML binary

To test if your UML binary boots just use the guide from zoobab http://www.zoobab.com/openwrt-and-user-mode-linux

Integrate in Netkit

Launch in Netkit like this:

cd bin/uml
vstart openwrt --eth0=0 --con0=xterm --con1=xterm --verbose -m openwrt-uml-ext2.img -k ./openwrt-uml-vmlinux

also you may need extra Kernel command line options:

--append=root=98:0 --append=init=/etc/preinit

You will have a OpenWRT machine launched within Netkit, but only the second terminal is properly working for now, adjust inittab (see later)

Remount Read Write

To remount the filesystem readwrite

mount --remount -o rw /dev/root /

Adjust inittab

Original /etc/inittab in OpenWRT looks like this:

root@OpenWrt:/# cat /etc/init
/etc/init.d/  /etc/inittab
root@OpenWrt:/# cat /etc/inittab 
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
tts/0::askfirst:/bin/ash --login
tty1::askfirst:/bin/ash --login
root@OpenWrt:/# 

modify like this:

root@OpenWrt:/# cat /etc/inittab 
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
tty0::askfirst:/bin/ash --login
tty1::askfirst:/bin/ash --login
root@OpenWrt:/#

Everything in a patch

saverio@nordkapp ~/SORGENTI/openwrt-trunk-UML $ svn diff
Index: package/base-files/files/etc/inittab
===================================================================
--- package/base-files/files/etc/inittab        (revisione 18727)
+++ package/base-files/files/etc/inittab        (copia locale)
@@ -1,5 +1,4 @@
 ::sysinit:/etc/init.d/rcS S boot
 ::shutdown:/etc/init.d/rcS K stop
-tts/0::askfirst:/bin/ash --login
-ttyS0::askfirst:/bin/ash --login
+tty0::askfirst:/bin/ash --login
 tty1::askfirst:/bin/ash --login
Index: package/base-files/files/etc/config/network
===================================================================
--- package/base-files/files/etc/config/network (revisione 18727)
+++ package/base-files/files/etc/config/network (copia locale)
@@ -8,7 +8,7 @@
 
 config interface lan
        option ifname   eth0
-       option type     bridge
+       #option type    bridge
        option proto    static
        option ipaddr   192.168.1.1
        option netmask  255.255.255.0
saverio@nordkapp ~/SORGENTI/openwrt-trunk-UML $

Notes on netkit labs

lstart --verbose -o --append=root=98:0 -o --append=init=/etc/preinit