<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leste.maemo.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Brabo</id>
	<title>Maemo Leste Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://leste.maemo.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Brabo"/>
	<link rel="alternate" type="text/html" href="https://leste.maemo.org/Special:Contributions/Brabo"/>
	<updated>2026-06-05T11:26:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=753</id>
		<title>Virtual Machine</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=753"/>
		<updated>2020-05-27T13:20:26Z</updated>

		<summary type="html">&lt;p&gt;Brabo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Device&lt;br /&gt;
|image=&lt;br /&gt;
|manufacturer=Generic&lt;br /&gt;
|codename=&lt;br /&gt;
|dimensions=&lt;br /&gt;
|release_date=&lt;br /&gt;
|soc=&lt;br /&gt;
|dram=&lt;br /&gt;
|power=&lt;br /&gt;
|lcd=&lt;br /&gt;
|video=&lt;br /&gt;
|audio=&lt;br /&gt;
|network=&lt;br /&gt;
|storage=&lt;br /&gt;
|usb=&lt;br /&gt;
|camera=&lt;br /&gt;
|sensors=&lt;br /&gt;
|other=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Generic virtual machine target. This is particularly useful when doing development and testing.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
https://maedevu.maemo.org/images/virtual-machines/&lt;br /&gt;
&lt;br /&gt;
There are three different types of images: VirtualBox (.box), QEMU (.qcow2, .vdi) and Vagrant. The VirtualBox image may be converted to a VMware VMDK image which has been reported to perform better and have good hardware acceleration.&lt;br /&gt;
Converting the qcow2 image to raw allows it to be used on real hardware.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox ===&lt;br /&gt;
&lt;br /&gt;
Download latest .vdi.xz image, unpack it with &amp;quot;xz -d&amp;quot; command.&lt;br /&gt;
Create new Virtual Machine, select &amp;quot;Debian (64-bit)&amp;quot; and 1024MB RAM. Use the downloaded file as virtual hard disk.&lt;br /&gt;
You are done!&lt;br /&gt;
&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
&lt;br /&gt;
In general something like&lt;br /&gt;
  qemu-system-x86_64 -hda maemo-leste-1.0-amd64.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024&lt;br /&gt;
