https://wiki.postmarketos.org/api.php?action=feedcontributions&user=GrantM11235&feedformat=atompostmarketOS - User contributions [en]2024-03-29T08:45:52ZUser contributionsMediaWiki 1.39.6https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=6420Samsung Galaxy S4 (samsung-jflte)2019-03-13T18:21:21Z<p>GrantM11235: /* Supported models */ Add warning about locked bootloaders</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Supported models ==<br />
This page is only for versions of the Galaxy S4 that use the Qualcomm Snapdragon 600 SoC, see https://en.wikipedia.org/wiki/Samsung_Galaxy_S4#Model_variants<br />
<br />
Watch out, some versions have bootloaders that can't be unlocked.<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre><br />
$ wpa_passphrase $YOUR_SSID | sudo tee /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=6419Samsung Galaxy S4 (samsung-jflte)2019-03-13T17:34:20Z<p>GrantM11235: Add "Supported models" section</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Supported models ==<br />
This page is only for versions of the Galaxy S4 that use the Qualcomm Snapdragon 600 SoC, see https://en.wikipedia.org/wiki/Samsung_Galaxy_S4#Model_variants<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre><br />
$ wpa_passphrase $YOUR_SSID | sudo tee /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=User:GrantM11235&diff=6405User:GrantM112352019-03-12T16:35:14Z<p>GrantM11235: /* Owns devices */ Add motorola-athene</p>
<hr />
<div>{| class="wikitable"<br />
| GitLab<br />
| [https://gitlab.com/GrantM11235 GrantM11235]<br />
|-<br />
| Matrix<br />
| [https://matrix.to/#/@grantm11235:matrix.org @grantm11235:matrix.org]<br />
|}<br />
<br />
== Owns devices ==<br />
<br />
{{My devices}}<br />
{{Owns device|Samsung_Galaxy_S4_(samsung-jflte)}}<br />
{{Owns device|Samsung_Captivate_Glide_(samsung-i927)}}<br />
{{Owns device|Motorola_Moto_G4(motorola-athene)}}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Captivate_Glide_(samsung-i927)&diff=6278Samsung Captivate Glide (samsung-i927)2019-02-28T17:19:17Z<p>GrantM11235: /* Keycodes */ Update to match pmaports!238</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Captivate Glide<br />
| codename = samsung-i927<br />
| image = File:sgh-i927.jpg<br />
| imagecaption = Samsung Captivate Glide with its keyboard extended and back lights on<br />
| releaseyear = 2011<br />
| originalsoftware = Android 4.0.4<br />
| chipset = Nvidia Tegra 2 AP20H<br />
| cpu = Dual-core 1.0 GHz Cortex-A9<br />
| gpu = NVIDIA GeForce ULP (Tegra 2)<br />
| storage = 8 GB<br />
| display = 480x800 AMOLED<br />
| memory = 1 GB<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = P<br />
| status_xwayland =<br />
| status_fde = Y<br />
| status_mainline = P<br />
| status_battery = P<br />
| status_3d = P<br />
| status_accel =<br />
| status_audio =<br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps =<br />
| status_mobiledata =<br />
| status_sms =<br />
| status_calls =<br />
| status = boots<br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* cerg2010cerg2010<br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== What works ==<br />
* Kernel compilation<br />
* Flash via Heimdall<br />
* Booting<br />
<br />
== How to enter flash mode ==<br />
Press and hold <code>Volume Up</code> + <code>Power</code> simultaneously. Then click <code>Volume Up</code> to confirm.<br />
<br />
== How to enter recovery mode ==<br />
Press and hold <code>Volume Down</code> + <code>Power</code> simultaneously.<br />
<br />
== Installation ==<br />
<!-- add more sections below as necessary, e.g. Wifi, photos, ... --><br />
<br />
== Hardware ==<br />
{|class="wikitable feature-colors"<br />
! Status<br />
! Hardware<br />
! Info<br />
|-<br />
| P<br />
|Power<br />
|There's 3-4 power chips: max8907c, max8922, max17043 and unknown chip controlling camera power - on downstream kernel, it's driver called "m5mo_power", it works on I2C bus number 16 at address 0x3E. 17043 is supported by 17040 driver - the only difference is ALRT interrupt, which is sent on low battery.<br />
|-<br />
| Y<br />
|Display panel<br />
|Samsung S6E63M0. Supported by driver from PabloPL, which makes it's way to mainline. Panel supports flipping (horizontal/vertical/180 rotation) and changing polarity of H/VSYNC via internal GTCON register. Exact register mapping is not documented and datasheet is not available. Also, timings are changed to make it work with correct colors and without shift on Tegra<br />
|-<br />
| Y<br />
|Touchscreen<br />
|Atmel mXT224(e). Works fine without maxtouch.cfg.<br />
|-<br />
| Y<br />
|QWERTY keyboard<br />
|STMPE1801. Mainline kernel supports the chip, but not the keyboard controller, so we use a patched version. Built-in LED is supported via GPIO. Keymap is missing.<br />
|-<br />
| P<br />
|USB<br />
|Only gadget mode is supported for now. [https://gitlab.com/postmarketOS/pmaports/merge_requests/238#note_145728362 OTG does not work yet]. HSIC mode is missing, which makes our modem not working. Not sure if we can make it work in non-HSIC mode. fsa9480 is used for cable type detection - it's supported by mainline kernel, but no Device Tree bindings available. There's a driver for fsa9480 with DT support in PabloPL repo, but it's not used for now.<br />
|-<br />
| Y<br />
|SDHCI<br />
|Works, but card detection is weird. There's a separate GPIO for card detection, but in downstream kernel it also checks for GPIO on STMPE controller. For now, broken-cd property is used in Device Tree, making detection work in polling mode. WiFi chip and internal memory also run on SDHCI bus.<br />
|-<br />
| P<br />
|WiFi<br />
|Broadcom BCM4330. Something is happening with firmware: a long list of warnings is displayed on boot. The reason seems to be channel bandwidth - the code internally iterates over (supported) channels and checks for a bandwidth, and if it's not 40MHz, it outputs a warning. On 5GHz band, only 20MHz bandwidth is supported - device successfully scans for APs on 40MHz and 80MHz bandwidths, but doesn't associate - wpa_supplicant reports and error with bssid=00:00:... and status_code=16 (probably timeout code).<br />
|-<br />
| Y<br />
| GPIO keys<br />
|There is 4 keys on GPIO: Power, Volume up, Volume down and keyboard HALL sensor.<br />
|-<br />
| Y<br />
|Touchkey<br />
|MCS5080. Mainline driver available, but it's bugged, has no DT bindings and not full. A slightly patched version is used with key reading fixed and internal LED support.<br />
|-<br />
| Y<br />
|Vibra<br />
|ISA1200. Driver from p4wifi kernel is used, but there's also another driver from CAF(?).<br />
|-<br />
|<br />
|Bluetooth<br />
|Broadcom BCM4330. Not tested.<br />
|-<br />
|<br />
|Sound<br />
|WM8994. Chip is supported in mainline but Tegra bindings not available. For now, driver from p4wifi is used. This one also requires mapping configuration.<br />
|-<br />
|<br />
|MHL<br />
|SII9234. No extcon support in mainline driver. Enabling this chip causes screen resolution to be set to 1024x800 instead of 480x800, so it's disabled for now.<br />
|-<br />
|<br />
|Proximity sensor<br />
|CM3663. No driver in mainline kernel available.<br />
|-<br />
|<br />
|Back camera<br />
|Fujitsu M5MO. It is supported by mainline, but has no DT bindings. May have it's own PMIC<br />
|-<br />
|<br />
|Front camera<br />
|Samsung S5K6AAFX. It is supported by mainline, but has no DT bindings. Power controlled by m5mo_pmic in downstream.<br />
|-<br />
|<br />
|Modem<br />
|XMM6260. Operates on USB with HSIC mode, but also has GPIOs.<br />
|-<br />
| P<br />
|Other sensors<br />
|These are just not tested, but driver available and probing works: NCT1008 (temperature), MPU3050 (gyro), KXTF9 (accel), AK8975 (compass), SIRFstarIV (GPS, actual chip is unknown. This one is notable because it's supported by new kernel GPS framework).<br />
|}<br />
<br />
== Keycodes ==<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+Keyboard<br />
|rowspan="2"|<br />
|16<br />
|17<br />
|18<br />
|19<br />
|20<br />
|21<br />
|22<br />
|23<br />
|24<br />
|25<br />
|14<br />
|rowspan="2"|<br />
|-<br />
|30<br />
|31<br />
|32<br />
|33<br />
|34<br />
|35<br />
|36<br />
|37<br />
|38<br />
|103<br />
|96<br />
|-<br />
|rowspan="2"|102<br />
|42<br />
|44<br />
|45<br />
|46<br />
|47<br />
|48<br />
|49<br />
|50<br />
|105<br />
|28<br />
|106<br />
|rowspan="2"|<br />
|-<br />
|100<br />
|125<br />
|126<br />
|51<br />
|colspan="3"|57<br />
|52<br />
|<br />
|108<br />
|<br />
|}<br />
<br />
{|class="wikitable"<br />
|+Side buttons<br />
!Button<br />
!Keycode<br />
|-<br />
|Volume Down<br />
|114<br />
|-<br />
|Volume Up<br />
|115<br />
|-<br />
|Power<br />
|116<br />
|}<br />
<br />
== See also ==<br />
* [https://github.com/Moocow9m/PostMarketOS-Samsung-I927 Github page containing an attempt]<br />
* {{MR|195|pmaports}} initial MR with mainline kernel<br />
* {{MR|193|pmaports}} initial MR with downstream kernel (was dropped in favor of mainline kernel)<br />
* {{MR|238|pmaports}} various improvements (bluetooth, audio, xorg config, armv7, etc)</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Captivate_Glide_(samsung-i927)&diff=6277Samsung Captivate Glide (samsung-i927)2019-02-28T16:52:52Z<p>GrantM11235: /* Hardware */ OTG does not work yet</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Captivate Glide<br />
| codename = samsung-i927<br />
| image = File:sgh-i927.jpg<br />
| imagecaption = Samsung Captivate Glide with its keyboard extended and back lights on<br />
| releaseyear = 2011<br />
| originalsoftware = Android 4.0.4<br />
| chipset = Nvidia Tegra 2 AP20H<br />
| cpu = Dual-core 1.0 GHz Cortex-A9<br />
| gpu = NVIDIA GeForce ULP (Tegra 2)<br />
| storage = 8 GB<br />
| display = 480x800 AMOLED<br />
| memory = 1 GB<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = P<br />
| status_xwayland =<br />
| status_fde = Y<br />
| status_mainline = P<br />
| status_battery = P<br />
| status_3d = P<br />
| status_accel =<br />
| status_audio =<br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps =<br />
| status_mobiledata =<br />
| status_sms =<br />
| status_calls =<br />
| status = boots<br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* cerg2010cerg2010<br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== What works ==<br />
* Kernel compilation<br />
* Flash via Heimdall<br />
* Booting<br />
<br />
== How to enter flash mode ==<br />
Press and hold <code>Volume Up</code> + <code>Power</code> simultaneously. Then click <code>Volume Up</code> to confirm.<br />
<br />
== How to enter recovery mode ==<br />
Press and hold <code>Volume Down</code> + <code>Power</code> simultaneously.<br />
<br />
== Installation ==<br />
<!-- add more sections below as necessary, e.g. Wifi, photos, ... --><br />
<br />
== Hardware ==<br />
{|class="wikitable feature-colors"<br />
! Status<br />
! Hardware<br />
! Info<br />
|-<br />
| P<br />
|Power<br />
|There's 3-4 power chips: max8907c, max8922, max17043 and unknown chip controlling camera power - on downstream kernel, it's driver called "m5mo_power", it works on I2C bus number 16 at address 0x3E. 17043 is supported by 17040 driver - the only difference is ALRT interrupt, which is sent on low battery.<br />
|-<br />
| Y<br />
|Display panel<br />
|Samsung S6E63M0. Supported by driver from PabloPL, which makes it's way to mainline. Panel supports flipping (horizontal/vertical/180 rotation) and changing polarity of H/VSYNC via internal GTCON register. Exact register mapping is not documented and datasheet is not available. Also, timings are changed to make it work with correct colors and without shift on Tegra<br />
|-<br />
| Y<br />
|Touchscreen<br />
|Atmel mXT224(e). Works fine without maxtouch.cfg.<br />
|-<br />
| Y<br />
|QWERTY keyboard<br />
|STMPE1801. Mainline kernel supports the chip, but not the keyboard controller, so we use a patched version. Built-in LED is supported via GPIO. Keymap is missing.<br />
|-<br />
| P<br />
|USB<br />
|Only gadget mode is supported for now. [https://gitlab.com/postmarketOS/pmaports/merge_requests/238#note_145728362 OTG does not work yet]. HSIC mode is missing, which makes our modem not working. Not sure if we can make it work in non-HSIC mode. fsa9480 is used for cable type detection - it's supported by mainline kernel, but no Device Tree bindings available. There's a driver for fsa9480 with DT support in PabloPL repo, but it's not used for now.<br />
|-<br />
| Y<br />
|SDHCI<br />
|Works, but card detection is weird. There's a separate GPIO for card detection, but in downstream kernel it also checks for GPIO on STMPE controller. For now, broken-cd property is used in Device Tree, making detection work in polling mode. WiFi chip and internal memory also run on SDHCI bus.<br />
|-<br />
| P<br />
|WiFi<br />
|Broadcom BCM4330. Something is happening with firmware: a long list of warnings is displayed on boot. The reason seems to be channel bandwidth - the code internally iterates over (supported) channels and checks for a bandwidth, and if it's not 40MHz, it outputs a warning. On 5GHz band, only 20MHz bandwidth is supported - device successfully scans for APs on 40MHz and 80MHz bandwidths, but doesn't associate - wpa_supplicant reports and error with bssid=00:00:... and status_code=16 (probably timeout code).<br />
|-<br />
| Y<br />
| GPIO keys<br />
|There is 4 keys on GPIO: Power, Volume up, Volume down and keyboard HALL sensor.<br />
|-<br />
| Y<br />
|Touchkey<br />
|MCS5080. Mainline driver available, but it's bugged, has no DT bindings and not full. A slightly patched version is used with key reading fixed and internal LED support.<br />
|-<br />
| Y<br />
|Vibra<br />
|ISA1200. Driver from p4wifi kernel is used, but there's also another driver from CAF(?).<br />
|-<br />
|<br />
|Bluetooth<br />
|Broadcom BCM4330. Not tested.<br />
|-<br />
|<br />
|Sound<br />
|WM8994. Chip is supported in mainline but Tegra bindings not available. For now, driver from p4wifi is used. This one also requires mapping configuration.<br />
|-<br />
|<br />
|MHL<br />
|SII9234. No extcon support in mainline driver. Enabling this chip causes screen resolution to be set to 1024x800 instead of 480x800, so it's disabled for now.<br />
|-<br />
|<br />
|Proximity sensor<br />
|CM3663. No driver in mainline kernel available.<br />
|-<br />
|<br />
|Back camera<br />
|Fujitsu M5MO. It is supported by mainline, but has no DT bindings. May have it's own PMIC<br />
|-<br />
|<br />
|Front camera<br />
|Samsung S5K6AAFX. It is supported by mainline, but has no DT bindings. Power controlled by m5mo_pmic in downstream.<br />
|-<br />
|<br />
|Modem<br />
|XMM6260. Operates on USB with HSIC mode, but also has GPIOs.<br />
|-<br />
| P<br />
|Other sensors<br />
|These are just not tested, but driver available and probing works: NCT1008 (temperature), MPU3050 (gyro), KXTF9 (accel), AK8975 (compass), SIRFstarIV (GPS, actual chip is unknown. This one is notable because it's supported by new kernel GPS framework).<br />
|}<br />
<br />
== Keycodes ==<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+Keyboard<br />
|rowspan="2"|139<br />
|16<br />
|17<br />
|18<br />
|19<br />
|20<br />
|21<br />
|22<br />
|23<br />
|24<br />
|25<br />
|14<br />
|rowspan="2"|127<br />
|-<br />
|30<br />
|31<br />
|32<br />
|33<br />
|34<br />
|35<br />
|36<br />
|37<br />
|38<br />
|103<br />
|28<br />
|-<br />
|rowspan="2"|102<br />
|42<br />
|44<br />
|45<br />
|46<br />
|47<br />
|48<br />
|49<br />
|50<br />
|105<br />
|352<br />
|106<br />
|rowspan="2"|158<br />
|-<br />
|464<br />
|29<br />
|15<br />
|51<br />
|colspan="3"|57<br />
|52<br />
|214<br />
|108<br />
|53<br />
|}<br />
<br />
{|class="wikitable"<br />
|+Side buttons<br />
!Button<br />
!Keycode<br />
|-<br />
|Volume Down<br />
|114<br />
|-<br />
|Volume Up<br />
|115<br />
|-<br />
|Power<br />
|116<br />
|}<br />
<br />
== See also ==<br />
* [https://github.com/Moocow9m/PostMarketOS-Samsung-I927 Github page containing an attempt]<br />
* {{MR|195|pmaports}} initial MR with mainline kernel<br />
* {{MR|193|pmaports}} initial MR with downstream kernel (was dropped in favor of mainline kernel)<br />
* {{MR|238|pmaports}} various improvements (bluetooth, audio, xorg config, armv7, etc)</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Captivate_Glide_(samsung-i927)&diff=6276Samsung Captivate Glide (samsung-i927)2019-02-28T16:33:48Z<p>GrantM11235: Switch to armv7</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Captivate Glide<br />
| codename = samsung-i927<br />
| image = File:sgh-i927.jpg<br />
| imagecaption = Samsung Captivate Glide with its keyboard extended and back lights on<br />
| releaseyear = 2011<br />
| originalsoftware = Android 4.0.4<br />
| chipset = Nvidia Tegra 2 AP20H<br />
| cpu = Dual-core 1.0 GHz Cortex-A9<br />
| gpu = NVIDIA GeForce ULP (Tegra 2)<br />
| storage = 8 GB<br />
| display = 480x800 AMOLED<br />
| memory = 1 GB<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = P<br />
| status_xwayland =<br />
| status_fde = Y<br />
| status_mainline = P<br />
| status_battery = P<br />
| status_3d = P<br />
| status_accel =<br />
| status_audio =<br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps =<br />
| status_mobiledata =<br />
| status_sms =<br />
| status_calls =<br />
| status = boots<br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* cerg2010cerg2010<br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== What works ==<br />
* Kernel compilation<br />
* Flash via Heimdall<br />
* Booting<br />
<br />
== How to enter flash mode ==<br />
Press and hold <code>Volume Up</code> + <code>Power</code> simultaneously. Then click <code>Volume Up</code> to confirm.<br />
<br />
== How to enter recovery mode ==<br />
Press and hold <code>Volume Down</code> + <code>Power</code> simultaneously.<br />
<br />
== Installation ==<br />
<!-- add more sections below as necessary, e.g. Wifi, photos, ... --><br />
<br />
== Hardware ==<br />
{|class="wikitable feature-colors"<br />
! Status<br />
! Hardware<br />
! Info<br />
|-<br />
| P<br />
|Power<br />
|There's 3-4 power chips: max8907c, max8922, max17043 and unknown chip controlling camera power - on downstream kernel, it's driver called "m5mo_power", it works on I2C bus number 16 at address 0x3E. 17043 is supported by 17040 driver - the only difference is ALRT interrupt, which is sent on low battery.<br />
|-<br />
| Y<br />
|Display panel<br />
|Samsung S6E63M0. Supported by driver from PabloPL, which makes it's way to mainline. Panel supports flipping (horizontal/vertical/180 rotation) and changing polarity of H/VSYNC via internal GTCON register. Exact register mapping is not documented and datasheet is not available. Also, timings are changed to make it work with correct colors and without shift on Tegra<br />
|-<br />
| Y<br />
|Touchscreen<br />
|Atmel mXT224(e). Works fine without maxtouch.cfg.<br />
|-<br />
| Y<br />
|QWERTY keyboard<br />
|STMPE1801. Mainline kernel supports the chip, but not the keyboard controller, so we use a patched version. Built-in LED is supported via GPIO. Keymap is missing.<br />
|-<br />
| P<br />
|USB<br />
|Only gadget mode is supported for now. There's a GPIO for OTGID pin, but I can't test it. HSIC mode is missing, which makes our modem not working. Not sure if we can make it work in non-HSIC mode. fsa9480 is used for cable type detection - it's supported by mainline kernel, but no Device Tree bindings available. There's a driver for fsa9480 with DT support in PabloPL repo, but it's not used for now.<br />
|-<br />
| Y<br />
|SDHCI<br />
|Works, but card detection is weird. There's a separate GPIO for card detection, but in downstream kernel it also checks for GPIO on STMPE controller. For now, broken-cd property is used in Device Tree, making detection work in polling mode. WiFi chip and internal memory also run on SDHCI bus.<br />
|-<br />
| P<br />
|WiFi<br />
|Broadcom BCM4330. Something is happening with firmware: a long list of warnings is displayed on boot. The reason seems to be channel bandwidth - the code internally iterates over (supported) channels and checks for a bandwidth, and if it's not 40MHz, it outputs a warning. On 5GHz band, only 20MHz bandwidth is supported - device successfully scans for APs on 40MHz and 80MHz bandwidths, but doesn't associate - wpa_supplicant reports and error with bssid=00:00:... and status_code=16 (probably timeout code).<br />
|-<br />
| Y<br />
| GPIO keys<br />
|There is 4 keys on GPIO: Power, Volume up, Volume down and keyboard HALL sensor.<br />
|-<br />
| Y<br />
|Touchkey<br />
|MCS5080. Mainline driver available, but it's bugged, has no DT bindings and not full. A slightly patched version is used with key reading fixed and internal LED support.<br />
|-<br />
| Y<br />
|Vibra<br />
|ISA1200. Driver from p4wifi kernel is used, but there's also another driver from CAF(?).<br />
|-<br />
|<br />
|Bluetooth<br />
|Broadcom BCM4330. Not tested.<br />
|-<br />
|<br />
|Sound<br />
|WM8994. Chip is supported in mainline but Tegra bindings not available. For now, driver from p4wifi is used. This one also requires mapping configuration.<br />
|-<br />
|<br />
|MHL<br />
|SII9234. No extcon support in mainline driver. Enabling this chip causes screen resolution to be set to 1024x800 instead of 480x800, so it's disabled for now.<br />
|-<br />
|<br />
|Proximity sensor<br />
|CM3663. No driver in mainline kernel available.<br />
|-<br />
|<br />
|Back camera<br />
|Fujitsu M5MO. It is supported by mainline, but has no DT bindings. May have it's own PMIC<br />
|-<br />
|<br />
|Front camera<br />
|Samsung S5K6AAFX. It is supported by mainline, but has no DT bindings. Power controlled by m5mo_pmic in downstream.<br />
|-<br />
|<br />
|Modem<br />
|XMM6260. Operates on USB with HSIC mode, but also has GPIOs.<br />
|-<br />
| P<br />
|Other sensors<br />
|These are just not tested, but driver available and probing works: NCT1008 (temperature), MPU3050 (gyro), KXTF9 (accel), AK8975 (compass), SIRFstarIV (GPS, actual chip is unknown. This one is notable because it's supported by new kernel GPS framework).<br />
|}<br />
<br />
== Keycodes ==<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+Keyboard<br />
|rowspan="2"|139<br />
|16<br />
|17<br />
|18<br />
|19<br />
|20<br />
|21<br />
|22<br />
|23<br />
|24<br />
|25<br />
|14<br />
|rowspan="2"|127<br />
|-<br />
|30<br />
|31<br />
|32<br />
|33<br />
|34<br />
|35<br />
|36<br />
|37<br />
|38<br />
|103<br />
|28<br />
|-<br />
|rowspan="2"|102<br />
|42<br />
|44<br />
|45<br />
|46<br />
|47<br />
|48<br />
|49<br />
|50<br />
|105<br />
|352<br />
|106<br />
|rowspan="2"|158<br />
|-<br />
|464<br />
|29<br />
|15<br />
|51<br />
|colspan="3"|57<br />
|52<br />
|214<br />
|108<br />
|53<br />
|}<br />
<br />
{|class="wikitable"<br />
|+Side buttons<br />
!Button<br />
!Keycode<br />
|-<br />
|Volume Down<br />
|114<br />
|-<br />
|Volume Up<br />
|115<br />
|-<br />
|Power<br />
|116<br />
|}<br />
<br />
== See also ==<br />
* [https://github.com/Moocow9m/PostMarketOS-Samsung-I927 Github page containing an attempt]<br />
* {{MR|195|pmaports}} initial MR with mainline kernel<br />
* {{MR|193|pmaports}} initial MR with downstream kernel (was dropped in favor of mainline kernel)<br />
* {{MR|238|pmaports}} various improvements (bluetooth, audio, xorg config, armv7, etc)</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Captivate_Glide_(samsung-i927)&diff=6275Samsung Captivate Glide (samsung-i927)2019-02-28T15:50:31Z<p>GrantM11235: /* See also */ Add pmaports!238</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Captivate Glide<br />
| codename = samsung-i927<br />
| image = File:sgh-i927.jpg<br />
| imagecaption = Samsung Captivate Glide with its keyboard extended and back lights on<br />
| releaseyear = 2011<br />
| originalsoftware = Android 4.0.4<br />
| chipset = Nvidia Tegra 2 AP20H<br />
| cpu = Dual-core 1.0 GHz Cortex-A9<br />
| gpu = NVIDIA GeForce ULP (Tegra 2)<br />
| storage = 8 GB<br />
| display = 480x800 AMOLED<br />
| memory = 1 GB<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = P<br />
| status_xwayland =<br />
| status_fde = Y<br />
| status_mainline = P<br />
| status_battery = P<br />
| status_3d = P<br />
| status_accel =<br />
| status_audio =<br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps =<br />
| status_mobiledata =<br />
| status_sms =<br />
| status_calls =<br />
| status = boots<br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* cerg2010cerg2010<br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== What works ==<br />
* Kernel compilation<br />
* Flash via Heimdall<br />
* Booting<br />
<br />
== How to enter flash mode ==<br />
Press and hold <code>Volume Up</code> + <code>Power</code> simultaneously. Then click <code>Volume Up</code> to confirm.<br />
<br />
== How to enter recovery mode ==<br />
Press and hold <code>Volume Down</code> + <code>Power</code> simultaneously.<br />
<br />
== Installation ==<br />
<!-- add more sections below as necessary, e.g. Wifi, photos, ... --><br />
<br />
== Hardware ==<br />
{|class="wikitable feature-colors"<br />
! Status<br />
! Hardware<br />
! Info<br />
|-<br />
| P<br />
|Power<br />
|There's 3-4 power chips: max8907c, max8922, max17043 and unknown chip controlling camera power - on downstream kernel, it's driver called "m5mo_power", it works on I2C bus number 16 at address 0x3E. 17043 is supported by 17040 driver - the only difference is ALRT interrupt, which is sent on low battery.<br />
|-<br />
| Y<br />
|Display panel<br />
|Samsung S6E63M0. Supported by driver from PabloPL, which makes it's way to mainline. Panel supports flipping (horizontal/vertical/180 rotation) and changing polarity of H/VSYNC via internal GTCON register. Exact register mapping is not documented and datasheet is not available. Also, timings are changed to make it work with correct colors and without shift on Tegra<br />
|-<br />
| Y<br />
|Touchscreen<br />
|Atmel mXT224(e). Works fine without maxtouch.cfg.<br />
|-<br />
| Y<br />
|QWERTY keyboard<br />
|STMPE1801. Mainline kernel supports the chip, but not the keyboard controller, so we use a patched version. Built-in LED is supported via GPIO. Keymap is missing.<br />
|-<br />
| P<br />
|USB<br />
|Only gadget mode is supported for now. There's a GPIO for OTGID pin, but I can't test it. HSIC mode is missing, which makes our modem not working. Not sure if we can make it work in non-HSIC mode. fsa9480 is used for cable type detection - it's supported by mainline kernel, but no Device Tree bindings available. There's a driver for fsa9480 with DT support in PabloPL repo, but it's not used for now.<br />
|-<br />
| Y<br />
|SDHCI<br />
|Works, but card detection is weird. There's a separate GPIO for card detection, but in downstream kernel it also checks for GPIO on STMPE controller. For now, broken-cd property is used in Device Tree, making detection work in polling mode. WiFi chip and internal memory also run on SDHCI bus.<br />
|-<br />
| P<br />
|WiFi<br />
|Broadcom BCM4330. Something is happening with firmware: a long list of warnings is displayed on boot. The reason seems to be channel bandwidth - the code internally iterates over (supported) channels and checks for a bandwidth, and if it's not 40MHz, it outputs a warning. On 5GHz band, only 20MHz bandwidth is supported - device successfully scans for APs on 40MHz and 80MHz bandwidths, but doesn't associate - wpa_supplicant reports and error with bssid=00:00:... and status_code=16 (probably timeout code).<br />
|-<br />
| Y<br />
| GPIO keys<br />
|There is 4 keys on GPIO: Power, Volume up, Volume down and keyboard HALL sensor.<br />
|-<br />
| Y<br />
|Touchkey<br />
|MCS5080. Mainline driver available, but it's bugged, has no DT bindings and not full. A slightly patched version is used with key reading fixed and internal LED support.<br />
|-<br />
| Y<br />
|Vibra<br />
|ISA1200. Driver from p4wifi kernel is used, but there's also another driver from CAF(?).<br />
|-<br />
|<br />
|Bluetooth<br />
|Broadcom BCM4330. Not tested.<br />
|-<br />
|<br />
|Sound<br />
|WM8994. Chip is supported in mainline but Tegra bindings not available. For now, driver from p4wifi is used. This one also requires mapping configuration.<br />
|-<br />
|<br />
|MHL<br />
|SII9234. No extcon support in mainline driver. Enabling this chip causes screen resolution to be set to 1024x800 instead of 480x800, so it's disabled for now.<br />
|-<br />
|<br />
|Proximity sensor<br />
|CM3663. No driver in mainline kernel available.<br />
|-<br />
|<br />
|Back camera<br />
|Fujitsu M5MO. It is supported by mainline, but has no DT bindings. May have it's own PMIC<br />
|-<br />
|<br />
|Front camera<br />
|Samsung S5K6AAFX. It is supported by mainline, but has no DT bindings. Power controlled by m5mo_pmic in downstream.<br />
|-<br />
|<br />
|Modem<br />
|XMM6260. Operates on USB with HSIC mode, but also has GPIOs.<br />
|-<br />
| P<br />
|Other sensors<br />
|These are just not tested, but driver available and probing works: NCT1008 (temperature), MPU3050 (gyro), KXTF9 (accel), AK8975 (compass), SIRFstarIV (GPS, actual chip is unknown. This one is notable because it's supported by new kernel GPS framework).<br />
|}<br />
<br />
== Keycodes ==<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+Keyboard<br />
|rowspan="2"|139<br />
|16<br />
|17<br />
|18<br />
|19<br />
|20<br />
|21<br />
|22<br />
|23<br />
|24<br />
|25<br />
|14<br />
|rowspan="2"|127<br />
|-<br />
|30<br />
|31<br />
|32<br />
|33<br />
|34<br />
|35<br />
|36<br />
|37<br />
|38<br />
|103<br />
|28<br />
|-<br />
|rowspan="2"|102<br />
|42<br />
|44<br />
|45<br />
|46<br />
|47<br />
|48<br />
|49<br />
|50<br />
|105<br />
|352<br />
|106<br />
|rowspan="2"|158<br />
|-<br />
|464<br />
|29<br />
|15<br />
|51<br />
|colspan="3"|57<br />
|52<br />
|214<br />
|108<br />
|53<br />
|}<br />
<br />
{|class="wikitable"<br />
|+Side buttons<br />
!Button<br />
!Keycode<br />
|-<br />
|Volume Down<br />
|114<br />
|-<br />
|Volume Up<br />
|115<br />
|-<br />
|Power<br />
|116<br />
|}<br />
<br />
== See also ==<br />
* [https://github.com/Moocow9m/PostMarketOS-Samsung-I927 Github page containing an attempt]<br />
* {{MR|195|pmaports}} initial MR with mainline kernel<br />
* {{MR|193|pmaports}} initial MR with downstream kernel (was dropped in favor of mainline kernel)<br />
* {{MR|238|pmaports}} various improvements (bluetooth, audio, xorg config, armv7, etc)</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Downstream_kernel_specific_package&diff=6107Downstream kernel specific package2019-02-12T20:16:50Z<p>GrantM11235: /* See also */ Add link to Troubleshooting:kernel</p>
<hr />
<div>Unless a device has been [[The Mainline Kernel|mainlined]], we need to package the vendor kernel (also called "downstream kernel"). This is the reference for the {{alpine|APKBUILD}} files of vendor kernels.<br />
<br />
== Generate a template ==<br />
Usually you would generate both a new [[device specific package]] and a new vendor kernel package by running <code>pmbootstrap init</code> and typing in a new device name. In case you should only have a device package, but not a kernel package, you can regenerate the latter with <code>pmbootstrap aportgen linux-changeme-changeme</code> (you guessed it, <i>changeme</i> needs to be adjusted).<br />
<br />
The template gets improved every now and then to make porting easier, so don't be surprised when you are looking at older ports and their APKBUILDs look a bit more complicated than what gets generated from the latest <code>pmbootstrap</code> version. Essentially they are doing the same thing.<br />
<br />
== Modernize your aport ==<br />
To recreate your vendor kernel aport on top of the latest (and therefore most readable) template, do the following steps:<br />
<syntaxhighlight lang="shell-session"><br />
$ mv aports/device/linux-wiki-example aports/device/linux-wiki-example-old<br />
$ pmbootstrap aportgen linux-wiki-example<br />
(now adjust the new aport to use the sources and patches from the "-old" folder)<br />
$ pmbootstrap checksum linux-wiki-example<br />
$ pmbootstrap build --force linux-wiki-example<br />
(now test it on your device and make sure it boots, e.g. with 'pmbootstrap zap', 'pmbootstrap install', 'pmbootstrap flasher boot')<br />
$ rm -r aports/device/linux-wiki-example-old<br />
$ pmbootstrap pkgrel_bump linux-wiki-example<br />
$ git add -A<br />
$ git commit -m "device/linux-wiki-example: modernize aport"<br />
</syntaxhighlight><br />
<br />
== downstreamkernel_prepare ==<br />
Newly generated vendorkernel packages use the <code>downstreamkernel_prepare</code> function. That way we can share code between the APKBUILDs, so it is less redundant. To see what the function does, [https://gitlab.com/postmarketOS/pmaports/blob/master/main/devicepkg-dev/downstreamkernel_prepare.sh read the source over here].<br />
<br />
== GCC version ==<br />
The kernel gets compiled with {{wikipedia|GCC}}. Alpine Linux has been shipping version GCC 6 for a long time, but changed the default GCC version to GCC 8 in September 2018. It was discovered that at least one vendor kernel does not boot when compiled with GCC 8 ({{issue|103|pmaports}}), so we ended up packaging GCC 6 side by side with GCC 8. All existing 3.x vendor kernels that were packaged have been adjusted to use GCC 6 at this point in time, just to make sure we don't introduce any breakage there. The default for new packages is using the current GCC version that is packaged in Alpine (at time of writing: GCC 8).<br />
<br />
=== Use GCC 6 ===<br />
If your new kernel port does not boot at all, please try to compile it with GCC 6 and see if it works then.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: GCC 6 (doesn't boot when compiled with newer versions)<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc6-gcc"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
Then add <code>gcc6</code> to the kernel's <code>makedepends</code> line.<br />
<br />
<span style="font-size:80%; font-style: italic"><br />
Technical detail: the <code>if...</code> guard around setting the variables is necessary, because the <code>CC</code> and <code>CROSS_COMPILE</code> variables extend themselves. <code>abuild</code> will parse the <code>APKBUILD</code> a second time while running the <code>package()</code> step (inside fakeroot). So without the <code>if</code> statement, we will end up with <code>CC="gcc6-gcc6-gcc"</code> instead of <code>CC="gcc6-gcc"</code> which gets problematic if you are calling <code>make</code> to install kernel modules in the package section (as done in <code>linux-asus-tf101</code> for example). Interestingly, only <code>CC</code> and <code>CROSS_COMPILE</code> gets passed through, hence we can't simply check the <code>HOSTCC</code> variable.<br />
</span><br />
<br />
=== Use the newest GCC from Alpine ===<br />
Let's say you are using a device that has already been packaged, and you want to figure out if it also boots when compiled with a newer compiler.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: this kernel was only tested with GCC6. Feel free to make a merge<br />
# request if you find out that it is booting working with newer GCCs as<br />
# well. See <https://postmarketos.org/vendorkernel> for instructions.<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc6-gcc"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
Then remove the <code>gcc6</code> package from the <code>makedepends</code> line.<br />
<br />
Afterwards, remove the <code>compiler-gcc6.h</code> file from the aport folder, and from the <code>source</code> line. Instead you will probably need [https://gitlab.com/postmarketOS/pmaports/issues/103#note_104926654 other patches as linked here]. First try compiling without patches, then add one patch at a time to fix a specific problem. As usually, with <code>pmbootstrap checksum</code>, you can regenerate the checksums at the bottom of the file, this needs to be done whenever you change <code>source</code>.<br />
<br />
When you made it boot successfully, please increase the <code>pkgrel</code> and make a merge request.<br />
<br />
== heimdall-isorec ==<br />
If you have a device that only boots with [[Deviceinfo_flash_methods#heimdall-isorec|heimdall-isorec]], you will need to adjust your linux APKBUILD as follows:<br />
* add <code>busybox-static-armhf</code> to makedepends<br />
* copy the "init" file from [https://gitlab.com/postmarketOS/pmaports/tree/master/device/linux-samsung-i9100 <code>linux-samsung-i9100</code>] and customize the partition<br />
* add "init" to <code>source=</code> in the APKBUILD<br />
* adjust your <code>prepare()</code> like it's done in <code>linux-samsung-i9100</code> and adjust the paths in there<br />
<br />
You can search for more examples of heimdall-isorec deviecs with grep:<br />
<syntaxhighlight lang="shell-session"><br />
$ grep -r 'deviceinfo_flash_method="heimdall-isorec"' aports<br />
aports/device/device-samsung-i9070/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
aports/device/device-samsung-i9100/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
</syntaxhighlight><br />
<br />
== See also ==<br />
* [[Troubleshooting:kernel]]<br />
* [[device specific package]]<br />
* {{issue|103|pmaports}} Adjust to GCC8 upgrade in Alpine edge<br />
* {{MR|30|pmaports}} device/linux-*: use GCC-6 for all 3.x kernels<br />
<br />
[[Category:Technical Reference]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Troubleshooting:kernel&diff=6106Troubleshooting:kernel2019-02-12T20:15:12Z<p>GrantM11235: Add Kernel compilation: thumb conditional instruction should be in IT block</p>
<hr />
<div>Here are some common kernel compilation problems listed. For debugging a kernel that compiles, but does not boot, see [[Troubleshooting:boot]].<br />
<br />
== How to create a patch ==<br />
Patching a kernel is as simple as putting a <code>.patch</code> file in your <code>aports/device/linux-vendor-flavor</code> folder and adding the patch name to the <code>source</code> variable in your <code>APKBUILD</code> file. See also: [[How to create a patch when packaging software]].<br />
<br />
== undefined reference to kgsl_iommu_sync_lock ==<br />
<pre>drivers/built-in.o:(.data.rel+0x68c): undefined reference to kgsl_iommu_sync_lock'<br />
drivers/built-in.o:(.data.rel+0x690): undefined reference to kgsl_iommu_sync_unlock'</pre><br />
You need to apply the [https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device/linux-lg-mako/02_gpu-msm-fix-gcc5-compile.patch gpu-msm-fix-gcc5-compile.patch] patch.<br />
<br />
== How can I boot the kernel with some specific arguments? ==<br />
You can configure <code>CONFIG_CMDLINE</code> so that the arguments are permanent or change it in boot time using fastboot or pmbootstrap, for example:<br />
<br />
<pre>fastboot boot -c &quot;console=ttyHSL0,115200,n8&quot; ...<br />
<br />
pmbootstrap flasher boot --cmdline &quot;PMOS_NO_OUTPUT_REDIRECT&quot;</pre><br />
== MSM framebuffer doesn't work ==<br />
We found out that removing the 3D driver support makes the MSM framebuffer. See [https://github.com/postmarketOS/pmbootstrap/pull/66 #66].<br />
<br />
<pre>CONFIG_MSM_KGSL=n</pre><br />
== PTY allocation request failed ==<br />
<pre>PTY allocation request failed on channel 0<br />
-ash: a: unknown operand</pre><br />
Go to [https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting%3Akernel#common-configurations Common configurations], you have probably missed <code>CONFIG_DEVTMPFS</code>!<br />
<br />
== Kernel compilation: (some header file): No such file or directory ==<br />
Busybox' <code>zip</code> implementation does not extract symlinks. There are two workarounds. One is to use another archive type (typically kernel sources are downloaded from GitHub, where you can also get the source as <code>.tar.gz</code> - simply by changing the extension in the URL).<br />
<br />
The other workaround is to add <code>unzip</code> to the makedepends, so it uses the original unzip instead of the busybox version.<br />
<br />
(This has been fixed in busybox in the meantime.)<br />
<br />
== Kernel compilation: thumb conditional instruction should be in IT block ==<br />
<pre><br />
arch/arm/crypto/aesbs-core.S:449: Error: thumb conditional instruction should be in IT block -- `addeq r6,r6,#0x10'<br />
arch/arm/crypto/aesbs-core.S:904: Error: thumb conditional instruction should be in IT block -- `addeq r6,r6,#0x10'<br />
arch/arm/crypto/aesbs-core.S:2100: Error: thumb conditional instruction should be in IT block -- `subne r9,#0x10'<br />
</pre><br />
<br />
You can fix it by disabling <code>CONFIG_CRYPTO_ARM_AES_BS</code>.<br />
<br />
This was first noticed in {{MR|144|pmaports}}.<br />
<br />
== Kernel compilation: BusyBox lzma compression fails ==<br />
In case you get the following output:<br />
<br />
<pre>LZMA arch/arm/boot/compressed/piggy.lzma<br />
lzma: unrecognized option: 9<br />
BusyBox v1.26.2 (2017-06-11 06:37:13 GMT) multi-call binary.<br />
<br />
Usage: lzma -d [-cf] [FILE]...<br />
<br />
Decompress FILE (or stdin)<br />
<br />
-d Decompress<br />
-c Write to stdout<br />
-f Force</pre><br />
In the BusyBox version shipped with Alpine Linux, only lower compression levels are enabled (to reduce the binary size). The kernel you're building is configured to compress with LZMA at the highest compression level. Pick one of the following solutions:<br />
<br />
* Add <code>xz</code> to the <code>makedepends=</code> line. Then the &quot;real&quot; lzma binary will be used instead of the Busybox version. This is '''recommended''', because then your kernel will get built most similar to how it is built elsewhere, so you have the lowest risk of introducing a reason for the kernel not to boot (because the kernel is too big in size or something like that)<br />
* Reduce the compression ratio by adding [https://github.com/postmarketOS/pmbootstrap/blob/b4c9f93f0d7be1272f6a67de2128558ce58e1077/aports/linux-samsung-i9070/02_reduce_lzo_compression.patch this patch]. This will not introduce any dependency, but increase the kernel size.<br />
* Use another compression algorithm (run <code>pmbootstrap menuconfig linux-...</code> and change it there). Gzip should work, but will produce a big kernel, because pmbootstrap currently installs a workaround to always use the fastest compression method (<code>-1</code>), when the most compressing one (<code>-9</code>) is chosen. This will increase the kernel size the most.<br />
<br />
== Android Kernel compilation fails on warnings (not on errors) (-Werror) ==<br />
Don't even bother fixing all those warnings, there are too many of them and we don't want the outdated Android kernels in the long run anyway! When you generate your kernel APKBUILD with <code>pmbootstrap init</code>, then you should have code in the <code>prepare()</code> that automatically removes the <code>-Werror</code> parameter in all Makefiles.<br />
<br />
==== Building the kernel with Android's build system ====<br />
It might be useful for debugging to build Android's kernel with Android's build system.<br />
<br />
You can follow the LineageOS building guide for your device (see [https://wiki.lineageos.org/devices/titan/build this] for titan device as example).<br />
<br />
The process should be similar for other devices:<br />
<br />
<source lang="bash"># make some directories<br />
mkdir -p ~/bin<br />
mkdir -p ~/android/lineage<br />
<br />
# download the 'repo' tool<br />
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo<br />
chmod a+x ~/bin/repo<br />
<br />
# clone LineageOS<br />
cd ~/android/lineage<br />
~/bin/repo init -u https://github.com/LineageOS/android.git -b cm-14.1<br />
<br />
# Download the rest of dependencies (this will take a while and about *TODO* GB of disk space)<br />
~/bin/repo sync<br />
<br />
# now prepare the build for your device (replace 'titan' with the device you want to for the kernel for)<br />
source build/envsetup.sh<br />
breakfast titan<br />
<br />
# Now instead of following the rest of the guide (which will compile both Android and the kernel<br />
# for your device), simply compile the kernel:<br />
mka kernel<br />
<br />
# This command will also generate the device tree, initramfs and boot.img images<br />
mka bootimage</source><br />
You can check the <code>$OUT</code> environment variable and cd into it. In the case of titan the interesting generated files are:<br />
<br />
* <code>~/android/lineage/out/target/product/titan/boot.img</code> (boot image ready to be flashed: kernel + initramfs)<br />
* <code>~/android/lineage/out/target/product/titan/dt.img</code> (device trees)<br />
* <code>~/android/lineage/out/target/product/titan/kernel</code> (linux image)<br />
* <code>~/android/lineage/out/target/product/titan/ramdisk.img</code> (compressed initramfs)<br />
<br />
The defconfig used is available at <code>~/android/lineage/kernel/motorola/msm8226/arch/arm/configs/titan_defconfig</code><br />
<br />
==== Error: selected processor does not support ARM mode `smc #0' ====<br />
Try this patch: https://github.com/imoseyon/leanKernel-galaxy-nexus/pull/6<br />
<br />
== TLS (SSL/HTTPS) is broken! ==<br />
If you see messages like these, when trying to access HTTPS pages, read on:<br />
<pre><br />
Connecting to pastebin.com (104.20.209.21:443)<br />
ssl_client: pastebin.com: TLS connect failed<br />
wget: error getting response: Connection reset by peer<br />
</pre><br />
<br />
You are probably running an older kernel (pre 3.17), which does not yet have the "getrandom" syscall. This is required by modern openssl/libressl versions (Alpine was on libressl for a long time, then switched back to openssl). Check your kernel version, and if that is the case, and [[the Mainline Kernel|mainlining]] is not feasible for you, consider backporting the getrandom syscall like done in {{MR|69|pmaports}}. This issue was discussed in {{issue|107|pmaports}}.</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Motorola_Moto_G4_(motorola-athene)&diff=6103Motorola Moto G4 (motorola-athene)2019-02-12T17:57:12Z<p>GrantM11235: Fix name</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Motorola<br />
| name = Moto G4<br />
| codename = motorola-athene<br />
| image = File:Moto_G4_pmOS_MATE.png<br />
| imagecaption = Moto G4<br />
| releaseyear = 2016<br />
| originalsoftware = Android 6.0.1<br />
| chipset = Qualcomm MSM8952 Snapdragon 617<br />
| cpu = Octa-core 1.5GHz Cortex-A53<br />
| gpu = Adreno 405 GPU<br />
| storage = 16 or 32 GB<br />
| display = Full HD (1920 x 1080)<br />
| memory = 2 or 3 GB<br />
| architecture = aarch64<br />
| status_usbnet = Y<br />
| status_flashing = P<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = <br />
| status_xwayland = Y<br />
| status_fde = <br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* fengjiongmax<br />
* thejsa<br />
<br />
== Maintainer(s) ==<br />
<br />
== How to enter flash mode ==<br />
* Power + Volume Down buttons<br />
<br />
== Installation ==<br />
<source><br />
$ pmbootstrap flasher flash_rootfs<br />
$ pmbootstrap flasher boot<br />
</source><br />
<br />
== See also ==<br />
* {{github|1412}} initial PR<br />
* {{github|1401}} initial port issue</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Captivate_Glide_(samsung-i927)&diff=6090Samsung Captivate Glide (samsung-i927)2019-02-09T19:08:15Z<p>GrantM11235: Add Keycodes section</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Captivate Glide<br />
| codename = samsung-sgh-i927<br />
| image = File:sgh-i927.jpg<br />
| imagecaption = Samsung Captivate Glide with its keyboard extended and back lights on<br />
| releaseyear = 2011<br />
| originalsoftware = Android 4.0.4<br />
| chipset = Nvidia Tegra 2 AP20H<br />
| cpu = Dual-core 1.0 GHz Cortex-A9<br />
| gpu = NVIDIA GeForce ULP (Tegra 2)<br />
| storage = 8 GB<br />
| display = 480x800 AMOLED<br />
| memory = 1 GB<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland =<br />
| status_fde =<br />
| status_mainline = Y<br />
| status_battery = Y<br />
| status_3d =<br />
| status_accel =<br />
| status_audio =<br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps =<br />
| status_mobiledata =<br />
| status_sms =<br />
| status_calls =<br />
| status = boots<br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* cerg2010cerg2010<br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
* ''[[user:benwaffle|benwaffle]]''<br />
* ''[[user:Moocow9m|Moocow9m]]''<br />
<br />
== What works ==<br />
* Kernel compilation<br />
* Flash via Heimdall<br />
* Booting<br />
<br />
== How to enter flash mode ==<br />
Press and hold <code>Volume Up</code> + <code>Power</code> simultaneously. Then click <code>Volume Up</code> to confirm.<br />
<br />
== How to enter recovery mode ==<br />
Press and hold <code>Volume Down</code> + <code>Power</code> simultaneously.<br />
<br />
== Installation ==<br />
<!-- add more sections below as necessary, e.g. Wifi, photos, ... --><br />
<br />
== Keycodes ==<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+Keyboard<br />
|rowspan="2"|139<br />
|16<br />
|17<br />
|18<br />
|19<br />
|20<br />
|21<br />
|22<br />
|23<br />
|24<br />
|25<br />
|14<br />
|rowspan="2"|127<br />
|-<br />
|30<br />
|31<br />
|32<br />
|33<br />
|34<br />
|35<br />
|36<br />
|37<br />
|38<br />
|103<br />
|28<br />
|-<br />
|rowspan="2"|102<br />
|42<br />
|44<br />
|45<br />
|46<br />
|47<br />
|48<br />
|49<br />
|50<br />
|105<br />
|352<br />
|106<br />
|rowspan="2"|158<br />
|-<br />
|464<br />
|29<br />
|15<br />
|51<br />
|colspan="3"|57<br />
|52<br />
|214<br />
|108<br />
|53<br />
|}<br />
<br />
{|class="wikitable"<br />
|+Side buttons<br />
!Button<br />
!Keycode<br />
|-<br />
|Volume Down<br />
|114<br />
|-<br />
|Volume Up<br />
|115<br />
|-<br />
|Power<br />
|116<br />
|}<br />
<br />
== See also ==<br />
* [https://github.com/Moocow9m/PostMarketOS-Samsung-I927 Github page containing current info]<br />
* {{MR|195|pmaports}} initial MR with mainline kernel<br />
* {{MR|193|pmaports}} initial MR with downstream kernel (was dropped in favor of mainline kernel)</div>GrantM11235https://wiki.postmarketos.org/index.php?title=User:GrantM11235&diff=6086User:GrantM112352019-02-08T18:09:03Z<p>GrantM11235: /* Owns devices */ Add i927</p>
<hr />
<div>{| class="wikitable"<br />
| GitLab<br />
| [https://gitlab.com/GrantM11235 GrantM11235]<br />
|-<br />
| Matrix<br />
| [https://matrix.to/#/@grantm11235:matrix.org @grantm11235:matrix.org]<br />
|}<br />
<br />
== Owns devices ==<br />
<br />
{{My devices}}<br />
{{Owns device|Samsung_Galaxy_S4_(samsung-jflte)}}<br />
{{Owns device|Samsung_Captivate_Glide_(samsung-i927)}}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Mainlining_FAQ&diff=6084Mainlining FAQ2019-02-08T17:48:22Z<p>GrantM11235: /* Writing dmesg to RAM and reading it out after reboot */ Add todo to fix links</p>
<hr />
<div><blockquote><br />
'''"Mainlining isn't always fun, but it's hella rewarding"'''<br />
</blockquote><br />
<br />
Various information collected from [[Matrix_and_IRC|#postmarketOS]]. See [[The Mainline Kernel]] for a more howto-style page.<br />
<br />
== How to start? ==<br />
* [[Serial_debugging|Serial cable]] highly recommended<br />
* First step will be to find out how much your device is already supported by mainline<br />
* Check if your soc is supported.. that will be basic building block<br />
* There's really no point doing display till you have uart or USB working<br />
<br />
== Writing dmesg to RAM and reading it out after reboot ==<br />
During the mainlining process you need to be able to get the <code>dmesg</code> output from the device. Typically this is done with a serial cable (see below). Sometimes making such a cable is relatively easy by using the audio jack, but in other cases it requires opening the device or is not possible at all. Here is a less comfortable alternative.<br />
<br />
In Android kernels it is possible to write the output of <code>dmesg</code> to memory, and read it out after reboot from <code>/proc/last_kmsg</code>. So while you are mainlining, you can use Android's <code>ram_console</code> driver from your downstream kernel to dump <code>dmesg</code> to memory as well, then reboot to the downstream kernel and read out <code>/proc/last_kmesg</code>. Quote from decatf:<br />
<blockquote><br />
The Android ram_console does this. It should exist in many if not most Android kernels. The driver is registered the board/machine init. I am still using it even on kernel 4.16. On my device I can force reboot to a downstream recovery kernel and read last_kmsg from a kernel that booted nothing but the bare device tree and the ram_console driver.<br />
<br />
{{todo | Fix these broken links}}<br />
<br />
* Allocate the same memory block as your downstream or recovery kernel. Do this by specifying reserved-memory in device tree.<br />
https://github.com/Decatf/linux/blob/tegra-next-p4wifi_pmos/arch/arm/boot/dts/tegra20-samsung_p3.dts#L47-L50<br />
* Initialize the ram_console driver with the appropriate memory address and size in the <code>machine_init</code> function for your device.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/arch/arm/mach-tegra/board-p4wifi.c#L480-L481<br />
* Make sure the driver is using the same ram console signature as your downstream kernel.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/drivers/staging/android/ram_console.c#L41<br />
</blockquote><br />
<br />
On more recent devices Android has transitioned over to using the mainline kernels pstore ramoops functionality. If your device is recent enough that the recovery uses pstore then you only need to add a node for the ramoops driver to device tree.<br />
<br />
The memory allocation address of the ram_console and pstore are logged to dmesg. The memory address in following example corresponds to the samsung-p4wifi device in the steps above. To find the memory allocation address of ram_console:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep ram_console<br />
[ 0.906530] ram_console: got buffer at 2e600000, size 100000<br />
</syntaxhighlight><br />
<br />
To find the memory allocation address of pstore ramoops:<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep attached<br />
[ 0.074293] ramoops: attached 0x100000@0x2e500000, ecc: 0/0<br />
</syntaxhighlight><br />
<br />
See also: [http://docs.halium.org/en/latest/porting/debug-build/dmesg.html Halium docs on dmesg]<br />
<br />
== Serial cable ==<br />
=== Can I do it without a serial cable? ===<br />
* in theory, yes by dumping dmesg to RAM (see above)<br />
* once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel (see below)<br />
<br />
=== How to get serial output? (serial cable) ===<br />
* enable the serial device for your kernel (e.g. for OMAP: CONFIG_SERIAL_OMAP and CONFIG_SERIAL_OMAP_CONSOLE)<br />
* add console=ttySAC0,115200 to the kernel cmdline<br />
* it might also be ttyO0 (uppercase O for OMAP chipset)<br />
<br />
=== How to get serial output over USB? (USB serial gadget) ===<br />
The Linux kernel can act like a serial device, and it's possible to output what you would get on the serial port over that fake serial device directly via USB to your PC.<br />
* set CONFIG_USB_G_SERIAL=y and enable USB as console, and add console=ttyGS0,115200 to the cmdline<br />
<br />
=== Is it possible to boot kernels with a serial cable? ===<br />
* No. Just flash with a normal cable and switch to the serial cable to read the log output.<br />
* Once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel<br />
<br />
== There's no device tree source (dts) in the kernel fork for my device, how do I make one? ==<br />
<br />
Previous kernels used <code>board-*.c</code> files instead of the <code>dts</code> files. These are in folders such as <code>arch/arm/mach-omap2</code> ([https://android.googlesource.com/kernel/omap/+/android-omap-tuna-3.0/arch/arm/mach-omap2/ example]).<br />
The idea is that you'll need to convert these to <code>dts</code> files. Doing so manually for each of them is a huge and error-prone task, better use one of the following techniques:<br />
* Strip down <code>dts</code> from similar hardware (n900 in case of omap3?) and try to get it to boot<br />
* Add support to an existing mainline driver (e.g. mms1'''4'''4 and mms1'''1'''4 are probably pretty similar) rather than forward-porting the old driver<br />
* Forward-port the board files to recent kernels (new kernels still understand board files for some hardware, but not for all!), then strip them down to a bare minimum you can still test (where serial or usb is still working, so you know that the device boots), and then convert that do <code>dts</code>.<br />
<br />
Finding the best approach is very hardware specific. If you know C and think you have tried some of the methods above without success, consider asking the maintainers of the chipset in the kernel. Regarding OMAP, Pavel [https://github.com/postmarketOS/pmbootstrap/issues/1021#issuecomment-354669394 offered] that you could CC him.<br />
<br />
See also: {{github|1021}}<br />
<br />
<br />
Consider updating your device's kernel to the latest Android stable version first ([https://github.com/android-linux-stable/notes these instruction] might make it easier to convert the board files to dtbs) and then going to real mainline from there.<br />
<br />
== What options are needed to get USB network? ==<br />
* USB_ETH IIRC <br />
* also check the defconfig in aports/main/linux-postmarketos-mainline <br />
<br />
== How to make OpenRC print its output to the serial port? ==<br />
* just set <code>RC_LOGGING</code> to true in /etc/rc.conf<br />
* (it's the init system log like Starting etc.....[ok])<br />
<br />
== How can I compile kernel sources from a local git repo? ==<br />
* Clone the kernel with git (~5GB!)<br />
* Use the following command to build the mainline kernel package with the checked out sources<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux<br />
</syntaxhighlight><br />
* [https://github.com/postmarketOS/pmbootstrap/pull/1210#issuecomment-364590002 Implementation details]<br />
<br />
== How can I repackage the initramfs with custom modules? ==<br />
Run a normal installation to generate the initramfs:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
</syntaxhighlight><br />
<br />
And then writing a short shell script, that repackages the postmarketOS initramfs with the modules you compiled.<br />
After reading through it, adjust it as needed and execute it as root:<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/sh<br />
# Config<br />
device="oneplus-bacon"<br />
tmpdir="/tmp/pmOS-initfs-with-mainline-modules"<br />
work="$(pmbootstrap -q config work)"<br />
<br />
# Create temp folder<br />
[ -d "$tmpdir" ] && rm -rf "$tmpdir"<br />
mkdir -p "$tmpdir"<br />
<br />
# Extract the pmOS initramfs<br />
cp -v "$work/chroot_rootfs_$device/boot/initramfs-"* initramfs.gz<br />
gzip -d initramfs.gz<br />
cpio -i < initramfs<br />
<br />
# Remove existing modules<br />
rm -rf initramfs lib/modules<br />
<br />
#<br />
# CHANGEME: you need to write the commands that copy the kernel modules from your<br />
# kernel source folder into the initramfs here!<br />
#<br />
<br />
# Package the initramfs again<br />
cd "$tmpdir"<br />
find . -print0 | busybox cpio --quiet -o -H newc | gzip -1 > initramfs-repackaged<br />
</syntaxhighlight><br />
<br />
== How to merge kernel configs? ==<br />
The idea is, that we have a shared <code>linux-postmarketos-stable</code> package, which all mainlined devices use. Check [[Kernel_configuration#Automatically_merging_kernel_configuration]] for instructions on how to merge kernel configs somewhat efficiently with a script.<br />
<br />
== How to flash each postmarketOS partition from the rootfs to a different partition on the phone ==<br />
Usually pmOS writes the whole rootfs (which has its own /boot and / partitions) to one partition on the device ([[Partition-layout|more]]). If your mainline kernel isn't able to find the postmarketOS partition by label (even if you have enabled device mapper in the kernel config), then you could use the following workaround to flash each partition from the rootfs image to a real partition on the device.<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
$ pmbootstrap export<br />
$ losetup /dev/loop0 <pathtoimage><br />
$ dd if=/dev/loop0p1 of=boot_partition.img<br />
$ dd if=/dev/loop0p2 of=root_partition.img<br />
$ fastboot flash system root_partition.img<br />
$ fastboot flash cache boot_partition.img<br />
</syntaxhighlight><br />
<br />
== Display panel ==<br />
=== How to let the bootloader initialize the panel? ===<br />
opendata found a cool hack to let the bootloader initialize the display, which makes everything a lot easier. It only works with Sony Shinano and Rhine devices.<br />
<br />
* Make sure to base of downstream 3.4 kernel<br />
* Basically extract the dts from your downstream 3.4 kernel<br />
* Use DTC to convert it to a dts<br />
* Then delete everything after main header apart from display stuff (mdp, gpu) and anything in the spmi node<br />
* Then in the spmi node delete everything apart from wled and pm8941@0 gpios<br />
* That should be enough for bootloader to init display<br />
* Example:<br />
** 1. Stock downstream: https://ptpb.pw/hRmy.dts<br />
** 2. Minimum for display init: https://ptpb.pw/f2ye.dts<br />
** 3. mainline dts with second added into it: https://ptpb.pw/q28L.dts<br />
** Then just add it to simple panel with video mode and video hse<br />
<br />
=== Can I use the simple panel driver? ===<br />
* If your device shows the boot splash with mainline, simple panel should work<br />
* Adapt [https://github.com/flto/linux/commit/41bcfbe5f8f00a4a93e0a838456da51a50965e03 this commit] to make it use your panels values (hfp hbp etc)<br />
* now in flags add: <code>MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_HSE</code><br />
<br />
== Kernel is stuck during boot without any output ==<br />
* enable debug output with the kernel command line<br />
* consider adding kprint statements to narrow down where it hangs<br />
<br />
[[Category:Technical Reference]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=5999Samsung Galaxy S4 (samsung-jflte)2019-01-29T17:07:37Z<p>GrantM11235: /* Wifi */ Run wpa_supplicant as daemon</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre><br />
$ wpa_passphrase $YOUR_SSID | sudo tee /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=5998Samsung Galaxy S4 (samsung-jflte)2019-01-29T17:00:20Z<p>GrantM11235: /* Wifi */ Use sudo tee for wpa_passphrase</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre><br />
$ wpa_passphrase $YOUR_SSID | sudo tee /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=5997Samsung Galaxy S4 (samsung-jflte)2019-01-29T16:48:53Z<p>GrantM11235: Change arch to armv7</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armv7<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=5942Micro-USB Interface Controller2019-01-23T18:52:36Z<p>GrantM11235: /* Datasheets */ Add FSA9480</p>
<hr />
<div>{{todo|Add more information (which devices have one, how they are useful to us, what do jig and boot do, etc.)}}<br />
<br />
A Micro-USB Interface Controller (MUIC) is a USB multiplexer/switch. (Not a USB Host Controller like the name might imply)<br />
<br />
{| class="wikitable"<br />
|+UART Modes<br />
! Resistance<br />
! Jig<br />
! Boot<br />
|-<br />
|150k<br />
|Inactive<br />
|Inactive<br />
|-<br />
|523k<br />
|Active<br />
|Inactive<br />
|-<br />
|619k<br />
|Active<br />
|Active<br />
|}<br />
<br />
= Links =<br />
<br />
[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A Wikipedia: CEA-936-A]<br />
<br />
[https://standards.cta.tech/kwspub/published_docs/ANSI-CTA-936-A-W-Preview.pdf CEA-936-A USB Carkit Specification Preview]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://media.digikey.com/pdf/Data%20Sheets/Fairchild%20PDFs/FSA9480.pdf FSA9480]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]<br />
<br />
[[Category:Technical Reference]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=User:Ollieparanoid/Mainpage_rewrite&diff=5520User:Ollieparanoid/Mainpage rewrite2018-12-26T20:47:46Z<p>GrantM11235: Auto-scale image</p>
<hr />
<div>__NOTOC__<br />
<br />
<div style="max-width: 1200px;"><br />
<br />
<div class="res-img" style="float: left; width: 50%;"><br />
[[File:Postmarketos-shirt-logo.png]]<br />
</div><br />
<br />
<div style="border: 1px solid lightgray; background: #f8f8f8; padding: 0px 10px; width:260px; float: right;"><br />
[https://postmarketos.org postmarketOS] is an experimental, touch-optimized and pre-configured [https://alpinelinux.org Alpine Linux]. It can be installed on smartphones and other devices.<br />
</div><br />
<br />
<div style="float: right; margin-top: 50px; clear: right;"><br />
<!-- OVERVIEW --><br />
{{mainpage-button|smartphone|Devices}}<br />
{{mainpage-button|gtk-about|Interfaces|User Interfaces}}<br />
{{mainpage-button|camera-photo|Special:ListFiles|Gallery}}<br />
{{mainpage-button|emblem-shared|:Category:Community|Community}}<br />
{{mainpage-button|dialog-question|FAQ}}<br />
<br />
<br />
<!-- GUIDES --><br />
{{mainpage-button|document-save|Installation_guide|Installation}}<br />
{{mainpage-button|application-menu|Porting_guide|Porting}}<br />
{{mainpage-button|system-run|Mainlining_Guide|Mainlining}}<br />
{{mainpage-button|applications-utilities|:Category:Guide|''More Guides''}}<br />
<br />
<br />
<!-- CONTRIBUTING --><br />
{{mainpage-button|emote-love|Contributing}}<br />
</div></div>GrantM11235https://wiki.postmarketos.org/index.php?title=Using_prebuilt_kernels&diff=5419Using prebuilt kernels2018-12-21T03:57:50Z<p>GrantM11235: /* Running postmarketOS with a pre-built kernel */ Add note about base address for HTC devices</p>
<hr />
<div>Some vendors do not release the kernel source code, which is very bad for freedom and goes against the Linux kernel license (see [https://wiki.postmarketos.org/wiki/Troubleshooting#My_device_runs_the_Linux_kernel_.28e.g._Android.29.2C_but_the_vendor_does_not_provide_the_source My device runs the Linux kernel (e.g. Android), but the vendor does not provide the source] in the Troubleshooting page.<br />
<br />
But you can still extract the kernel image from a device that is running Android and use it to run postmarketOS. Of course this is ''totally discouraged'' because we want to make sure that we know the code our devices are running but you might find it useful in order to start hacking on postmarketOS without having the kernel source code.<br />
<br />
== Extracting boot.img from an Android device ==<br />
{{note|In this example the boot partition is named <code>msm_sdcc.1</code> but it might have a different name for your device.}}<br />
You can extract the kernel that is running your Android device, it doesn't matter if it's the stock ROM, LineageOS or any custom ROM. For this approach you need the <code>adb</code> tool and root permissions.<br />
<br />
<source lang="bash"># Connect to your Android device<br />
adb shell<br />
<br />
# Find the partition name<br />
ls -l /dev/block/platform/<br />
ls -l /dev/block/platform/msm_sdcc.1/by-name<br />
<br />
# From there we know that the boot partition is /dev/block/mmcblk0p14<br />
# Now we just dump the partition to a file (we need to root permissions)<br />
su<br />
cat /dev/block/mmcblk0p14 > /sdcard/boot.img<br />
chmod 0666 /sdcard/boot.img<br />
<br />
# Exit from adb and copy boot.img to your computer<br />
adb pull /sdcard/boot.img .</source><br />
<br />
== Running postmarketOS with a pre-built kernel ==<br />
{{note|Generating an initramfs when your device is not ported yet: Pick a similar device in <code>pmbootstrap init</code> and [[Installation_guide#pmbootstrap_install|run install]].}}<br />
You can use <code>unpackbootimg</code> (usage is described in [[How_to_find_device_specific_information#Fastboot_.28boot.img.29_flash_offsets|here]]) to extract the kernel from your recently extracted boot.img or from a LineageOS release and run it together with postmarketOS initramfs.<br />
<br />
If you extracted the kernel from you Stock ROM, it might not have encryption support enabled and in this case you would not be able to boot from an encrypted partition which is how postmarketOS works by default. To disable encryption in postmarketOS use <code>pmbootstrap install --no-fde</code>. You might need other modules as well for pmOS to work properly.<br />
<br />
<source lang="bash"># fastboot boot <kernel> [ <ramdisk> ]<br />
fastboot boot \<br />
uncompressed_boot/boot.img-zImage \<br />
~/.local/var/pmboostrap/chroot_rootfs-XXX-XXXX/boot/initramfs-lg-hammerhead</source><br />
<br />
{{Note|For HTC devices you may need to specify the base address, see {{issue|145}}}}<br />
<br />
Note that the '''fastboot boot''' command loads kernel (and eventually the ramdisk) in memory and does not write anything on partitions. <br />
<br />
Immediately after downloading kernel (and eventually the ram disk) in memory, it tries to boot it. If nothing appens, your device is frozen. You just have to remove battery to restart with your original kernel .<br />
<br />
== Maybe we can chainload the pmOS kernel? ==<br />
{{note|User forkbomb successfully booted a [https://postmarketos.org/blog/2017/12/31/219-days-of-postmarketOS/#mainline-linux-kernel bunch of Samsungs] [https://forkwhiletrue.me/posts/kexec-on-galaxy-s3/ with kexec(broken link)] [https://blog.forkwhiletrue.me/posts/kexec-on-galaxy-s3/ new link] into a mainline kernel!}}<br />
Linux kernels can load other kernels via the [https://en.wikipedia.org/wiki/Kexec kexec] syscall. The deal is, that signed bootloaders only allow signed kernels. But what if we repackaged the signed kernel with our own initramfs, that loads our own kernel via kexecboot from the boot subpartition? Not sure if this will work because of SELinux etc, but if it did, it would be a nice way to get around the bootloader's signed kernel enforcement! '''If you have an usecase for this, please open a ticket to discuss this further.'''<br />
<br />
More research showed, that the <code>kexec</code> syscall is usually disabled in such kernels. However, it could be possible to do <code>kexec</code> without it being enabled in the kernel (such as it has been done in the PS4 hack, where a kexec gets done on the PS4's BSD kernel, which does obviously not support this feature, to load a Linux kernel). This is ''a lot'' of work, but it would be an impressive hack!<br />
<br />
kexec is also used by [https://forum.xda-developers.com/showthread.php?t=2011403 MultiROM] in order to allow users to choose which ROM to boot up. For MultiROM support in pmbootstrap, see [https://github.com/postmarketOS/pmbootstrap/issues/421 issue #421].<br />
<br />
== Useful links ==<br />
<br />
* [https://github.com/lygstate/lygstate.github.com/blob/master/_posts/2014-03-10-Extract-boot.img-from-an-android-device.md 2014-03-10-Extract-boot.img-from-an-android-device.md]<br />
* [http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images HOWTO: Unpack, Edit, and Re-Pack Boot Images]<br />
<br />
[[Category:Guide]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Troubleshooting:kernel&diff=5397Troubleshooting:kernel2018-12-19T04:28:46Z<p>GrantM11235: /* Kernel compilation: BusyBox lzma compression fails */ Remove br</p>
<hr />
<div>Here are some common kernel compilation problems listed. For debugging a kernel that compiles, but does not boot, see [[Troubleshooting:boot]].<br />
<br />
== How to create a patch ==<br />
Patching a kernel is as simple as putting a <code>.patch</code> file in your <code>aports/device/linux-vendor-flavor</code> folder and adding the patch name to the <code>source</code> variable in your <code>APKBUILD</code> file. See also: [[How to create a patch when packaging software]].<br />
<br />
== undefined reference to kgsl_iommu_sync_lock ==<br />
<pre>drivers/built-in.o:(.data.rel+0x68c): undefined reference to kgsl_iommu_sync_lock'<br />
drivers/built-in.o:(.data.rel+0x690): undefined reference to kgsl_iommu_sync_unlock'</pre><br />
You need to apply the [https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device/linux-lg-mako/02_gpu-msm-fix-gcc5-compile.patch gpu-msm-fix-gcc5-compile.patch] patch.<br />
<br />
== How can I boot the kernel with some specific arguments? ==<br />
You can configure <code>CONFIG_CMDLINE</code> so that the arguments are permanent or change it in boot time using fastboot or pmbootstrap, for example:<br />
<br />
<pre>fastboot boot -c &quot;console=ttyHSL0,115200,n8&quot; ...<br />
<br />
pmbootstrap flasher boot --cmdline &quot;PMOS_NO_OUTPUT_REDIRECT&quot;</pre><br />
== MSM framebuffer doesn't work ==<br />
We found out that removing the 3D driver support makes the MSM framebuffer. See [https://github.com/postmarketOS/pmbootstrap/pull/66 #66].<br />
<br />
<pre>CONFIG_MSM_KGSL=n</pre><br />
== PTY allocation request failed ==<br />
<pre>PTY allocation request failed on channel 0<br />
-ash: a: unknown operand</pre><br />
Go to [https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting%3Akernel#common-configurations Common configurations], you have probably missed <code>CONFIG_DEVTMPFS</code>!<br />
<br />
== Kernel compilation: (some header file): No such file or directory ==<br />
Busybox' <code>zip</code> implementation does not extract symlinks. There are two workarounds. One is to use another archive type (typically kernel sources are downloaded from GitHub, where you can also get the source as <code>.tar.gz</code> - simply by changing the extension in the URL).<br />
<br />
The other workaround is to add <code>unzip</code> to the makedepends, so it uses the original unzip instead of the busybox version.<br />
<br />
(This has been fixed in busybox in the meantime.)<br />
<br />
== Kernel compilation: BusyBox lzma compression fails ==<br />
In case you get the following output:<br />
<br />
<pre>LZMA arch/arm/boot/compressed/piggy.lzma<br />
lzma: unrecognized option: 9<br />
BusyBox v1.26.2 (2017-06-11 06:37:13 GMT) multi-call binary.<br />
<br />
Usage: lzma -d [-cf] [FILE]...<br />
<br />
Decompress FILE (or stdin)<br />
<br />
-d Decompress<br />
-c Write to stdout<br />
-f Force</pre><br />
In the BusyBox version shipped with Alpine Linux, only lower compression levels are enabled (to reduce the binary size). The kernel you're building is configured to compress with LZMA at the highest compression level. Pick one of the following solutions:<br />
<br />
* Add <code>xz</code> to the <code>makedepends=</code> line. Then the &quot;real&quot; lzma binary will be used instead of the Busybox version. This is '''recommended''', because then your kernel will get built most similar to how it is built elsewhere, so you have the lowest risk of introducing a reason for the kernel not to boot (because the kernel is too big in size or something like that)<br />
* Reduce the compression ratio by adding [https://github.com/postmarketOS/pmbootstrap/blob/b4c9f93f0d7be1272f6a67de2128558ce58e1077/aports/linux-samsung-i9070/02_reduce_lzo_compression.patch this patch]. This will not introduce any dependency, but increase the kernel size.<br />
* Use another compression algorithm (run <code>pmbootstrap menuconfig linux-...</code> and change it there). Gzip should work, but will produce a big kernel, because pmbootstrap currently installs a workaround to always use the fastest compression method (<code>-1</code>), when the most compressing one (<code>-9</code>) is chosen. This will increase the kernel size the most.<br />
<br />
== Android Kernel compilation fails on warnings (not on errors) (-Werror) ==<br />
Don't even bother fixing all those warnings, there are too many of them and we don't want the outdated Android kernels in the long run anyway! When you generate your kernel APKBUILD with <code>pmbootstrap init</code>, then you should have code in the <code>prepare()</code> that automatically removes the <code>-Werror</code> parameter in all Makefiles.<br />
<br />
==== Building the kernel with Android's build system ====<br />
It might be useful for debugging to build Android's kernel with Android's build system.<br />
<br />
You can follow the LineageOS building guide for your device (see [https://wiki.lineageos.org/devices/titan/build this] for titan device as example).<br />
<br />
The process should be similar for other devices:<br />
<br />
<source lang="bash"># make some directories<br />
mkdir -p ~/bin<br />
mkdir -p ~/android/lineage<br />
<br />
# download the 'repo' tool<br />
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo<br />
chmod a+x ~/bin/repo<br />
<br />
# clone LineageOS<br />
cd ~/android/lineage<br />
~/bin/repo init -u https://github.com/LineageOS/android.git -b cm-14.1<br />
<br />
# Download the rest of dependencies (this will take a while and about *TODO* GB of disk space)<br />
~/bin/repo sync<br />
<br />
# now prepare the build for your device (replace 'titan' with the device you want to for the kernel for)<br />
source build/envsetup.sh<br />
breakfast titan<br />
<br />
# Now instead of following the rest of the guide (which will compile both Android and the kernel<br />
# for your device), simply compile the kernel:<br />
mka kernel<br />
<br />
# This command will also generate the device tree, initramfs and boot.img images<br />
mka bootimage</source><br />
You can check the <code>$OUT</code> environment variable and cd into it. In the case of titan the interesting generated files are:<br />
<br />
* <code>~/android/lineage/out/target/product/titan/boot.img</code> (boot image ready to be flashed: kernel + initramfs)<br />
* <code>~/android/lineage/out/target/product/titan/dt.img</code> (device trees)<br />
* <code>~/android/lineage/out/target/product/titan/kernel</code> (linux image)<br />
* <code>~/android/lineage/out/target/product/titan/ramdisk.img</code> (compressed initramfs)<br />
<br />
The defconfig used is available at <code>~/android/lineage/kernel/motorola/msm8226/arch/arm/configs/titan_defconfig</code><br />
<br />
==== Error: selected processor does not support ARM mode `smc #0' ====<br />
Try this patch: https://github.com/imoseyon/leanKernel-galaxy-nexus/pull/6</div>GrantM11235https://wiki.postmarketos.org/index.php?title=User:GrantM11235&diff=5261User:GrantM112352018-12-15T17:09:21Z<p>GrantM11235: </p>
<hr />
<div>{| class="wikitable"<br />
| GitLab<br />
| [https://gitlab.com/GrantM11235 GrantM11235]<br />
|-<br />
| Matrix<br />
| [https://matrix.to/#/@grantm11235:matrix.org @grantm11235:matrix.org]<br />
|}<br />
<br />
== Owns devices ==<br />
<br />
{{My devices}}<br />
{{Owns device|Samsung_Galaxy_S4_(samsung-jflte)}}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Downstream_kernel_specific_package&diff=5143Downstream kernel specific package2018-12-04T04:17:32Z<p>GrantM11235: Undo revision 5128 by GrantM11235 (talk)</p>
<hr />
<div>Unless a device has been [[The Mainline Kernel|mainlined]], we need to package the vendor kernel (also called "downstream kernel"). This is the reference for the {{alpine|APKBUILD}} files of vendor kernels.<br />
<br />
== Generate a template ==<br />
Usually you would generate both a new [[device specific package]] and a new vendor kernel package by running <code>pmbootstrap init</code> and typing in a new device name. In case you should only have a device package, but not a kernel package, you can regenerate the latter with <code>pmbootstrap aportgen linux-changeme-changeme</code> (you guessed it, <i>changeme</i> needs to be adjusted).<br />
<br />
The template gets improved every now and then to make porting easier, so don't be surprised when you are looking at older ports and their APKBUILDs look a bit more complicated than what gets generated from the latest <code>pmbootstrap</code> version. Essentially they are doing the same thing.<br />
<br />
== Modernize your aport ==<br />
To recreate your vendor kernel aport on top of the latest (and therefore most readable) template, do the following steps:<br />
<syntaxhighlight lang="shell-session"><br />
$ mv aports/device/linux-wiki-example aports/device/linux-wiki-example-old<br />
$ pmbootstrap aportgen linux-wiki-example<br />
(now adjust the new aport to use the sources and patches from the "-old" folder)<br />
$ pmbootstrap checksum linux-wiki-example<br />
$ pmbootstrap build --force linux-wiki-example<br />
(now test it on your device and make sure it boots, e.g. with 'pmbootstrap zap', 'pmbootstrap install', 'pmbootstrap flasher boot')<br />
$ rm -r aports/device/linux-wiki-example-old<br />
$ pmbootstrap pkgrel_bump linux-wiki-example<br />
$ git add -A<br />
$ git commit -m "device/linux-wiki-example: modernize aport"<br />
</syntaxhighlight><br />
<br />
== downstreamkernel_prepare ==<br />
Newly generated vendorkernel packages use the <code>downstreamkernel_prepare</code> function. That way we can share code between the APKBUILDs, so it is less redundant. To see what the function does, [https://gitlab.com/postmarketOS/pmaports/blob/master/main/devicepkg-dev/downstreamkernel_prepare.sh read the source over here].<br />
<br />
== GCC version ==<br />
The kernel gets compiled with {{wikipedia|GCC}}. Alpine Linux has been shipping version GCC 6 for a long time, but changed the default GCC version to GCC 8 in September 2018. It was discovered that at least one vendor kernel does not boot when compiled with GCC 8 ({{issue|103|pmaports}}), so we ended up packaging GCC 6 side by side with GCC 8. All existing 3.x vendor kernels that were packaged have been adjusted to use GCC 6 at this point in time, just to make sure we don't introduce any breakage there. The default for new packages is using the current GCC version that is packaged in Alpine (at time of writing: GCC 8).<br />
<br />
=== Use GCC 6 ===<br />
If your new kernel port does not boot at all, please try to compile it with GCC 6 and see if it works then.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: GCC 6 (doesn't boot when compiled with newer versions)<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc6-gcc"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
Then add <code>gcc6</code> to the kernel's <code>makedepends</code> line.<br />
<br />
<span style="font-size:80%; font-style: italic"><br />
Technical detail: the <code>if...</code> guard around setting the variables is necessary, because the <code>CC</code> and <code>CROSS_COMPILE</code> variables extend themselves. <code>abuild</code> will parse the <code>APKBUILD</code> a second time while running the <code>package()</code> step (inside fakeroot). So without the <code>if</code> statement, we will end up with <code>CC="gcc6-gcc6-gcc"</code> instead of <code>CC="gcc6-gcc"</code> which gets problematic if you are calling <code>make</code> to install kernel modules in the package section (as done in <code>linux-asus-tf101</code> for example). Interestingly, only <code>CC</code> and <code>CROSS_COMPILE</code> gets passed through, hence we can't simply check the <code>HOSTCC</code> variable.<br />
</span><br />
<br />
=== Use the newest GCC from Alpine ===<br />
Let's say you are using a device that has already been packaged, and you want to figure out if it also boots when compiled with a newer compiler.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: this kernel was only tested with GCC6. Feel free to make a merge<br />
# request if you find out that it is booting working with newer GCCs as<br />
# well. See <https://postmarketos.org/vendorkernel> for instructions.<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc6-gcc"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
Then remove the <code>gcc6</code> package from the <code>makedepends</code> line.<br />
<br />
Afterwards, remove the <code>compiler-gcc6.h</code> file from the aport folder, and from the <code>source</code> line. Instead you will probably need [https://gitlab.com/postmarketOS/pmaports/issues/103#note_104926654 other patches as linked here]. First try compiling without patches, then add one patch at a time to fix a specific problem. As usually, with <code>pmbootstrap checksum</code>, you can regenerate the checksums at the bottom of the file, this needs to be done whenever you change <code>source</code>.<br />
<br />
When you made it boot successfully, please increase the <code>pkgrel</code> and make a merge request.<br />
<br />
== heimdall-isorec ==<br />
If you have a device that only boots with [[Deviceinfo_flash_methods#heimdall-isorec|heimdall-isorec]], you will need to adjust your linux APKBUILD as follows:<br />
* add <code>busybox-static-armhf</code> to makedepends<br />
* copy the "init" file from [https://gitlab.com/postmarketOS/pmaports/tree/master/device/linux-samsung-i9100 <code>linux-samsung-i9100</code>] and customize the partition<br />
* add "init" to <code>source=</code> in the APKBUILD<br />
* adjust your <code>prepare()</code> like it's done in <code>linux-samsung-i9100</code> and adjust the paths in there<br />
<br />
You can search for more examples of heimdall-isorec deviecs with grep:<br />
<syntaxhighlight lang="shell-session"><br />
$ grep -r 'deviceinfo_flash_method="heimdall-isorec"' aports<br />
aports/device/device-samsung-i9070/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
aports/device/device-samsung-i9100/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
</syntaxhighlight><br />
<br />
== See also ==<br />
* [[device specific package]]<br />
* {{issue|103|pmaports}} Adjust to GCC8 upgrade in Alpine edge<br />
* {{MR|30|pmaports}} device/linux-*: use GCC-6 for all 3.x kernels</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Downstream_kernel_specific_package&diff=5128Downstream kernel specific package2018-11-29T15:18:54Z<p>GrantM11235: /* GCC version */ Use upstream gcc6 https://gitlab.com/postmarketOS/pmaports/merge_requests/84</p>
<hr />
<div>Unless a device has been [[The Mainline Kernel|mainlined]], we need to package the vendor kernel (also called "downstream kernel"). This is the reference for the {{alpine|APKBUILD}} files of vendor kernels.<br />
<br />
== Generate a template ==<br />
Usually you would generate both a new [[device specific package]] and a new vendor kernel package by running <code>pmbootstrap init</code> and typing in a new device name. In case you should only have a device package, but not a kernel package, you can regenerate the latter with <code>pmbootstrap aportgen linux-changeme-changeme</code> (you guessed it, <i>changeme</i> needs to be adjusted).<br />
<br />
The template gets improved every now and then to make porting easier, so don't be surprised when you are looking at older ports and their APKBUILDs look a bit more complicated than what gets generated from the latest <code>pmbootstrap</code> version. Essentially they are doing the same thing.<br />
<br />
== Modernize your aport ==<br />
To recreate your vendor kernel aport on top of the latest (and therefore most readable) template, do the following steps:<br />
<syntaxhighlight lang="shell-session"><br />
$ mv aports/device/linux-wiki-example aports/device/linux-wiki-example-old<br />
$ pmbootstrap aportgen linux-wiki-example<br />
(now adjust the new aport to use the sources and patches from the "-old" folder)<br />
$ pmbootstrap checksum linux-wiki-example<br />
$ pmbootstrap build --force linux-wiki-example<br />
(now test it on your device and make sure it boots, e.g. with 'pmbootstrap zap', 'pmbootstrap install', 'pmbootstrap flasher boot')<br />
$ rm -r aports/device/linux-wiki-example-old<br />
$ pmbootstrap pkgrel_bump linux-wiki-example<br />
$ git add -A<br />
$ git commit -m "device/linux-wiki-example: modernize aport"<br />
</syntaxhighlight><br />
<br />
== downstreamkernel_prepare ==<br />
Newly generated vendorkernel packages use the <code>downstreamkernel_prepare</code> function. That way we can share code between the APKBUILDs, so it is less redundant. To see what the function does, [https://gitlab.com/postmarketOS/pmaports/blob/master/main/devicepkg-dev/downstreamkernel_prepare.sh read the source over here].<br />
<br />
== GCC version ==<br />
The kernel gets compiled with {{wikipedia|GCC}}. Alpine Linux has been shipping version GCC 6 for a long time, but changed the default GCC version to GCC 8 in September 2018. It was discovered that at least one vendor kernel does not boot when compiled with GCC 8 ({{issue|103|pmaports}}), so we ended up packaging GCC 6 side by side with GCC 8. All existing 3.x vendor kernels that were packaged have been adjusted to use GCC 6 at this point in time, just to make sure we don't introduce any breakage there. The default for new packages is using the current GCC version that is packaged in Alpine (at time of writing: GCC 8).<br />
<br />
=== Use GCC 6 ===<br />
If your new kernel port does not boot at all, please try to compile it with GCC 6 and see if it works then.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: GCC 6 (doesn't boot when compiled with newer versions)<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc-6"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
Then add <code>gcc6</code> to the kernel's <code>makedepends</code> line.<br />
<br />
<span style="font-size:80%; font-style: italic"><br />
Technical detail: the <code>if...</code> guard around setting the variables is necessary, because the <code>CC</code> and <code>CROSS_COMPILE</code> variables extend themselves. <code>abuild</code> will parse the <code>APKBUILD</code> a second time while running the <code>package()</code> step (inside fakeroot). So without the <code>if</code> statement, we will end up with <code>CC="gcc6-gcc6-gcc"</code> instead of <code>CC="gcc6-gcc"</code> which gets problematic if you are calling <code>make</code> to install kernel modules in the package section (as done in <code>linux-asus-tf101</code> for example). Interestingly, only <code>CC</code> and <code>CROSS_COMPILE</code> gets passed through, hence we can't simply check the <code>HOSTCC</code> variable.<br />
</span><br />
<br />
=== Use the newest GCC from Alpine ===<br />
Let's say you are using a device that has already been packaged, and you want to figure out if it also boots when compiled with a newer compiler.<br />
<br />
'''Replace these lines:'''<br />
<syntaxhighlight lang="bash"><br />
# Compiler: this kernel was only tested with GCC6. Feel free to make a merge<br />
# request if you find out that it is booting working with newer GCCs as<br />
# well. See <https://postmarketos.org/vendorkernel> for instructions.<br />
if [ "${CC:0:5}" != "gcc6-" ]; then<br />
CC="gcc6-$CC"<br />
HOSTCC="gcc-6"<br />
CROSS_COMPILE="gcc6-$CROSS_COMPILE"<br />
fi<br />
</syntaxhighlight><br />
<br />
with the following ones:<br />
<br />
<syntaxhighlight lang="bash"><br />
# Compiler: latest GCC from Alpine<br />
HOSTCC="${CC:-gcc}"<br />
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"<br />
</syntaxhighlight><br />
<br />
Then remove the <code>gcc6</code> package from the <code>makedepends</code> line.<br />
<br />
Afterwards, remove the <code>compiler-gcc6.h</code> file from the aport folder, and from the <code>source</code> line. Instead you will probably need [https://gitlab.com/postmarketOS/pmaports/issues/103#note_104926654 other patches as linked here]. First try compiling without patches, then add one patch at a time to fix a specific problem. As usually, with <code>pmbootstrap checksum</code>, you can regenerate the checksums at the bottom of the file, this needs to be done whenever you change <code>source</code>.<br />
<br />
When you made it boot successfully, please increase the <code>pkgrel</code> and make a merge request.<br />
<br />
== heimdall-isorec ==<br />
If you have a device that only boots with [[Deviceinfo_flash_methods#heimdall-isorec|heimdall-isorec]], you will need to adjust your linux APKBUILD as follows:<br />
* add <code>busybox-static-armhf</code> to makedepends<br />
* copy the "init" file from [https://gitlab.com/postmarketOS/pmaports/tree/master/device/linux-samsung-i9100 <code>linux-samsung-i9100</code>] and customize the partition<br />
* add "init" to <code>source=</code> in the APKBUILD<br />
* adjust your <code>prepare()</code> like it's done in <code>linux-samsung-i9100</code> and adjust the paths in there<br />
<br />
You can search for more examples of heimdall-isorec deviecs with grep:<br />
<syntaxhighlight lang="shell-session"><br />
$ grep -r 'deviceinfo_flash_method="heimdall-isorec"' aports<br />
aports/device/device-samsung-i9070/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
aports/device/device-samsung-i9100/deviceinfo:deviceinfo_flash_method="heimdall-isorec"<br />
</syntaxhighlight><br />
<br />
== See also ==<br />
* [[device specific package]]<br />
* {{issue|103|pmaports}} Adjust to GCC8 upgrade in Alpine edge<br />
* {{MR|30|pmaports}} device/linux-*: use GCC-6 for all 3.x kernels</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=5119Samsung Galaxy S4 (samsung-jflte)2018-11-28T05:55:49Z<p>GrantM11235: /* Links */ Add link to teardown</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf<br />
* Teardown: https://www.ifixit.com/Teardown/Samsung+Galaxy+S4+Teardown/13947</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=5117Samsung Galaxy S4 (samsung-jflte)2018-11-27T23:27:14Z<p>GrantM11235: Change SoC from APQ8064T to APQ8064AB</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064AB Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=PostmarketOS:Copyrights&diff=4877PostmarketOS:Copyrights2018-10-23T01:39:22Z<p>GrantM11235: Create placeholder page</p>
<hr />
<div>{{Todo | Populate this page. It is linked to in a message that appears when making an edit.}}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=4876Samsung Galaxy S4 (samsung-jflte)2018-10-23T01:33:09Z<p>GrantM11235: https://gitlab.com/postmarketOS/pmaports/merge_requests/58</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064T Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1080x1920 AMOLED<br />
| memory = 2G ram<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing = Y<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = Y<br />
| status_mainline = <br />
| status_battery = Y<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
* [[user:GrantM11235|GrantM11235]]<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
* Initramfs password entry for full disk encryption<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=User:GrantM11235&diff=4856User:GrantM112352018-10-19T21:00:03Z<p>GrantM11235: Create page with GitLab and Matrix links</p>
<hr />
<div>{| class="wikitable"<br />
| GitLab<br />
| [https://gitlab.com/GrantM11235 GrantM11235]<br />
|-<br />
| Matrix<br />
| [https://matrix.to/#/@grantm11235:matrix.org @grantm11235:matrix.org]<br />
|}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=4854Samsung Galaxy S4 (samsung-jflte)2018-10-19T18:18:09Z<p>GrantM11235: /* Installation */ Re-enter Download Mode</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = samsung-jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064T Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1920x1080 AMOLED<br />
| memory = 2G ram<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing =<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = <br />
| status_mainline = <br />
| status_battery =<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
* Initramfs password entry for full disk encryption<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# After the kernel is flashed, the device will reboot. Hold the volume down button while it boots up to re-enter Download Mode<br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=4253Samsung Galaxy S4 (samsung-jflte)2018-09-06T19:02:56Z<p>GrantM11235: /* Installation */ Add link to Installing_pmbootstrap</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064T Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1920x1080 AMOLED<br />
| memory = 2G ram<br />
| architecture = armhf<br />
| status_usbnet = Y<br />
| status_flashing =<br />
| status_touch = Y<br />
| status_screen = Y<br />
| status_wifi = Y<br />
| status_xwayland = <br />
| status_fde = <br />
| status_mainline = <br />
| status_battery =<br />
| status_3d = <br />
| status_accel = <br />
| status_audio = <br />
| status_bluetooth =<br />
| status_camera =<br />
| status_gps = <br />
| status_mobiledata = <br />
| status_sms = <br />
| status_calls = <br />
| booting = yes<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
* Initramfs password entry for full disk encryption<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# [[Installing_pmbootstrap | Install pmbootstrap]]<br />
# <pre>pmbootstrap init</pre><br />
# <pre>pmbootstrap install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>pmbootstrap flasher flash_kernel</pre><br />
# <pre>pmbootstrap flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Kernel_configuration&diff=4034Kernel configuration2018-08-31T00:44:31Z<p>GrantM11235: /* Required */ Add CONFIG_EXT4_FS</p>
<hr />
<div>= Changing the kernel configuration =<br />
You can change the kernel configuration with pmbootstrap, for the linux-sony-yuga package for example we run:<br />
<br />
<pre class="shell">pmbootstrap kconfig edit sony-yuga</pre><br />
<br />
This gives you a menu where you can select and deselect all kernel configuration options. Press the <code>/</code> key to get a search dialog.<br />
<br />
[[File:KernelConfig.png|800px]]<br />
<br />
If you don't like the terminal user interface, you can also use <code>pmbootstrap kconfig edit -x</code> or <code>pmbootstrap kconfig edit -g</code>. See <code>pmbootstrap kconfig edit -h</code> for details.<br />
<br />
== Options aren't always visible! ==<br />
If you're looking for an option and you just can't find it, then it might not show up because it depends on other options that have been disabled. In that case, press <code>/</code> and search for the option in question. You will see the dependencies. Then use the search again to find these dependencies, and enable them until you can finally enable the option you wanted to change in the first place.<br />
<br />
= Useful kernel configuration options =<br />
<br />
== Required ==<br />
<br />
Enable or disable the following options to get postmarketOS working. Use <code>pmbootstrap kconfig check</code> to check which options need to be modified.<br />
<br />
=== CONFIG_DEVTMPFS ===<br />
<br />
'''About'''<br />
<br />
''This adds support for the devtmpfs filesystem which should be mounted to /dev at startup. The kernel driver core creates device nodes for all registered devices in that filesystem. All device nodes are owned by root and have the default mode of 0600. Userspace can add and delete the nodes as needed.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/DEVTMPFS.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
Generic Driver Options --><br />
Maintain a devtmpfs filesystem to mount at /dev<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
This should always be set, otherwise you get this when you try SSH:<br />
<br />
<pre>PTY allocation request failed on channel 0<br />
-ash: a: unknown operand</pre><br />
<br />
=== CONFIG_VT ===<br />
<br />
'''About'''<br />
<br />
''If you say Y here, you will get support for terminal devices with display and keyboard devices. These are called "virtual" because you can run several virtual terminals (also called virtual consoles) on one physical terminal. This is rather useful, for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-<function key>.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/VT.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
Character Devices --><br />
Virtual Terminal<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
This should always be set, otherwise you cannot get virtual terminal over USB.<br />
<br />
=== CONFIG_DM_CRYPT ===<br />
<br />
'''About'''<br />
<br />
''This device-mapper target allows you to create a device that transparently encrypts the data on it.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/DM_CRYPT.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell"><br />
Device Drivers --><br />
Multiple devices driver support (RAID and LVM) --><br />
Device mapper support --><br />
Crypt target support<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
This should always be set, required for full disk encyption.<br />
<br />
=== CONFIG_EXT4_FS ===<br />
<br />
'''About'''<br />
<br />
''This is the next generation of the ext3 filesystem.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/EXT4_FS.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell"><br />
File systems --><br />
The Extended 4 (ext4) filesystem<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
This should always be set. {{todo | Why?}}<br />
<br />
=== CONFIG_KERNEL_GZIP, CONFIG_KERNEL_XZ, CONFIG_KERNEL_LZO and CONFIG_KERNEL_LZMA ===<br />
<br />
'''About'''<br />
<br />
;GZIP<br />
: ''The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed.''<br />
: [https://cateee.net/lkddb/web-lkddb/KERNEL_GZIP.html Read more...]<br />
;XZ<br />
: ''XZ uses the LZMA2 algorithm and instruction set specific BCJ filters which can improve compression ratio of executable code. The size of the kernel is about 30% smaller with XZ in comparison to gzip. The speed is about the same as with LZMA: The decompression speed of XZ is better than that of bzip2 but worse than gzip and LZO. Compression is slow.''<br />
: [https://cateee.net/lkddb/web-lkddb/KERNEL_XZ.html Read more...]<br />
;LZO<br />
: ''Its compression ratio is the poorest among the choices. The kernel size is about 10% bigger than gzip; however its speed (both compression and decompression) is the fastest.''<br />
: [https://cateee.net/lkddb/web-lkddb/KERNEL_LZO.html Read more...]<br />
;LZMA<br />
: ''This compression algorithm's ratio is best. Decompression speed is between gzip and bzip2. Compression is slowest. The kernel size is about 33% smaller with LZMA in comparison to gzip.''<br />
: [https://cateee.net/lkddb/web-lkddb/KERNEL_LZMA.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
General Setup --><br />
Kernel compression mode --><br />
Gzip<br />
LZMA<br />
XZ<br />
LZO<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
You should set one of these to Y.<br />
* Gzip: Works without specifying anything else.<br />
* LZMA: If kernel compilation fails with this compression type, read [[Troubleshooting:kernel#Kernel_compilation:_BusyBox_lzma_compression_fails]].<br />
* XZ: Make sure to add <code>xz</code> to <code>makedepends</code> in the APKBUILD of your kernel package.<br />
* LZO: If you get <code>lzop: high compression not compiled in</code> during compilation of the kernel you probably need [https://github.com/postmarketOS/pmbootstrap/blob/b4c9f93f0d7be1272f6a67de2128558ce58e1077/aports/linux-samsung-i9070/02_reduce_lzo_compression.patch this patch].<br />
<br />
=== CONFIG_ANDROID_PARANOID_NETWORK ===<br />
<br />
'''About'''<br />
<br />
''Android adds a "paranoid network" option to the Linux kernel, which restricts access to some networking features depending on the group of the calling process. The list of groups that are allowed access to networking features is in the kernel source file: /include/linux/android_aids.h <br />
Setting this config will enable the paranoid network security feature''<br />
<br />
[https://elinux.org/Android_Security#Paranoid_network-ing Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell"><br />
Networking Support --><br />
Networking Options --><br />
Only allow certain groups to create sockets<br />
</pre><br />
<br />
'''Android specific'''<br />
<br />
This option should '''not''' be set in pmOS or any other OS not using Android security model.<br />
<br />
<br />
=== CONFIG_PFT===<br />
<br />
'''About'''<br />
<br />
''This caused builds to fail with a modern GCC at least once, and while it originally was meant as security feature by Qualcomm, "it is unsupported by Qualcomm, and opens up to a wide range of potential attack surfaces that has not been audited by anyone." [http://www.merproject.org/logs/%23sailfishos-porters/%23sailfishos-porters.2016-08-26.log.html#t2016-08-26T17:43:06].''<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell"><br />
Device Drivers --><br />
Qualcomm MSM specific device drivers --><br />
Per-File-Tagger driver<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Please disable it, so we have one less source for failing builds and enabling it has no benefit anyway.<br />
<br />
<br />
=== CONFIG_SYSVIPC ===<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell"><br />
General Setup --><br />
System V IPC<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Please enable it for postmarketOS, so busybox' syslogd can log to a ringbuffer in the kernel (fixes {{github|808}}).<br />
<br />
== Optional ==<br />
<br />
These kernel options are optional and for some devices required to fix some issues.<br />
<br />
=== CONFIG_LBDAF ===<br />
'''About'''<br />
<br />
''Support for large (2TB+) block devices and files''<br />
<br />
''The ext4 filesystem requires that this feature be enabled in order to support filesystems that have the huge_file feature enabled. Otherwise, it will refuse to mount in the read-write mode any filesystems that use the huge_file feature, which is enabled by default by mke2fs.ext4.''<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
-*- Enable the block layer ---><br />
[*] Support for large (2TB+) block devices and files<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
This is recommended for all 32bit (armhf, x86) devices. The option is not present on 64bit (aarch64, x86_64) devices.<br />
<br />
Without this option, it is not possible to mount ext4 partitions that have been created with the default settings. The postmarketOS SD card installation uses these default parameters. There doesn't seem to be a point in changing that to work around badly configured kernels: even if the postmarketOS installation did not require this option, you might come across an SD card with ext4, that does not work on your device.<br />
<br />
=== CONFIG_USB_G_ANDROID ===<br />
'''About'''<br />
<br />
''The Android Composite Gadget supports multiple USB functions: adb, acm, mass storage, mtp, accessory and rndis.''<br />
<br />
''Each function can be configured and enabled/disabled dynamically from userspace through a sysfs interface.''<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
USB Support --><br />
USB Gadget Support --><br />
USB Gadget Drivers --><br />
Android Composite Gadget<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Enabling this option is needed for usb networking on some of the android kernels.<br />
<br />
=== CONFIG_USB_ETH ===<br />
'''About'''<br />
<br />
''This driver implements Ethernet style communication, in one of several ways:<br />
<br />
* ''The "Communication Device Class" (CDC) Ethernet Control Model. That protocol is often avoided with pure Ethernet adapters, in favor of simpler vendor-specific hardware, but is widely supported by firmware for smart network devices.''<br />
* ''On hardware can't implement that protocol, a simple CDC subset is used, placing fewer demands on USB.''<br />
* ''CDC Ethernet Emulation Model (EEM) is a newer standard that has a simpler interface that can be used by more USB hardware.''<br />
<br />
''RNDIS support is an additional option, more demanding than than subset.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/USB_ETH.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
USB Support --><br />
USB Gadget Support --><br />
USB Gadget Drivers --><br />
Ethernet Gadget<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Most devices do not need this to be set. If telnet/SSH does not work you can try and set this option to Y.<br />
<br />
=== CONFIG_USB_ETH_RNDIS ===<br />
'''About'''<br />
<br />
''Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, and Microsoft provides redistributable binary RNDIS drivers for older versions of Windows.''<br />
<br />
''If you say "y" here, the Ethernet gadget driver will try to provide a second device configuration, supporting RNDIS to talk to such Microsoft USB hosts.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/USB_ETH_RNDIS.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
USB Support --><br />
USB Gadget Support --><br />
USB Gadget Drivers --><br />
RNDIS Support<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Required if you set <code>CONFIG_USB_ETH</code> to 'Y'.<br />
<br />
=== CONFIG_MSM_KGSL ===<br />
'''About'''<br />
<br />
''3D graphics driver. Required to use hardware accelerated OpenGL ES 2.0 and 1.1.''<br />
<br />
[https://android.googlesource.com/kernel/msm/+/android-msm-mako-3.4-jb-mr1-kgsl/drivers/gpu/msm/Kconfig Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
Device Drivers --><br />
Graphics Support --><br />
MSM 3D graphics Driver<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
If framebuffer does not work set this to 'N'<br />
<br />
=== CONFIG_CMDLINE ===<br />
'''About'''<br />
<br />
''Enter arguments here that should be compiled into the kernel image and used at boot time. If the boot loader provides a command line at boot time, it is appended to this string to form the full kernel command line, when the system boots.''<br />
<br />
[https://cateee.net/lkddb/web-lkddb/CMDLINE.html Read more...]<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
General Setup --><br />
Boot options --><br />
Default kernel command string<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
No<br />
<br />
=== CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE ===<br />
'''About'''<br />
<br />
''Build a concatenated zImage/dtb by default''<br />
<br />
''Enabling this option will cause a concatenated zImage and list of DTBs to be built by default (instead of a standalone zImage.)''<br />
<br />
''The image will built in arch/arm/boot/zImage-dtb''<br />
<br />
'''Location in menu'''<br />
<br />
<pre class="shell><br />
General Setup --><br />
Boot options --><br />
appended device tree blob to zImage<br />
</pre><br />
<br />
'''pmOS specific'''<br />
<br />
Set this if your device needs an appended device tree. If you are unsure, use <code>extract-dtb</code> on an existing kernel image. Not to be confused with <code>CONFIG_ARM_APPENDED_DTB</code>!<br />
<br />
= Automatically merging kernel configuration =<br />
Use this script, which is present in the kernel source:<br />
<code>./scripts/kconfig/merge_config.sh</code><br />
<br />
= References =<br />
<br />
# [https://cateee.net/lkddb/web-lkddb/ Linux Kernel Driver Database]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Installing_pmbootstrap&diff=3968Installing pmbootstrap2018-08-25T17:40:02Z<p>GrantM11235: Add page "Installing pmbootstrap"</p>
<hr />
<div>== Installing Manually ==<br />
<br />
==== Download pmbootstrap ====<br />
git clone https://gitlab.com/postmarketOS/pmbootstrap.git<br />
<br />
==== Create a link ====<br />
<br />
If the directory <code>~/.local/bin</code> does not already exist, create it with<br />
mkdir --parents ~/.local/bin<br />
<br />
Create a symbolic link in <code>~/.local/bin</code> named <code>pmbootstrap</code><br />
ln -s "$PWD/pmbootstrap/pmbootstrap.py" ~/.local/bin/pmbootstrap<br />
<br />
==== Test installation ====<br />
<br />
To test that pmbootstrap is installed correctly, open a new terminal and run<br />
pmbootstrap --version<br />
<br />
If this returns something like <code>pmbootstrap: command not found</code> instead of a version number, ensure that the following lines are in <code>~/.profile</code>, then open a new terminal and try again<br />
# set PATH so it includes user's private bin if it exists<br />
if [ -d "$HOME/.local/bin" ] ; then<br />
PATH="$HOME/.local/bin:$PATH"<br />
fi<br />
<br />
== Tab Completion ==<br />
<br />
{{todo | This is not yet implemented, watch {{MR|1656}} }}<br />
<br />
[https://en.wikipedia.org/wiki/Command-line_completion Tab completion] is an optional feature that saves you time by automatically filling in the rest of a command when you press the tab key. You can also see a list of possible commands by double pressing the tab key.<br />
<br />
Install [https://argcomplete.readthedocs.io/en/latest/ argcomplete] with<br />
pip3 install --user argcomplete<br />
<br />
Next, do one of the following depending on the shell you use:<br />
{{note | Note: The following assumes you run pmbootstrap with <code>pmbootstrap</code>. If you use <code>pmbootstrap.py</code>, use that instead}}<br />
==== Bash ====<br />
<br />
Add the following line to <code>~/.bashrc</code>:<br />
eval "$(register-python-argcomplete pmbootstrap)"<br />
<br />
Then reload your configuration by opening a new terminal or by running <code>source ~/.bashrc</code>.<br />
<br />
==== Zsh ====<br />
<br />
Add the following lines to <code>~/.zshrc</code>:<br />
autoload bashcompinit<br />
bashcompinit<br />
eval "$(register-python-argcomplete pmbootstrap)"<br />
<br />
Then reload your configuration by opening a new terminal or by running <code>source ~/.zshrc</code>.</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=3952Samsung Galaxy S4 (samsung-jflte)2018-08-18T06:16:57Z<p>GrantM11235: i9505 to jflte</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = Galaxy S4<br />
| codename = jflte<br />
| image = File:I9505.jpg<br />
| imagecaption = Galaxy S4<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064T Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1920x1080 AMOLED<br />
| memory = 2G ram<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
* Initramfs password entry for full disk encryption<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# <pre>git clone git@github.com:postmarketOS/pmbootstrap.git && cd pmbootstrap</pre><br />
# <pre>./pmbootstrap.py init</pre><br />
# <pre>./pmbootstrap.py install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>./pmbootstrap.py flasher flash_kernel</pre><br />
# <pre>./pmbootstrap.py flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Devices&diff=3951Devices2018-08-18T06:14:03Z<p>GrantM11235: Add Samsung Galaxy S4</p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page. The status values and columns are described below the table.<br />
<br />
== Feature matrix ==<br />
It is possible to boot these devices at the very least. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please add it to the table below and then make a [https://docs.gitlab.com/ce/gitlab-basics/add-merge-request.html merge-request].<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! [[USB Network|USB Net]] !! Flashing !! Touch !! Screen !! [[WiFi]] !! XWayland !! [[Osk-sdl|FDE]] !! [[The Mainline Kernel|Mainline]] !! Battery !! 3D !! Accelerometers !! [[Audio]] !! Bluetooth !! Camera !! GPS !! Mobile Data !! SMS !! Calls <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Aquaris-U|Aquaris U]]<br />
|style="white-space: nowrap;" | bq-chaozu<br />
| || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[ASUS MeMO Pad FHD 10 (asus-duma)|ASUS MeMO Pad FHD 10]]<br />
|style="white-space: nowrap;" | asus-duma<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 2 Laser/Selfie (1080p) (asus-z00t)|ASUS Zenfone 2 Laser/Selfie (1080p)]]<br />
|style="white-space: nowrap;" | asus-z00t<br />
| Y || Y || Y || Y || Y || Y || || || Y || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone_1_(fairphone-fp1)|Fairphone 1]]<br />
| style="white-space: nowrap;" | fairphone-fp1<br />
| Y || Y || P || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Geeksphone Peak (gp-peak)|Geeksphone Peak]]🔼<br />
| style="white-space: nowrap;" | gp-peak<br />
| Y || Y || Y || Y || || Y || Y || || || || || Y || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || Y || Y || || || Y || || Y || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5X(lg-bullhead)|Google Nexus 5X]]<br />
| style="white-space: nowrap;" | lg-bullhead<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 9 (htc-flounder)|Google Nexus 9]]<br />
| style="white-space: nowrap;" | htc-flounder<br />
| Y || Y || || P || || || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Desire_816_single_SIM_(htc-a5ul)|HTC Desire 816]]<br />
| style="white-space: nowrap;" | htc-a5ul<br />
| Y || || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || - || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire S (htc-saga)|HTC Desire S]]<br />
| style="white-space: nowrap;" | htc-saga<br />
| Y || || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Incredible_S_(htc-vivo)|HTC Incredible S]]<br />
| style="white-space: nowrap;" | htc-vivo<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Nexus_One_(htc-passion)|HTC Nexus One]]<br />
| style="white-space: nowrap;" | htc-passion<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC One M8 (htc-m8)|HTC One M8]]<br />
| style="white-space: nowrap;" | htc-m8<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[InFocus New Tab F1 (infocus-flatfish)|InFocus New Tab F1]]🔼<br />
|style="white-space: nowrap;" | infocus-flatfish<br />
| Y || Y || Y || P || || Y || Y || || || || || P || || || || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]<br />
|style="white-space: nowrap;" | jolla-sbj<br />
| P || P || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola_Droid_4_(motorola-maserati)|Motorola Droid 4]]<br />
| style="white-space: nowrap;" | motorola-maserati<br />
| Y || || || || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 4G 2013 (motorola-peregrine)|Moto G 4G 2013]]<br />
| style="white-space: nowrap;" | motorola-peregrine<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G4(motorola-athene)|Moto G4]]<br />
| style="white-space: nowrap;" | motorola-athene<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G4 Play (motorola-harpia)|Moto G4 Play]]<br />
| style="white-space: nowrap;" | motorola-harpia<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto X|Moto X (2013)]]<br />
| style="white-space: nowrap;" | motorola-ghost<br />
| Y || Y || || || || || || || || || || || || || || || ||<br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia Lumia 720]]🔼<br />
| style="white-space: nowrap;" | nokia-rm885<br />
| Y || Y || P || Y || || || || || || || || || || || || || ||<br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || || Y || Y || Y || Y || Y || Y || || || Y || Y || || || P || Y || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N9]]🔼 / [[Nokia N950]]🔼<br />
| style="white-space: nowrap;" | nokia-n9<br />
| Y || || Y || Y || Y || Y || || Y || || P || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus Two (oneplus-oneplus2)|OnePlus Two]]<br />
| style="white-space: nowrap;" | oneplus-oneplus2<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || P || - || Y || || Y || || || - || || - || || || - || || - || - || - <br />
|-<br />
| style="white:space: nowrap;" | [[Planet_Computers_Gemini_PDA_(planet-geminipda)|Planet Computers Gemini PDA]]<br />
| style="white-space: nowrap;" | planet-geminipda<br />
| Y || P || Y || Y || P || Y || Y || || || P || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || - || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || - || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || - || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Raspberry Pi]]🔼<br />
| style="white-space: nowrap;" | raspberry-pi, raspberry-pi3<br />
| - || - || - || Y || || Y || || Y || - || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II x]]<br />
| style="white-space: nowrap;" | samsung-kylessopen<br />
| || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Note 8.0 (Wi-Fi) (samsung-n5110)|Samsung Galaxy Note 8.0 (Wi-Fi)]]<br />
| style="white-space: nowrap;" | samsung-n5110<br />
| Y || Y || Y || Y || Y || Y || || || || || || P || P || || || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII mini (samsung-i8190)|Samsung Galaxy SIII mini]]<br />
| style="white-space: nowrap;" | samsung-i8190<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII mini Value Edition (samsung-i8200)|Samsung Galaxy SIII mini Value Edition]]<br />
| style="white-space: nowrap;" | samsung-i8200<br />
| Y || P || Y || Y || Y || Y || Y || || || || || || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 (samsung-jflte)|Samsung Galaxy S4]]<br />
| style="white-space: nowrap;" | samsung-jflte<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_mini_(samsung-kminilte)|Samsung Galaxy S5 Mini]]<br />
| style="white-space: nowrap;" | samsung-kminilte<br />
| Y || Y || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 10.1" (samsung-p4wifi)|Samsung Galaxy Tab 10.1"]]<br />
| style="white-space: nowrap;" | samsung-p4wifi, -p4, -p4tmo<br />
| Y || Y || Y || Y || Y || || || P || || || || P || Y || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 3 7.0 (samsung-lt023g)|Samsung Galaxy Tab 3 7.0 (T211)]]<br />
| style="white-space: nowrap;" | samsung-lt023g<br />
| Y || Y || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab S2 9.7 Wifi (samsung-gts210vewifi)|Samsung Galaxy Tab S2 9.7 Wifi (T813)]]<br />
| style="white-space: nowrap;" | samsung-gts210vewifi<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Trend lite (s7390g)]]<br />
| style="white-space: nowrap;" | samsung-kylevess<br />
| Y || Y || Y || Y || || || || P || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Trend Plus (s7580)]]<br />
| style="white-space: nowrap;" | samsung-kylepro<br />
| Y || || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Live With Walkman (sony-coconut)|Sony Ericsson Live With Walkman]]<br />
| style="white-space: nowrap;" | sony-coconut<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia mini (semc-smultron)|Sony Ericsson Xperia mini]]<br />
| style="white-space: nowrap;" | sony-smultron<br />
| Y || || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia M (sony-nicki)|Sony Xperia M]]<br />
| style="white-space: nowrap;" | sony-nicki<br />
| Y || Y || Y || Y || - || || Y || - || P || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia T3 (sony-seagull)|Sony Xperia T3]]<br />
| style="white-space: nowrap;" | sony-seagull<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 (sony-sirius)|Sony Xperia Z2]]<br />
| style="white-space: nowrap;" | sony-sirius<br />
| Y || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || Y || || - || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi Mi 3 (cancro)|Xiaomi Mi 3]]<br />
|style="white-space: nowrap;" | xiaomi-cancro<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi4x_(xiaomi-santoni)|Xiaomi RedMi 4x]]<br />
|style="white-space: nowrap;" | xiaomi-santoni<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_Note_4_(mido)|Xiaomi Redmi Note 4]]<br />
|style="white-space: nowrap;" | xiaomi-mido<br />
| Y || Y || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[ZTE_Kis_3_(zte-kis3)|ZTE Kis 3]]<br />
|style="white-space: nowrap;" | zte-kis3<br />
| Y || Y || || || || || || || || || || || || || || || ||<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
=== Status Columns ===<br />
{| class="wikitable"<br />
! Column<br />
! Meaning<br />
|-<br />
| USB Net<br />
| After connecting the device with USB to your PC, you can [[Inspecting_the_initramfs|connect to it via telnet (initramfs)]] or [[USB_Network|SSH (booted system)]].<br />
|-<br />
| Flashing<br />
| It is possible to flash the device with `pmbootstrap flasher`.<br />
|-<br />
| Touch<br />
| Touching the screen is recognized properly.<br />
|-<br />
| Screen<br />
| The device's display is working.<br />
|-<br />
| Wifi<br />
| Connecting to wireless network is possible.<br />
|-<br />
| XWayland<br />
| Showing X11 applications in a Wayland compositor (Weston, KWin, ...) works.<br />
|-<br />
| FDE<br />
| Full disk encryption and unlocking with [[osk-sdl]].<br />
|-<br />
| Mainline<br />
| Instead of a Linux kernel fork, it is possible to run [[The_Mainline_Kernel|mainline]].<br />
|-<br />
| Battery<br />
| Charging the battery with [[charging-sdl]] is possible (this seems to be largely untested, please update your device's column if charging is possible).<br />
|-<br />
| 3D<br />
| Hardware accelerated 3D graphics<br />
|-<br />
| Accelerometers<br />
| The sensor that measures [https://en.wikipedia.org/wiki/Proper_acceleration proper acceleration] works.<br />
|-<br />
| Audio<br />
| Using the device's speakers/headphone jack works.<br />
|-<br />
| Bluetooth<br />
| It's possible to pair and use other devices via the bluetooth protocol.<br />
|-<br />
| Camera<br />
| Taking photos and videos works.<br />
|-<br />
| GPS<br />
| The [https://en.wikipedia.org/wiki/Global_Positioning_System Global Positioning System] sensor works.<br />
|-<br />
| Mobile Data<br />
| Connecting to the Internet via cellular network.<br />
|-<br />
| SMS<br />
| Sending and receiving short messages works as intended.<br />
|-<br />
| Calls<br />
| Talking to other people over the cellular network.<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://docs.gitlab.com/ce/gitlab-basics/add-merge-request.html make a merge-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Amazon_Fire-Phone|Amazon Fire Phone]]<br />
| amazon-kodiak<br />
| Kernel won't build<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Geeksphone Revolution (gp-revolution)|Geeksphone Revolution]]<br />
| gp-revolution<br />
| Kernel compiles but does not boot<br />
|-<br />
| [[Google Pixel (google-sailfish)|Google Pixel]]<br />
| google-sailfish<br />
| Kernel compiles, panics on boot<br />
|-<br />
| [[Generic PC]] hardware (inc. BIOS based Windows tablets)🔼<br />
| N/A<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-buzz-(HTC-Buzz)|HTC Buzz/Wildfire]]<br />
| htc-buzz<br />
| Kernel compiles. But ARMv6 devices without FPU are not supported by Alpine's armhf<br />
|-<br />
| [[HTC_HD2_(htc-leo)|HTC HD2]]🔼<br />
| htc-leo<br />
| kernel compiles. working on flashing.<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Ascend_G510_(huawei-g510)|Huawei Ascend G510]]<br />
| huawei-g510<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Huawei_Ascend_G620S_(huawei-cherry)|Huawei Ascend G620S]]<br />
| huawei-cherry<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Kobo Aura_(kobo-aura)|Kobo Aura]]<br />
| kobo-aura<br />
| Kernel is 2.6, will require patching.<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|- <br />
| [[LG K7_(lg-m1)|LG K7]]<br />
| lg-m1<br />
| display works, touchscreen doesn't work<br />
|-<br />
| [[LG V500 | LG G Pad 8.3 ]]<br />
| lg-v500<br />
| kernel won't compile<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Nintendo_Switch_(nintendo-nx)|Nintendo Switch]]🔼<br />
| nintendo-nx<br />
| Kernel and bootloader compiles, but freezes on boot<br />
|-<br />
| [[Orange Pi 4G-IoT]]<br />
| orange-pi-4g-iot<br />
|<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Samsung Captivate Glide (samsung-i927)|Samsung Captivate Glide]]<br />
| samsung-i927<br />
| Fails to boot<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung Galaxy GT-i7500 (samsung-gt-i7500)|Samsung Galaxy GT-i7500]]<br />
| samsung-gt-i7500<br />
| Has no FPU due to /proc/cpuinfo but [https://wiki.postmarketos.org/wiki/Porting_to_a_new_device#Target_Device needed], [https://gitlab.com/postmarketOS/pmbootstrap/issues/1614 #1614]<br />
|-<br />
| [[Samsung Galaxy Mini (samsung-s5570i)|Samsung Galaxy Mini]]<br />
| samsung-tassve<br />
| Kernel compiles, flashing doesn't work.<br />
|-<br />
| [[Samsung Galaxy Pocket (samsung-s5300)|Samsung Galaxy Pocket]]<br />
| samsung-s5300<br />
| Kernel compiles, but doesn't boot (stuck on bootloader logo).<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung_Galaxy_S2(G)_(samsung-i9100G)|Samsung Galaxy S2(G)]]<br />
| samsung-i9100G<br />
| Kernel compiles, Not booting.<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Samsung Galaxy Note 10.1]] <br />
| samsung-gt-n8013<br />
| Kernel compiles, flasher fails<br />
|-<br />
| [[Samsung_Wave_2_(samsung-s8530)|Samsung Wave 2]]<br />
| samsung-s8530<br />
| kernel compiles<br />
|-<br />
| [[Sony Ericsson Xperia acro S (semc-hikari)]]<br />
| semc-hikari<br />
| Uses unusual ELF-format boot.img that is not supported by pmOS<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Sony SmartWatch 3 (sony-tetra)|Sony SmartWatch 3]]<br />
| sony-tetra<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Google Chromecast (google-anchovy)|Google Chromecast 1st gen]]<br />
| google-anchovy<br />
| Kernel compiles, my personal Chromecast's bootloader is too new to load from USB.<br />
|-<br />
| [[Vodafone_858_Smart_(huawei-u8160)|Vodafone 858 Smart (Huawei U8160)]]<br />
| huawei-u8160<br />
| Kernel compiles, doesn't boot<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
* [[Milestones]] for the current goals and activities<br />
* [[Device Wishlist]]<br />
* [[The-big-list-of-who-has-what-device]]<br />
* [[Symbian]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung-i9505-(Samsung-Galaxy-S4-int)&diff=3950Samsung-i9505-(Samsung-Galaxy-S4-int)2018-08-18T06:08:26Z<p>GrantM11235: GrantM11235 moved page Samsung-i9505-(Samsung-Galaxy-S4-int) to Samsung Galaxy S4 (samsung-jflte): https://gitlab.com/postmarketOS/pmbootstrap/merge_requests/1668</p>
<hr />
<div>#REDIRECT [[Samsung Galaxy S4 (samsung-jflte)]]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Samsung_Galaxy_S4_(samsung-jflte)&diff=3949Samsung Galaxy S4 (samsung-jflte)2018-08-18T06:08:26Z<p>GrantM11235: GrantM11235 moved page Samsung-i9505-(Samsung-Galaxy-S4-int) to Samsung Galaxy S4 (samsung-jflte): https://gitlab.com/postmarketOS/pmbootstrap/merge_requests/1668</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Samsung<br />
| name = S4 International<br />
| codename = i9505<br />
| image = File:I9505.jpg<br />
| imagecaption = S4 international<br />
| releaseyear = 2013<br />
| originalsoftware = Android 4.2.2 (Jelly Bean)<br />
| chipset = Qualcomm APQ8064T Snapdragon 600<br />
| cpu = Quad-core 1.9 GHz Krait 300<br />
| gpu = Adreno 320<br />
| storage = Internal storage and external micro SD<br />
| display = 1920x1080 AMOLED<br />
| memory = 2G ram<br />
}}<br />
<br />
== Contributors ==<br />
* i9505_someone (rrooij on GitHub)<br />
<br />
== Maintainer(s) ==<br />
<!-- Only if this device doesn't run on linux-postmarketos yet! --><br />
<!-- This person needs to be willing to answer questions from users of this device --><br />
<br />
== What works ==<br />
<br />
* Compiling the latest lineageos kernel with some patches applied<br />
* Booting a graphical screen when installing PostmarketOS as recovery zip in TWRP.<br />
* Network connection via USB and SSH access<br />
* Screen works<br />
* Brightness can be changed by echoing a value to /sys/class/backlight/panel/device/backlight as root<br />
* Wifi with properietary blobs<br />
* Touch screen<br />
* Wayland<br />
* X11<br />
* Keyboard and mouse with USB OTG adapter<br />
<br />
== What does not work ==<br />
<br />
* Touch screen requires a reboot to work in some rare cases<br />
* 3D acceleration<br />
* Wayland default on screen keyboard<br />
* Initramfs password entry for full disk encryption<br />
<br />
== How to enter flash mode ==<br />
<br />
Press volume down + the power button to enter Download Mode. It is now possible<br />
to use Heimdall for flashing.<br />
<br />
== Installation ==<br />
<br />
# <pre>git clone git@github.com:postmarketOS/pmbootstrap.git && cd pmbootstrap</pre><br />
# <pre>./pmbootstrap.py init</pre><br />
# <pre>./pmbootstrap.py install --no-fde</pre><br />
# Put your S4 in Download Mode (Volume Down + Power) and connect it with USB<br />
# <pre>./pmbootstrap.py flasher flash_kernel</pre><br />
# <pre>./pmbootstrap.py flasher flash_rootfs</pre><br />
<br />
== Wifi ==<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Photos ==<br />
<br />
[[File:I9505_libreoffice_xfce.jpg|400px]]<br />
<br />
== Links ==<br />
<br />
* Kernel used: https://github.com/LineageOS/android_kernel_samsung_jf</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Renamed_Devices&diff=3948Renamed Devices2018-08-18T05:48:45Z<p>GrantM11235: Create Renamed Devices</p>
<hr />
<div>{{ todo | Watch {{issue|1646}} }}<br />
<br />
{| class="wikitable"<br />
|+ Renamed<br />
! Old Name<br />
! New Name<br />
! Merge Request<br />
|}<br />
<br />
{| class="wikitable"<br />
|+ Pending<br />
! Old Name<br />
! New Name<br />
! Merge Request<br />
|-<br />
| samsung-i9505<br />
| samsung-jflte<br />
| {{MR|1668}}<br />
|}</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Initramfs_development&diff=3910Initramfs development2018-08-10T21:51:23Z<p>GrantM11235: /* No log output on serial! */ Re-add link text</p>
<hr />
<div>=== We have two initramfs files ===<br />
<br />
After the installation, you will have '''two''' initramfs files in your device's <code>/boot</code> folder.<br />
<br />
<pre>% ls ~/.local/var/pmbootstrap/chroot_rootfs_samsung-i9100/boot<br />
initramfs-samsung-i9100 initramfs-samsung-i9100-extra vmlinuz-samsung-i9100</pre><br />
Regular Linux distributions only have '''one''' initramfs file. '''We have split it''' into two to work around the [https://github.com/postmarketOS/pmbootstrap/issues/126 size limitations], that some devices have. The regular initramfs is relatively small (''~1.5 mb, and we could make it smaller if necessary!'') and loads the contents of the initramfs-extra from the pmOS boot partition during the boot process.<br />
<br />
The pmOS boot partition is a '''sub'''partition of the system partition (''SD cards: simply a real partition on the SD card''), so we can make it almost as big as we want.<br />
<br />
=== Recommended development workflow ===<br />
<br />
* Only do one small change at a time<br />
* Rebuild and test on device (<code>pmbootstrap initfs</code>, <code>pmbootstrap flasher flash_kernel</code>)<br />
* When it works, version your change with git<br />
* Repeat<br />
<br />
When you change too much, it will simply not work and you most likely will have no idea why it does not work. Go back to the last working version and do smaller changes at a time.<br />
<br />
=== Tips and tricks ===<br />
<br />
* Familiarize with [[inspecting the initramfs]]<br />
* <code>pmbootstrap initfs</code> can do more than rebuilding the initramfs:<br />
<br />
<pre>% pmbootstrap initfs --help<br />
usage: pmbootstrap initfs [-h]<br />
{hook_ls,hook_add,hook_del,ls,build,extract} ...<br />
<br />
positional arguments:<br />
{hook_ls,hook_add,hook_del,ls,build,extract}<br />
hook_ls list available and installed hook packages<br />
hook_add add a hook package<br />
hook_del uninstall a hook package<br />
ls list initramfs contents<br />
build (re)build the initramfs<br />
extract extract the initramfs to a temporary folder<br />
<br />
optional arguments:<br />
-h, --help show this help message and exit</pre><br />
=== Troubleshooting ===<br />
<br />
==== My device reboots with my customized init script ====<br />
<br />
This is probably caused by a syntax error. Use <code>shellcheck</code> to check your scripts for syntax errors. You could also loop forever or spawn a shell (if you have a hardware keyboard or serial cable connected) at some point for debugging (<code>while true; do sleep 1; done</code>) and use the telnet shell to test the commands, that are failing, interactively.<br />
<br />
==== No log output on serial! ====<br />
<br />
By default, all output from the initramfs get redirected to <code>/pmOS_init.log</code>. If you want the output through the debug cable you need to add <code>PMOS_NO_OUTPUT_REDIRECT</code> to your [[Troubleshooting:kernel#How_can_I_boot_the_kernel_with_some_specific_arguments.3F | kernel command line]].</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Initramfs_development&diff=3909Initramfs development2018-08-10T21:48:22Z<p>GrantM11235: /* No log output on serial! */ Update link</p>
<hr />
<div>=== We have two initramfs files ===<br />
<br />
After the installation, you will have '''two''' initramfs files in your device's <code>/boot</code> folder.<br />
<br />
<pre>% ls ~/.local/var/pmbootstrap/chroot_rootfs_samsung-i9100/boot<br />
initramfs-samsung-i9100 initramfs-samsung-i9100-extra vmlinuz-samsung-i9100</pre><br />
Regular Linux distributions only have '''one''' initramfs file. '''We have split it''' into two to work around the [https://github.com/postmarketOS/pmbootstrap/issues/126 size limitations], that some devices have. The regular initramfs is relatively small (''~1.5 mb, and we could make it smaller if necessary!'') and loads the contents of the initramfs-extra from the pmOS boot partition during the boot process.<br />
<br />
The pmOS boot partition is a '''sub'''partition of the system partition (''SD cards: simply a real partition on the SD card''), so we can make it almost as big as we want.<br />
<br />
=== Recommended development workflow ===<br />
<br />
* Only do one small change at a time<br />
* Rebuild and test on device (<code>pmbootstrap initfs</code>, <code>pmbootstrap flasher flash_kernel</code>)<br />
* When it works, version your change with git<br />
* Repeat<br />
<br />
When you change too much, it will simply not work and you most likely will have no idea why it does not work. Go back to the last working version and do smaller changes at a time.<br />
<br />
=== Tips and tricks ===<br />
<br />
* Familiarize with [[inspecting the initramfs]]<br />
* <code>pmbootstrap initfs</code> can do more than rebuilding the initramfs:<br />
<br />
<pre>% pmbootstrap initfs --help<br />
usage: pmbootstrap initfs [-h]<br />
{hook_ls,hook_add,hook_del,ls,build,extract} ...<br />
<br />
positional arguments:<br />
{hook_ls,hook_add,hook_del,ls,build,extract}<br />
hook_ls list available and installed hook packages<br />
hook_add add a hook package<br />
hook_del uninstall a hook package<br />
ls list initramfs contents<br />
build (re)build the initramfs<br />
extract extract the initramfs to a temporary folder<br />
<br />
optional arguments:<br />
-h, --help show this help message and exit</pre><br />
=== Troubleshooting ===<br />
<br />
==== My device reboots with my customized init script ====<br />
<br />
This is probably caused by a syntax error. Use <code>shellcheck</code> to check your scripts for syntax errors. You could also loop forever or spawn a shell (if you have a hardware keyboard or serial cable connected) at some point for debugging (<code>while true; do sleep 1; done</code>) and use the telnet shell to test the commands, that are failing, interactively.<br />
<br />
==== No log output on serial! ====<br />
<br />
By default, all output from the initramfs get redirected to <code>/pmOS_init.log</code>. If you want the output through the debug cable you need to add <code>PMOS_NO_OUTPUT_REDIRECT</code> to your [[Troubleshooting:kernel#How_can_I_boot_the_kernel_with_some_specific_arguments.3F]].</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=3884Micro-USB Interface Controller2018-08-06T22:06:05Z<p>GrantM11235: Add todo</p>
<hr />
<div>{{todo|Add more information (which devices have one, how they are useful to us, what do jig and boot do, etc.)}}<br />
<br />
A Micro-USB Interface Controller (MUIC) is a USB multiplexer/switch. (Not a USB Host Controller like the name might imply)<br />
<br />
{| class="wikitable"<br />
|+UART Modes<br />
! Resistance<br />
! Jig<br />
! Boot<br />
|-<br />
|150k<br />
|Inactive<br />
|Inactive<br />
|-<br />
|523k<br />
|Active<br />
|Inactive<br />
|-<br />
|619k<br />
|Active<br />
|Active<br />
|}<br />
<br />
= Links =<br />
<br />
[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A Wikipedia: CEA-936-A]<br />
<br />
[https://standards.cta.tech/kwspub/published_docs/ANSI-CTA-936-A-W-Preview.pdf CEA-936-A USB Carkit Specification Preview]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=3848Micro-USB Interface Controller2018-08-01T05:07:52Z<p>GrantM11235: Add UART Modes Table</p>
<hr />
<div>A Micro-USB Interface Controller (MUIC) is a USB multiplexer/switch. (Not a USB Host Controller like the name might imply)<br />
<br />
{| class="wikitable"<br />
|+UART Modes<br />
! Resistance<br />
! Jig<br />
! Boot<br />
|-<br />
|150k<br />
|Inactive<br />
|Inactive<br />
|-<br />
|523k<br />
|Active<br />
|Inactive<br />
|-<br />
|619k<br />
|Active<br />
|Active<br />
|}<br />
<br />
= Links =<br />
<br />
[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A Wikipedia: CEA-936-A]<br />
<br />
[https://standards.cta.tech/kwspub/published_docs/ANSI-CTA-936-A-W-Preview.pdf CEA-936-A USB Carkit Specification Preview]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=3847Micro-USB Interface Controller2018-08-01T04:18:53Z<p>GrantM11235: </p>
<hr />
<div>A Micro-USB Interface Controller (MUIC) is a USB multiplexer/switch. (Not a USB Host Controller like the name might imply)<br />
<br />
= Links =<br />
<br />
[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A Wikipedia: CEA-936-A]<br />
<br />
[https://standards.cta.tech/kwspub/published_docs/ANSI-CTA-936-A-W-Preview.pdf CEA-936-A USB Carkit Specification Preview]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=3846Micro-USB Interface Controller2018-08-01T03:43:44Z<p>GrantM11235: </p>
<hr />
<div>[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
= Links =<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A Wikipedia: CEA-936-A]<br />
<br />
[https://standards.cta.tech/kwspub/published_docs/ANSI-CTA-936-A-W-Preview.pdf CEA-936-A USB Carkit Specification Preview]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Micro-USB_Interface_Controller&diff=3845Micro-USB Interface Controller2018-08-01T03:36:01Z<p>GrantM11235: Create Micro-USB Interface Controller</p>
<hr />
<div>[[Serial_debugging#Samsung_USB_debug_cable]]<br />
<br />
= Links =<br />
<br />
[https://greatscottgadgets.com/infiltrate2013/ Multiplexed Wired Attack Surfaces]<br />
<br />
[https://en.wikipedia.org/wiki/CEA-936-A CEA-936-A]<br />
<br />
=== Datasheets ===<br />
<br />
[http://www.onsemi.com/pub/Collateral/FSA9288A-D.pdf FSA9288A]<br />
<br />
[https://www.nxp.com/docs/en/data-sheet/MC34827.pdf MC34827]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=PostmarketOS:Templates&diff=3831PostmarketOS:Templates2018-07-31T01:55:23Z<p>GrantM11235: Add Template:File to template list</p>
<hr />
<div>MediaWiki allows us to define custom templates, which can then be included in other wiki pages. When creating a new one, please add it below, and use the "[[Template:Template]]" at the top of the new template. Check existing templates for reference.<br />
<br />
== Available templates ==<br />
* [[Template:alpine|alpine]] ''link to a page on the [https://wiki.alpinelinux.org/ Alpine Wiki]''<br />
* [[Template:github|github]] ''github issue or pull-request link'' (obsolete for postmarketOS code, use [[Template:issue|issue]] or [[Template:MR|MR]] instead)<br />
* [[Template:Hc|hc]] ''block code with header (can be used for listing the contents of a file, with the file location on top)''<br />
* [[Template:Infobox|infobox]] ''on the top right of every device / user interface article''<br />
** [[Template:Infobox_interface|interface]]<br />
** [[Template:Infobox_device|device]]<br />
* [[Template:issue|issue]] ''gitlab issue link''<br />
* [[Template:MR|MR]] ''gitlab merge request link''<br />
* [[Template:File|file]] ''gitlab or github file link''<br />
* [[Template:Note|note]]<br />
* [[Template:Outdated|outdated]]<br />
* [[Template:Syslog|syslog]] ''short explanation on how to read relevant syslog entries''<br />
<br />
== See also ==<br />
* [[Special:UncategorizedTemplates]]<br />
* [[Template:Template]]<br />
* [https://wiki.archlinux.org/index.php/Special:WhatLinksHere/Template:Template Arch Wiki templates]</div>GrantM11235https://wiki.postmarketos.org/index.php?title=Template:File&diff=3830Template:File2018-07-31T01:49:40Z<p>GrantM11235: Create Template:File</p>
<hr />
<div><noinclude>{{Template:Template}}{{DISPLAYTITLE:Template:file}}<br />
<br />
Link to a file on gitlab or github by specifying:<br />
* <code>filename</code><br />
* <code>repository</code> (defaults to [https://gitlab.com/postmarketOS/pmbootstrap pmbootstrap])<br />
* <code>project</code> (defaults to [https://gitlab.com/postmarketOS postmarketOS])<br />
* <code>site</code> (defaults to [https://gitlab.com gitlab.com])<br />
* <code>commit</code> This can be a hex commit number, a branch, or a tag. (defaults to <code>master</code>)<br />
* <code>line</code> Must start with <code>#L</code>, for example: <code>#L42</code>. Can also be a markdown heading, for example <code>#requirements</code>. (defaults to nothing)<br />
<br />
==Usage==<br />
<nowiki>{{file|filename|repository=repository|project=project|site=site|commit=commit|line=line}}</nowiki><br />
<br />
==Example==<br />
<br />
<nowiki>{{file|README.md|commit=0d7802d7ef95e464dfe0fcef8fde23b48dd0376d|line=#requirements}}</nowiki><br />
{{file|README.md|commit=0d7802d7ef95e464dfe0fcef8fde23b48dd0376d|line=#requirements}}<br />
<br />
<nowiki>{{file|pmb/__init__.py}}</nowiki><br />
{{file|pmb/__init__.py}}<br />
<br />
<nowiki>{{file|README.md|repository=osk-sdl}}</nowiki><br />
{{file|README.md|repository=osk-sdl}}<br />
<br />
<nowiki>{{file|README|repository=linux|project=torvalds|site=github.com|commit=v4.17|line=#L11}}</nowiki><br />
{{file|README|repository=linux|project=torvalds|site=github.com|commit=v4.17|line=#L11}}<br />
<br />
</noinclude><includeonly>[https://{{{site|gitlab.com}}}/{{{project|postmarketOS}}}/{{{repository|pmbootstrap}}}/blob/{{{commit|master}}}/{{{1}}}{{{line|}}} {{{1}}}{{{line|}}}]</includeonly></div>GrantM11235https://wiki.postmarketos.org/index.php?title=Tips_and_tricks&diff=3828Tips and tricks2018-07-30T21:26:24Z<p>GrantM11235: Add SSH Config tip</p>
<hr />
<div>=== SSH Config ===<br />
When postmarketOS is reinstalled, a new ssh host key will be generated. Your SSH client will detect this, and refuse to connect, requiring you to run <code>ssh-keygen -R 172.16.42.1</code> each time a new host key is generated.<br />
<br />
To disable this check, and to allow you to connect by running <code>ssh postmarketos</code>, add the following to your <code>~/.ssh/config</code>:<br />
Host postmarketos<br />
HostName 172.16.42.1<br />
StrictHostKeyChecking no<br />
UserKnownHostsFile=/dev/null<br />
<br />
{{note|'''Warning''': Ignoring host keys could leave you vulnerable to a [https://en.wikipedia.org/wiki/Man-in-the-middle_attack Man-in-the-middle attack]}}<br />
<br />
=== Misc ===<br />
<br />
* The splash screen is [https://github.com/postmarketOS/pmbootstrap/pull/206#issuecomment-316791430 highly configurable] (scroll down for an example)!<br />
* Browse the Linux source with links to all references [http://elixir.free-electrons.com here]<br />
* Qualcomm and maybe some other Androids can simply reboot from postmarketOS (or any Linux distro) into your bootloader or recovery with <code>reboot -f bootloader</code> and <code>reboot -f recovery</code><br />
* Battery capacity can be monitored to trigger low battery actions. See [[Battery capacity monitoring]] for more information.</div>GrantM11235