should work. But there seem to be issues with some QEMU versions, for more details see [https://github.com/maemo-leste/bugtracker/issues/198 issue#198].&lt;br /&gt;
&lt;br /&gt;
To set up a port forward for SSH, add:&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22&lt;br /&gt;
And then log in like this (password: &amp;lt;code&amp;gt;toor&amp;lt;/code&amp;gt;):&lt;br /&gt;
  ssh root@localhost -p 7722&lt;br /&gt;
&lt;br /&gt;
If the mouse pointer is grabbed and no cursor shows, you can add&lt;br /&gt;
  -usb -device usb-tablet&lt;br /&gt;
to the command line&lt;br /&gt;
&lt;br /&gt;
If you have a USB modem you can also use that in QEMU. You can either use sudo to elevate your privileges to be able to use it:&lt;br /&gt;
  sudo qemu-system-x86_64 -hda maemo-leste-1.0-amd64-virtual-20200324.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024 \&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22 \&lt;br /&gt;
  -usb -device usb-ehci,id=ehci \&lt;br /&gt;
  -device usb-host,bus=ehci.0,vendorid=0x0bdb,productid=0x193e&lt;br /&gt;
&lt;br /&gt;
Or you can make a udev rule for your device. For example, with a Lenovo Ericsson N5321 gw you can create &amp;quot;/etc/udev/rules.d/45-n5321.rules&amp;quot; with this in it:&lt;br /&gt;
  # Lenovo Ericsson N5321 gw simple udev rule&lt;br /&gt;
  SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0bdb&amp;quot;, ATTRS{idProduct}==&amp;quot;193e&amp;quot;, \&lt;br /&gt;
    MODE:=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then activate it by running these two commands as root:&lt;br /&gt;
  # udevadm control --reload-rules&lt;br /&gt;
  # udevadm trigger&lt;br /&gt;
&lt;br /&gt;
Now you can run QEMU without the need for sudo!&lt;br /&gt;
&lt;br /&gt;
== Initial configuration ==&lt;br /&gt;
&lt;br /&gt;
On the first run you may want to generate ssh host keys and set the timezone. To do so open the &amp;quot;X Terminal&amp;quot; application and run:&lt;br /&gt;
 sudo su -&lt;br /&gt;
 dpkg-reconfigure openssh-server&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
Make the system up-to-date:&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install linux-image-amd64&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
To get networking to work (at least in virtualbox), launch a shell and do &lt;br /&gt;
 sudo ifconfig eth0 up&lt;br /&gt;
 sudo dhclient eth0&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
&lt;br /&gt;
If you have a modem exposed to QEMU, you still need to do some steps manually to get connectivity.&lt;br /&gt;
&lt;br /&gt;
First off you need to add the development APT repository to your APT sources:&lt;br /&gt;
 # echo &#039;deb https://maedevu.maemo.org/leste beowulf-devel main contrib non-free&#039; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
Now update and upgrade:&lt;br /&gt;
 # apt update &amp;amp;&amp;amp; apt upgrade&lt;br /&gt;
&lt;br /&gt;
Then you can install these things:&lt;br /&gt;
 # apt install ofono libicd-network-ofono connui-iapsettings-gprs connui-statusbar-cellular connui-home-cellular connui-cellular-settings connui-conndlgs-cellular&lt;br /&gt;
&lt;br /&gt;
We need mdbus2 to manipulate oFono:&lt;br /&gt;
 # wget http://ftp.nl.debian.org/debian/pool/main/m/mdbus/mdbus2_2.3.3-2_amd64.deb&lt;br /&gt;
 # dpkg -i mdbus2_2.3.3-2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Then we can check if oFono finds our modem:&lt;br /&gt;
 # mdbus2 -s org.ofono&lt;br /&gt;
 /&lt;br /&gt;
 /bluetooth&lt;br /&gt;
 /bluetooth/profile&lt;br /&gt;
 /bluetooth/profile/dun_gw&lt;br /&gt;
 /bluetooth/profile/hfp_ag&lt;br /&gt;
 /bluetooth/profile/hfp_hf&lt;br /&gt;
 /mbm_0&lt;br /&gt;
&lt;br /&gt;
Then can check our mbm_0 modem:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0&lt;br /&gt;
 [METHOD]   org.freedesktop.DBus.Introspectable.Introspect() -&amp;gt; (s:xml)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.Modem.PropertyChanged(s:name, v:value)&lt;br /&gt;
&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.GetProperties&lt;br /&gt;
 ({&#039;Online&#039;: &amp;lt;false&amp;gt;, &#039;Powered&#039;: &amp;lt;false&amp;gt;, &#039;Lockdown&#039;: &amp;lt;false&amp;gt;, &#039;Emergency&#039;: &amp;lt;false&amp;gt;, &#039;SystemPath&#039;: &amp;lt;&#039;/sys/devices/pci0000:00/0000:00:04.0/usb1/1-1&#039;&amp;gt;, &#039;Interfaces&#039;: &amp;lt;@as []&amp;gt;, &#039;Features&#039;: &amp;lt;@as []&amp;gt;, &#039;Type&#039;: &amp;lt;&#039;hardware&#039;&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
Power on the modem:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.SetProperty Powered true&lt;br /&gt;
 ()&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.GetProperties&lt;br /&gt;
 ({&#039;Online&#039;: &amp;lt;false&amp;gt;, &#039;Powered&#039;: &amp;lt;true&amp;gt;, &#039;Lockdown&#039;: &amp;lt;false&amp;gt;, &#039;Emergency&#039;: &amp;lt;false&amp;gt;, &#039;Manufacturer&#039;: &amp;lt;&#039;Lenovo&#039;&amp;gt;, &#039;Model&#039;: &amp;lt;&#039;N5321 gw&#039;&amp;gt;, &#039;Revision&#039;: &amp;lt;&#039;R3C11&#039;&amp;gt;, &#039;Serial&#039;: &amp;lt;&#039;xxxxxxxxxxxx&#039;&amp;gt;, &#039;SystemPath&#039;: &amp;lt;&#039;/sys/devices/pci0000:00/0000:00:04.0/usb1/1-1&#039;&amp;gt;, &#039;Interfaces&#039;: &amp;lt;[&#039;org.ofono.SimManager&#039;]&amp;gt;, &#039;Features&#039;: &amp;lt;[&#039;sim&#039;]&amp;gt;, &#039;Type&#039;: &amp;lt;&#039;hardware&#039;&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
Check if we need to enter a pin:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.SimManager.GetProperties&lt;br /&gt;
 ({&#039;Present&#039;: &amp;lt;true&amp;gt;, &#039;CardIdentifier&#039;: &amp;lt;&#039;xxxxxx&#039;&amp;gt;, &#039;FixedDialing&#039;: &amp;lt;false&amp;gt;, &#039;BarredDialing&#039;: &amp;lt;false&amp;gt;, &#039;SubscriberNumbers&#039;: &amp;lt;@as []&amp;gt;, &#039;LockedPins&#039;: &amp;lt;[&#039;pin&#039;]&amp;gt;, &#039;PreferredLanguages&#039;: &amp;lt;[&#039;de&#039;, &#039;en&#039;, &#039;fr&#039;]&amp;gt;, &#039;PinRequired&#039;: &amp;lt;&#039;pin&#039;&amp;gt;, &#039;Retries&#039;: &amp;lt;{&#039;pin&#039;: byte 0x03, &#039;pin2&#039;: 0x03, &#039;puk&#039;: 0x0a, &#039;puk2&#039;: 0x0a}&amp;gt;, &#039;CardSlotCount&#039;: &amp;lt;uint32 1&amp;gt;, &#039;ActiveCardSlot&#039;: &amp;lt;uint32 1&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
If PinRequired is &#039;pin&#039; we need to enter a pin to unlock the sim:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.SimManager.EnterPin pin 1234&lt;br /&gt;
 ()&lt;br /&gt;
&lt;br /&gt;
Then we can bring the modem online:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.SetProperty Online true&lt;br /&gt;
 ()&lt;br /&gt;
&lt;br /&gt;
If we now redo the first mdbus2 command on /mbm_0:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0&lt;br /&gt;
 [METHOD]   org.freedesktop.DBus.Introspectable.Introspect() -&amp;gt; (s:xml)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.Modem.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.ChangePin(s:type, s:oldpin, s:newpin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.EnterPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.ResetPin(s:type, s:puk, s:newpin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.LockPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.UnlockPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.GetIcon(y:id) -&amp;gt; (ay:icon)&lt;br /&gt;
 [SIGNAL]   org.ofono.SimManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.AllowedAccessPoints.GetAllowedAccessPoints() -&amp;gt; (as:apnlist)&lt;br /&gt;
 [METHOD]   org.ofono.SimAuthentication.GetApplications() -&amp;gt; (a{oa{sv}}:applications)&lt;br /&gt;
 [METHOD]   org.ofono.SimAuthentication.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.SelectItem(y:item, o:agent) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.SimToolkit.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.RadioSettings.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.RadioSettings.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.RadioSettings.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.SendMessage(s:to, s:text) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.GetMessages() -&amp;gt; (a(oa{sv}):messages)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.IncomingMessage(s:message, a{sv}:info)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.ImmediateMessage(s:message, a{sv}:info)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.MessageAdded(o:path, a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.MessageRemoved(o:path)&lt;br /&gt;
 [METHOD]   org.ofono.PushNotification.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.PushNotification.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.SendBusinessCard(s:to, ay:card) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.SendAppointment(s:to, ay:appointment) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.Request() -&amp;gt; (h:fd)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.Release() -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.LocationReporting.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Initiate(s:command) -&amp;gt; (s:result_name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Respond(s:reply) -&amp;gt; (s:result)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Cancel() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.NotificationReceived(s:message)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.RequestReceived(s:message)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.CellBroadcast.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.CellBroadcast.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.PropertyChanged(s:property, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.IncomingBroadcast(s:message, q:channel)&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.EmergencyBroadcast(s:message, a{sv}:dict)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.AddContext(s:type) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.RemoveContext(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.DeactivateAll() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.GetContexts() -&amp;gt; (a(oa{sv}):contexts_with_properties)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.ResetContexts() -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.ContextAdded(o:path, a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.ContextRemoved(o:path)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.Register() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.GetOperators() -&amp;gt; (a(oa{sv}):operators_with_properties)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.Scan() -&amp;gt; (a(oa{sv}):operators_with_properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.NetworkRegistration.PropertyChanged(s:name, v:value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=752</id>
		<title>Virtual Machine</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=752"/>
		<updated>2020-05-27T12:45:39Z</updated>

		<summary type="html">&lt;p&gt;Brabo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Device&lt;br /&gt;
|image=&lt;br /&gt;
|manufacturer=Generic&lt;br /&gt;
|codename=&lt;br /&gt;
|dimensions=&lt;br /&gt;
|release_date=&lt;br /&gt;
|soc=&lt;br /&gt;
|dram=&lt;br /&gt;
|power=&lt;br /&gt;
|lcd=&lt;br /&gt;
|video=&lt;br /&gt;
|audio=&lt;br /&gt;
|network=&lt;br /&gt;
|storage=&lt;br /&gt;
|usb=&lt;br /&gt;
|camera=&lt;br /&gt;
|sensors=&lt;br /&gt;
|other=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Generic virtual machine target. This is particularly useful when doing development and testing.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
https://maedevu.maemo.org/images/virtual-machines/&lt;br /&gt;
&lt;br /&gt;
There are three different types of images: VirtualBox (.box), QEMU (.qcow2, .vdi) and Vagrant. The VirtualBox image may be converted to a VMware VMDK image which has been reported to perform better and have good hardware acceleration.&lt;br /&gt;
Converting the qcow2 image to raw allows it to be used on real hardware.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox ===&lt;br /&gt;
&lt;br /&gt;
Download latest .vdi.xz image, unpack it with &amp;quot;xz -d&amp;quot; command.&lt;br /&gt;
Create new Virtual Machine, select &amp;quot;Debian (64-bit)&amp;quot; and 1024MB RAM. Use the downloaded file as virtual hard disk.&lt;br /&gt;
You are done!&lt;br /&gt;
&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
&lt;br /&gt;
In general something like&lt;br /&gt;
  qemu-system-x86_64 -hda maemo-leste-1.0-amd64.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024&lt;br /&gt;
should work. But there seem to be issues with some QEMU versions, for more details see [https://github.com/maemo-leste/bugtracker/issues/198 issue#198].&lt;br /&gt;
&lt;br /&gt;
To set up a port forward for SSH, add:&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22&lt;br /&gt;
And then log in like this (password: &amp;lt;code&amp;gt;toor&amp;lt;/code&amp;gt;):&lt;br /&gt;
  ssh root@localhost -p 7722&lt;br /&gt;
&lt;br /&gt;
If the mouse pointer is grabbed and no cursor shows, you can add&lt;br /&gt;
  -usb -device usb-tablet&lt;br /&gt;
to the command line&lt;br /&gt;
&lt;br /&gt;
If you have a USB modem you can also use that in QEMU. You can either use sudo to elevate your privileges to be able to use it:&lt;br /&gt;
  sudo qemu-system-x86_64 -hda maemo-leste-1.0-amd64-virtual-20200324.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024 \&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22 \&lt;br /&gt;
  -usb -device usb-ehci,id=ehci \&lt;br /&gt;
  -device usb-host,bus=ehci.0,vendorid=0x0bdb,productid=0x193e&lt;br /&gt;
&lt;br /&gt;
Or you can make a udev rule for your device. For example, with a Lenovo Ericsson N5321 gw you can create &amp;quot;/etc/udev/rules.d/45-n5321.rules&amp;quot; with this in it:&lt;br /&gt;
  # Lenovo Ericsson N5321 gw simple udev rule&lt;br /&gt;
  SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0bdb&amp;quot;, ATTRS{idProduct}==&amp;quot;193e&amp;quot;, \&lt;br /&gt;
    MODE:=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then activate it by running these two commands as root:&lt;br /&gt;
  # udevadm control --reload-rules&lt;br /&gt;
  # udevadm trigger&lt;br /&gt;
&lt;br /&gt;
Now you can run QEMU without the need for sudo!&lt;br /&gt;
&lt;br /&gt;
== Initial configuration ==&lt;br /&gt;
&lt;br /&gt;
On the first run you may want to generate ssh host keys and set the timezone. To do so open the &amp;quot;X Terminal&amp;quot; application and run:&lt;br /&gt;
 sudo su -&lt;br /&gt;
 dpkg-reconfigure openssh-server&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
Make the system up-to-date:&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install linux-image-amd64&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
To get networking to work (at least in virtualbox), launch a shell and do &lt;br /&gt;
 sudo ifconfig eth0 up&lt;br /&gt;
 sudo dhclient eth0&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=X86&amp;diff=751</id>
		<title>X86</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=X86&amp;diff=751"/>
		<updated>2020-05-27T12:45:30Z</updated>

		<summary type="html">&lt;p&gt;Brabo: Created page with &amp;quot;=== Running on x86/x86_64 ===  The contents of the &amp;lt;code&amp;gt;qcow2&amp;lt;/code&amp;gt; file can be extracted and copied into hard drives for bare metal BIOS/Legacy CSM booting.  To extract the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Running on x86/x86_64 ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;lt;code&amp;gt;qcow2&amp;lt;/code&amp;gt; file can be extracted and copied into hard drives for bare metal BIOS/Legacy CSM booting.&lt;br /&gt;
&lt;br /&gt;
To extract the contents of the &amp;lt;code&amp;gt;qcow2&amp;lt;/code&amp;gt; file, decompress it first and convert it into &amp;lt;code&amp;gt;raw&amp;lt;/code&amp;gt; format.&lt;br /&gt;
&lt;br /&gt;
 $ xz -d maemo-leste-1.0-amd64-virtual-20180425.qcow2.xz&lt;br /&gt;
 $ qemu-img convert -f qcow2 -O raw maemo-leste-1.0-amd64-virtual-20180425.qcow2 maemo-leste-1.0-amd64-virtual-20180425.raw&lt;br /&gt;
&lt;br /&gt;
The raw image that it yields, can then be setup as a loopback device, and its partitions mounted.&lt;br /&gt;
&lt;br /&gt;
 # losetup --partscan -f maemo-leste-1.0-amd64-virtual-20180425.raw&lt;br /&gt;
 # mkdir /mnt/maemo-virt&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/maemo-virt&lt;br /&gt;
&lt;br /&gt;
Setup one &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; partition on the device to be used for booting, format it with a GRUB-compatible filesystem (&amp;lt;i&amp;gt;ext4&amp;lt;/i&amp;gt;, for example), then mount it as well.&lt;br /&gt;
&lt;br /&gt;
 # cfdisk /dev/sdb&lt;br /&gt;
 # ...&lt;br /&gt;
 # mkfs.ext4 /dev/sdb1&lt;br /&gt;
 # mkdir /mnt/maemo-bare&lt;br /&gt;
 # mount /dev/sdb1 /mnt/maemo-bare&lt;br /&gt;
&lt;br /&gt;
Change directory to the loop partition, the copy over its contents into the bare metal partition.&lt;br /&gt;
&lt;br /&gt;
 # cd /mnt/maemo-virt&lt;br /&gt;
 # rsync -aAHXv * /mnt/maemo-bare&lt;br /&gt;
&lt;br /&gt;
Once finished copying, bind mount special filesystems into the bare metal Maemo partition, then change root.&lt;br /&gt;
&lt;br /&gt;
 # mount --bind /dev /mnt/maemo-bare/dev&lt;br /&gt;
 # mount --bind /proc /mnt/maemo-bare/proc&lt;br /&gt;
 # mount --bind /sys /mnt/maemo-bare/sys&lt;br /&gt;
 # chroot /mnt/maemo-bare /bin/bash&lt;br /&gt;
&lt;br /&gt;
Load the new root&#039;s shell profile, install GRUB to the bare metal boot device (&amp;lt;i&amp;gt;/dev/sdb&amp;lt;/i&amp;gt;, in this example), then regenerate the GRUB configuration file.&lt;br /&gt;
&lt;br /&gt;
 # . /etc/profile&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
After that, you may exit the chroot environment (Ctrl+D), unmount all the filesystems, then reboot the system into your new bare metal Maemo Leste installation.&lt;br /&gt;
&lt;br /&gt;
 # umount /mnt/maemo-virt&lt;br /&gt;
 # umount -AR /mnt/maemo-bare&lt;br /&gt;
 # reboot&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=749</id>
		<title>Virtual Machine</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=749"/>
		<updated>2020-05-26T15:38:44Z</updated>

		<summary type="html">&lt;p&gt;Brabo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Device&lt;br /&gt;
|image=&lt;br /&gt;
|manufacturer=Generic&lt;br /&gt;
|codename=&lt;br /&gt;
|dimensions=&lt;br /&gt;
|release_date=&lt;br /&gt;
|soc=&lt;br /&gt;
|dram=&lt;br /&gt;
|power=&lt;br /&gt;
|lcd=&lt;br /&gt;
|video=&lt;br /&gt;
|audio=&lt;br /&gt;
|network=&lt;br /&gt;
|storage=&lt;br /&gt;
|usb=&lt;br /&gt;
|camera=&lt;br /&gt;
|sensors=&lt;br /&gt;
|other=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Generic virtual machine target. This is particularly useful when doing development and testing.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
https://maedevu.maemo.org/images/virtual-machines/&lt;br /&gt;
&lt;br /&gt;
There are three different types of images: VirtualBox (.box), QEMU (.qcow2, .vdi) and Vagrant. The VirtualBox image may be converted to a VMware VMDK image which has been reported to perform better and have good hardware acceleration.&lt;br /&gt;
Converting the qcow2 image to raw allows it to be used on real hardware.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox ===&lt;br /&gt;
&lt;br /&gt;
Download latest .vdi.xz image, unpack it with &amp;quot;xz -d&amp;quot; command.&lt;br /&gt;
Create new Virtual Machine, select &amp;quot;Debian (64-bit)&amp;quot; and 1024MB RAM. Use the downloaded file as virtual hard disk.&lt;br /&gt;
You are done!&lt;br /&gt;
&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
&lt;br /&gt;
In general something like&lt;br /&gt;
  qemu-system-x86_64 -hda maemo-leste-1.0-amd64.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024&lt;br /&gt;
should work. But there seem to be issues with some QEMU versions, for more details see [https://github.com/maemo-leste/bugtracker/issues/198 issue#198].&lt;br /&gt;
&lt;br /&gt;
To set up a port forward for SSH, add:&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22&lt;br /&gt;
And then log in like this (password: &amp;lt;code&amp;gt;toor&amp;lt;/code&amp;gt;):&lt;br /&gt;
  ssh root@localhost -p 7722&lt;br /&gt;
&lt;br /&gt;
If you have a USB modem you can also use that in QEMU. You can either use sudo to elevate your privileges to be able to use it:&lt;br /&gt;
  sudo qemu-system-x86_64 -hda maemo-leste-1.0-amd64-virtual-20200324.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024 \&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22 \&lt;br /&gt;
  -usb -device usb-ehci,id=ehci \&lt;br /&gt;
  -device usb-host,bus=ehci.0,vendorid=0x0bdb,productid=0x193e&lt;br /&gt;
&lt;br /&gt;
Or you can make a udev rule for your device. For example, with a Lenovo Ericsson N5321 gw you can create &amp;quot;/etc/udev/rules.d/45-n5321.rules&amp;quot; with this in it:&lt;br /&gt;
  # Lenovo Ericsson N5321 gw simple udev rule&lt;br /&gt;
  SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0bdb&amp;quot;, ATTRS{idProduct}==&amp;quot;193e&amp;quot;, \&lt;br /&gt;
    MODE:=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then activate it by running these two commands as root:&lt;br /&gt;
  # udevadm control --reload-rules&lt;br /&gt;
  # udevadm trigger&lt;br /&gt;
&lt;br /&gt;
Now you can run QEMU without the need for sudo!&lt;br /&gt;
&lt;br /&gt;
=== Real hardware ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;lt;code&amp;gt;qcow2&amp;lt;/code&amp;gt; file can be extracted and copied into hard drives for bare metal BIOS/Legacy CSM booting.&lt;br /&gt;
&lt;br /&gt;
To extract the contents of the &amp;lt;code&amp;gt;qcow2&amp;lt;/code&amp;gt; file, decompress it first and convert it into &amp;lt;code&amp;gt;raw&amp;lt;/code&amp;gt; format.&lt;br /&gt;
&lt;br /&gt;
 $ xz -d maemo-leste-1.0-amd64-virtual-20180425.qcow2.xz&lt;br /&gt;
 $ qemu-img convert -f qcow2 -O raw maemo-leste-1.0-amd64-virtual-20180425.qcow2 maemo-leste-1.0-amd64-virtual-20180425.raw&lt;br /&gt;
&lt;br /&gt;
The raw image that it yields, can then be setup as a loopback device, and its partitions mounted.&lt;br /&gt;
&lt;br /&gt;
 # losetup --partscan -f maemo-leste-1.0-amd64-virtual-20180425.raw&lt;br /&gt;
 # mkdir /mnt/maemo-virt&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/maemo-virt&lt;br /&gt;
&lt;br /&gt;
Setup one &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; partition on the device to be used for booting, format it with a GRUB-compatible filesystem (&amp;lt;i&amp;gt;ext4&amp;lt;/i&amp;gt;, for example), then mount it as well.&lt;br /&gt;
&lt;br /&gt;
 # cfdisk /dev/sdb&lt;br /&gt;
 # ...&lt;br /&gt;
 # mkfs.ext4 /dev/sdb1&lt;br /&gt;
 # mkdir /mnt/maemo-bare&lt;br /&gt;
 # mount /dev/sdb1 /mnt/maemo-bare&lt;br /&gt;
&lt;br /&gt;
Change directory to the loop partition, the copy over its contents into the bare metal partition.&lt;br /&gt;
&lt;br /&gt;
 # cd /mnt/maemo-virt&lt;br /&gt;
 # rsync -aAHXv * /mnt/maemo-bare&lt;br /&gt;
&lt;br /&gt;
Once finished copying, bind mount special filesystems into the bare metal Maemo partition, then change root.&lt;br /&gt;
&lt;br /&gt;
 # mount --bind /dev /mnt/maemo-bare/dev&lt;br /&gt;
 # mount --bind /proc /mnt/maemo-bare/proc&lt;br /&gt;
 # mount --bind /sys /mnt/maemo-bare/sys&lt;br /&gt;
 # chroot /mnt/maemo-bare /bin/bash&lt;br /&gt;
&lt;br /&gt;
Load the new root&#039;s shell profile, install GRUB to the bare metal boot device (&amp;lt;i&amp;gt;/dev/sdb&amp;lt;/i&amp;gt;, in this example), then regenerate the GRUB configuration file.&lt;br /&gt;
&lt;br /&gt;
 # . /etc/profile&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
After that, you may exit the chroot environment (Ctrl+D), unmount all the filesystems, then reboot the system into your new bare metal Maemo Leste installation.&lt;br /&gt;
&lt;br /&gt;
 # umount /mnt/maemo-virt&lt;br /&gt;
 # umount -AR /mnt/maemo-bare&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
== Initial configuration ==&lt;br /&gt;
&lt;br /&gt;
On the first run you may want to generate ssh host keys and set the timezone. To do so open the &amp;quot;X Terminal&amp;quot; application and run:&lt;br /&gt;
 sudo su -&lt;br /&gt;
 dpkg-reconfigure openssh-server&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
Make the system up-to-date:&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install linux-image-amd64&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
To get networking to work (at least in virtualbox), launch a shell and do &lt;br /&gt;
 sudo ifconfig eth0 up&lt;br /&gt;
 sudo dhclient eth0&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Status/Mobile_Data&amp;diff=748</id>
		<title>Status/Mobile Data</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Status/Mobile_Data&amp;diff=748"/>
		<updated>2020-05-26T14:41:42Z</updated>

		<summary type="html">&lt;p&gt;Brabo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Relevant tickets:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/maemo-leste/bugtracker/issues/76&lt;br /&gt;
* https://github.com/maemo-leste/bugtracker/issues/151&lt;br /&gt;
* https://github.com/maemo-leste/bugtracker/issues/195&lt;br /&gt;
* https://github.com/maemo-leste/bugtracker/issues/196&lt;br /&gt;
&lt;br /&gt;
We will need the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;RE of the current data icd2 plugin from Fremantle (as starting base)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Code to interface with ofono, resulting in libicd-network-ofono&amp;lt;/s&amp;gt; (WIP)&lt;br /&gt;
* &amp;lt;s&amp;gt;Connui UI plugins for gprs and port it to ofono https://github.com/maemo-leste/connui-cellular&amp;lt;/s&amp;gt; (WIP)&lt;br /&gt;
* &amp;lt;s&amp;gt;Database of various mobile operations and their default APN information&amp;lt;/s&amp;gt; in connui-cellular and ofono&lt;br /&gt;
* &amp;lt;s&amp;gt;Hardware/driver support&amp;lt;/s&amp;gt; (working for various devices)&lt;br /&gt;
&lt;br /&gt;
Useful resources/hw/links:&lt;br /&gt;
&lt;br /&gt;
* https://wiki.maemo.org/User:Jebba/Ofono#Using_oFono_in_Pass_thru_mode (pass through n900 modem with ofono, works for non-data only)&lt;br /&gt;
* An USB modem for testing (like Option modems)&lt;br /&gt;
* ofono: https://01.org/ofono&lt;br /&gt;
&lt;br /&gt;
Olimex 3g modem (should also do voice calls), should work with ofono:&lt;br /&gt;
* https://www.olimex.com/Products/USB-Modules/MOD-USB3G/&lt;br /&gt;
* https://aleksander.es/data/Qualcomm%20Gobi%20devices%20on%20Linux.pdf&lt;br /&gt;
&lt;br /&gt;
USB passthrough on QEMU can work like this (note -device usb-ehci and -device usb-host), pick proper product/vendor IDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo qemu-system-x86_64 -hda \&lt;br /&gt;
/ext4/leste/maemo-leste-1.0-amd64-virtual-20181102.qcow2 \&lt;br /&gt;
-vga virtio -enable-kvm -cpu host -smp cores=2 -m 4096 \&lt;br /&gt;
-nic user,hostfwd=tcp:127.0.0.1:7722-:22 -display gtk \&lt;br /&gt;
-usb -device usb-ehci,id=ehci \&lt;br /&gt;
-device usb-host,bus=ehci.0,vendorid=0x2c7c,productid=0x0125 \&lt;br /&gt;
-device usb-host,bus=ehci.0,vendorid=0x13d3,productid=0x3346 \&lt;br /&gt;
-monitor stdio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modems from Pine64 Devkits work with ofono:&lt;br /&gt;
* http://wiki.pine64.org/index.php/Project_Anakin&lt;br /&gt;
* http://wiki.pine64.org/index.php/Project_Don&#039;t_be_evil&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Getting_Started&amp;diff=733</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Getting_Started&amp;diff=733"/>
		<updated>2020-05-20T17:14:11Z</updated>

		<summary type="html">&lt;p&gt;Brabo: Created page with &amp;quot;= Useful Bits =   * Default lockcode is &amp;quot;12345&amp;quot; * Lockcode can only be changed if your hardware has CAL. QEMU does not have CAL. Droid 4 also not.  = Tweaking =  See Tweaking&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Useful Bits = &lt;br /&gt;
&lt;br /&gt;
* Default lockcode is &amp;quot;12345&amp;quot;&lt;br /&gt;
* Lockcode can only be changed if your hardware has CAL. QEMU does not have CAL. Droid 4 also not.&lt;br /&gt;
&lt;br /&gt;
= Tweaking =&lt;br /&gt;
&lt;br /&gt;
See [[Tweaking]]&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Motorola_Droid_4&amp;diff=732</id>
		<title>Motorola Droid 4</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Motorola_Droid_4&amp;diff=732"/>
		<updated>2020-05-19T19:34:21Z</updated>

		<summary type="html">&lt;p&gt;Brabo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Device&lt;br /&gt;
|image=[[File:Motorola Droid 4 - Leste pre-alpha.jpg|250px]]&lt;br /&gt;
|manufacturer=Motorola&lt;br /&gt;
|codename=Maserati&lt;br /&gt;
|dimensions=127x67.3x12.7mm&lt;br /&gt;
|release_date=2012-02-10&lt;br /&gt;
|soc=TI OMAP4430&lt;br /&gt;
|dram=1024MB DDR2&lt;br /&gt;
|power=&lt;br /&gt;
|lcd=960x540 4&amp;quot;&lt;br /&gt;
|video=PowerVR SGX540 &lt;br /&gt;
|audio=&lt;br /&gt;
|network=&lt;br /&gt;
|storage=16GB flash&lt;br /&gt;
|usb=&lt;br /&gt;
|camera=&lt;br /&gt;
|sensors=AK8975 compass, LIS3DH accelerometer, ISL29030 proximity and illuminance, TMP105 temperature sensor&lt;br /&gt;
|other=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! Leste supported&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Kernel version || 5.6.0 || Mainline + some patches not yet in mainline - see https://github.com/maemo-leste/droid4-linux&lt;br /&gt;
|-&lt;br /&gt;
| Serial || Yes || On MicroUSB port, requires [[#Serial Cable|special cable]]&lt;br /&gt;
|-&lt;br /&gt;
| Charging || Yes ||&lt;br /&gt;
|-&lt;br /&gt;
| Wireless || Yes ||&lt;br /&gt;
|-&lt;br /&gt;
| Ethernet || N/A ||&lt;br /&gt;
|-&lt;br /&gt;
| Micro USB || Yes || OTG&lt;br /&gt;
|-&lt;br /&gt;
| Keyboard || Yes || Slightly modified keyboard layout, see https://www.spinics.net/lists/linux-omap/msg135137.html (TLDR; Shift key produces CTRL, SYM produces ALT, and Caps lock produces SHIFT)&lt;br /&gt;
|-&lt;br /&gt;
| Screen || Yes ||&lt;br /&gt;
|-&lt;br /&gt;
| 3D Acceleration || Yes || PowerVR SGX540 (closed driver) - https://github.com/maemo-leste/pvr-omap4/&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen || Yes || Capacitive&lt;br /&gt;
|-&lt;br /&gt;
| Audio || Yes || Switch around in alsamixer to get the right outputs working (&#039;Speaker Right&#039; set to &#039;HiFi&#039; and &#039;HiFi&#039; set to above 0 gets you output)&lt;br /&gt;
|-&lt;br /&gt;
| 2G/3G data || WIP || Reported to work, no UI yet - see https://github.com/maemo-leste/connui-cellular/&lt;br /&gt;
|-&lt;br /&gt;
| SMS || WIP || Work with AT commands, needs ofono porting work, and then Leste UI&lt;br /&gt;
|-&lt;br /&gt;
| Phone calls || WIP || Work with AT commands (good call quality, too), needs ofono porting work, and then Leste UI&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || Yes || Needs firmware - install latest firmware-ti-connectivity - See also https://github.com/maemo-leste/bugtracker/issues/290.&lt;br /&gt;
|-&lt;br /&gt;
| FM Transmitter || N/A ||&lt;br /&gt;
|-&lt;br /&gt;
| FM Receiver || Not yet ||&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || ? || Available in /sys, but not yet as input device, needs kernel and MCE work https://github.com/maemo-leste/bugtracker/issues/294&lt;br /&gt;
|-&lt;br /&gt;
| Compass || ? || Available in /sys (after loading ak8975 module. No applications using it yet&lt;br /&gt;
|-&lt;br /&gt;
| Proximity sensor || WIP || Sensor works, not yet exposed as evdev device&lt;br /&gt;
|-&lt;br /&gt;
| Ambient Light Sensor || Yes || https://github.com/maemo-leste/mce/pull/8&lt;br /&gt;
|-&lt;br /&gt;
| HDMI-out || WIP || works, but not with hildon-desktop&lt;br /&gt;
|-&lt;br /&gt;
| TV-out || N/A ||&lt;br /&gt;
|-&lt;br /&gt;
| Vibration Motor || Yes || No userspace yet (should be in mce)&lt;br /&gt;
|-&lt;br /&gt;
| GPS || ? || Works but is not integrated yet, see [[#GPS|GPS]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Hardware requirements:&lt;br /&gt;
&lt;br /&gt;
* Droid4 with fully charged battery&lt;br /&gt;
* MicroUSB cable&lt;br /&gt;
* MicroSD card&lt;br /&gt;
&lt;br /&gt;
Software requirements:&lt;br /&gt;
* Host Linux or Windows system&lt;br /&gt;
* Android Tools: fastboot&lt;br /&gt;
* Flashing tools:&lt;br /&gt;
** XZ Utils and coreutils for Linux&lt;br /&gt;
** Etcher[https://github.com/balena-io/etcher] for Windows&lt;br /&gt;
&lt;br /&gt;
Download from https://maedevu.maemo.org/images/droid4/&lt;br /&gt;
&lt;br /&gt;
# VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml.zip&lt;br /&gt;
# flash-droid-4-fw.sh&lt;br /&gt;
# Latest maemo-leste-1.0-armhf-droid4-*.img.xz (NOTE: 20200112 image may have issues with WiFi)&lt;br /&gt;
&lt;br /&gt;
Download from https://github.com/tmlind/droid4-kexecboot.git&lt;br /&gt;
&lt;br /&gt;
# utags-mmcblk1p13.bin&lt;br /&gt;
# droid4-kexecboot.img&lt;br /&gt;
&lt;br /&gt;
Check what kernel version your Android OS runs.&lt;br /&gt;
For this go to Settings -&amp;gt; About phone. Slide to the bottom, where you can see &amp;quot;Kernel version&amp;quot;.&lt;br /&gt;
If you have at least 3.0.8, you may skip &amp;quot;Updating Android&amp;quot; step below.&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
&lt;br /&gt;
# Create a working directory with above mentioned files in it&lt;br /&gt;
# unzip VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml.zip&lt;br /&gt;
# Power off Droid4 and connect it to the host machine with MicroUSB cable&lt;br /&gt;
# Start the device in fastboot mode. For this press power button and bottom volume key simultaneously and release them after a second.&lt;br /&gt;
&lt;br /&gt;
Updating Android. This will reinstall the Android OS on your device, deleting all user data. Do a backup, if you want to save something. When everything is ready, go to the working directory mentioned above and run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pushd VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml&lt;br /&gt;
sudo bash ../flash-droid-4-fw.sh&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, assuming you are in the working directory, install kexecboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo fastboot flash mbm VRZ_XT894_9.8.2O-72_VZW-18-8_CFC.xml/allow-mbmloader-flashing-mbm.bin&lt;br /&gt;
sudo fastboot reboot-bootloader&lt;br /&gt;
sudo fastboot flash bpsw droid4-kexecboot.img&lt;br /&gt;
sudo fastboot flash utags utags-mmcblk1p13.bin&lt;br /&gt;
sudo fastboot reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you did &amp;quot;Updating Android&amp;quot; the device should run the firstboot steps.&lt;br /&gt;
If you didn&#039;t, the device should reboot and show kexecboot menu for a few seconds before it boots to Android.&lt;br /&gt;
&lt;br /&gt;
Now, flash the Maemo Leste image to your sdcard:&lt;br /&gt;
&lt;br /&gt;
On Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xzcat maemo-leste-1.0-armhf-droid4-20190227.img.xz | sudo dd status=progress bs=1M of=/dev/MICROSDCARD-DEVICE&lt;br /&gt;
sync&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Windows: Use Etcher&lt;br /&gt;
&lt;br /&gt;
Wait for sync to complete and insert MicroSD card into Droid4. Reboot the device and select Maemo Leste from the kexecboot menu.&lt;br /&gt;
&lt;br /&gt;
You should now see Maemo Leste booting up, and it will show you hildon-desktop after a minute.&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
* Poweroff device, grab the SD card&lt;br /&gt;
* Backup any important files&lt;br /&gt;
* Grab latest image from https://maedevu.maemo.org/images/droid4/&lt;br /&gt;
* Write it as before : xzcat maemo-leste-1.0-armhf-droid4-20190227.img.xz | sudo dd status=progress bs=1M of=/dev/MICROSDCARD-DEVICE&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
The battery in Droid4 is not easily removable. If you got the device stuck, use this combo: power button + bottom volume key. You should hold them for about 7 seconds. Droid4 will then reboot.&lt;br /&gt;
&lt;br /&gt;
If Maemo is still running, you can also hold just the power button for ~10 seconds, and the device will run poweroff.&lt;br /&gt;
&lt;br /&gt;
Some users reported that Bluetooth kernel module interfere badly with the WiFi driver on their devices.&lt;br /&gt;
Blacklisting the module may help if you have such problems:&lt;br /&gt;
 echo &amp;quot;blacklist hci_uart&amp;quot; &amp;gt;&amp;gt; /etc/modprobe.d/blacklist.conf&lt;br /&gt;
&lt;br /&gt;
Also see [[Motorola_Droid_4/Modem]] [[Motorola_Droid_4/PowerVR]]&lt;br /&gt;
&lt;br /&gt;
Also see: http://elektranox.org/droid4/ and http://muru.com/linux/d4/&lt;br /&gt;
&lt;br /&gt;
== Serial Cable ==&lt;br /&gt;
&lt;br /&gt;
As explained at http://muru.com/linux/d4 , the Droid 4 exposes a serial console on the USB port. You can construct the required cable easily by following the instructions there. If you have old Nokia CA-42 or DKU-5 cables, then you can use them with the Droid 4, using instructions at https://jethomson.wordpress.com/2010/02/21/diy-usb-to-serial-cable-for-3usd/&lt;br /&gt;
&lt;br /&gt;
While using the serial cable, if you lose the connection, the following may help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
18:43 &amp;lt; tmlind&amp;gt; sicelo: hmm the uart debug cable multiplexing still has issues, if the uart disappears during boot it should come back with &lt;br /&gt;
                the console login propt later&lt;br /&gt;
18:45 &amp;lt; tmlind&amp;gt; try plugging in a pc usb cable then back to uart cable in case that might help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stuff to try ==&lt;br /&gt;
&lt;br /&gt;
==== Blinkenlights ====&lt;br /&gt;
Adding this in rc.local above the &#039;&#039;exit 0&#039;&#039; gets you some blinkenlights to watschen und relaxen.&lt;br /&gt;
 echo cpu &amp;gt; /sys/class/leds/lm3532::kbd_backlight/trigger # gets you a cpu activity monitor on the keyboard backlight&lt;br /&gt;
 echo mmc0 &amp;gt; /sys/class/leds/shift-key-light/trigger      # gets you a &#039;hdd led&#039; of the SD card on the capslock light&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Phone Call ====&lt;br /&gt;
&lt;br /&gt;
Make sure there is a SIM in the phone.&lt;br /&gt;
&lt;br /&gt;
Run this over SSH:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Read modem output: &lt;br /&gt;
# cat /dev/motmdm1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Online modem:&lt;br /&gt;
# printf &amp;quot;AT+CFUN=1\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Connect to network:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;AT+COPS=1\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Print connected network:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;AT+COPS?\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Not sure, do it anyway:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;AT+SCRN=0\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Dial a number:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;ATD+1234567890\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Hang up:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;ATH\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&lt;br /&gt;
Answer incoming call:&lt;br /&gt;
&lt;br /&gt;
# printf &amp;quot;ATA\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Audio wise, in alsamixer, make sure echo cancellation is turned on. I had to set Call out to &amp;quot;speakerphone&amp;quot; and set the right speaker to &amp;quot;voice&amp;quot; codec, and set volume for both call and voice to something non-zero.&lt;br /&gt;
&lt;br /&gt;
==== 3G Internet ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
22:12 &amp;lt; pave1&amp;gt; qmicli -d /dev/cdc-wdm0 --wds-follow-network --wds-start-network=apn=internet.t-mobile.cz&lt;br /&gt;
22:12 &amp;lt; pave1&amp;gt; route del default&lt;br /&gt;
22:12 &amp;lt; pave1&amp;gt; sudo ifconfig wwan0 up&lt;br /&gt;
22:12 &amp;lt; pave1&amp;gt; dhclient wwan0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPS ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modprobe gnss-motmdm and point gpsd to use /dev/gnss0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
22:30 &amp;lt; tmlind&amp;gt; hmm there&#039;s a probably kernel gnss bug for gsp access fyi, you can currently only open one connection before you have to restart gpsd :)&lt;br /&gt;
&lt;br /&gt;
Can try to &amp;lt;pre&amp;gt;&lt;br /&gt;
mkfifo /tmp/gps&lt;br /&gt;
cat /dev/gnss0 &amp;gt; /tmp/gps&lt;br /&gt;
Then point gpsd to use /tmp/gps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== USSD ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
22:45 &amp;lt; tmlind&amp;gt; fyi, here&#039;s how to send USSD to query balance for example: printf &amp;quot;AT+CUSD=1,#999#,0\r&amp;quot; &amp;gt; /dev/motmdm1&lt;br /&gt;
22:47 &amp;lt; tmlind&amp;gt; fyi, for parsing incoming USSD, this web interface works if set to utf-8: &lt;br /&gt;
                https://www.mobilefish.com/services/latin_utf_base64_to_hex/latin_utf_base64_to_hex.php#text_hex_output&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Motorola-Droid4-20200125.jpeg&lt;br /&gt;
Droid4-neofetch.JPG&lt;br /&gt;
Droid4_htop.jpg&lt;br /&gt;
Droid4_leste_logo.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;/div&gt;</summary>
		<author><name>Brabo</name></author>
	</entry>
</feed>