Commit graph

92 commits

Author SHA1 Message Date
Luca Weiss
37e43bcaac
main/postmarketos-mkinitfs: add mediatek header in mkinitfs (MR 1483)
Previously we added the header in the kernel packages but as we already
add the ramdisk header here and to simplify the process we also add the
addition of the kernel header into mkinitfs.
2020-08-22 10:38:53 +02:00
Martijn Braam
87a009a9b8
main/postmarketos-mkinitfs: fix error on missing dtb (MR 1491) 2020-08-11 10:52:14 +02:00
Oliver Smith
bfa705b745
main/postmarketos-mkinitfs: fix device sed regex (MR 1436)
The p? is not redundant. Without it, the p in mmcblk0p2 for example does
not get cut off, meaning the resulting device is not "mmcblk0" but
"mmcblk0p". My bad, sorry for the breakage.

Fixes: 9f6600ba ("main/postmarketos-mkinitfs: rm pmOS_deleteme")
Fixes: 9d86f6fe ("main/postmarketos-mkinitfs: resize: unallocated space check, even if forced")
2020-07-22 09:18:10 +02:00
Oliver Smith
9f6600ba18
main/postmarketos-mkinitfs: rm pmOS_deleteme (MR 1428)
Remove the "pmOS_deleteme" partition left behind by the on-device
installer, if it exists. Let the existing resize_root_partition() extend
the root partition over the newly gained space (and rest of the storage
device) right afterwards.
2020-07-21 22:53:03 +02:00
Oliver Smith
b55d95f3a9
main/postmarketos-mkinitfs: resize_root_partition: update comment (cosmetic) (MR 1428) 2020-07-21 22:53:02 +02:00
Oliver Smith
9d86f6fe92
main/postmarketos-mkinitfs: resize: unallocated space check, even if forced (MR 1428)
In resize_root_partition(), put the unallocated space check into an
extra function has_unallocated_space(). Run it even if
PMOS_FORCE_PARTITION_RESIZE is used, so we don't attempt to resize the
partition if there is no free space.

While at it, change "sed 's/p?2$//'" to "sed 's/2$//' in an already
modified line, because it means the same thing and is less confusing
(? in regex means: 0 or 1 time).
2020-07-21 22:53:02 +02:00
Martijn Braam
2fb6d11f91
main/postmarketos-mkinitfs: allow multiple dtbs (MR 1163)
Allow setting multiple dtb filenames in the deviceinfo seperated
by spaces
2020-07-16 23:14:54 +02:00
Oliver Smith
863ec713ba
main/postmarketos-mkinitfs: mount /sysroot/boot (MR 1398)
Mount the boot partition at /sysroot/boot and keep it mounted, when
running the switch_root command. This way, OpenRC doesn't need to mount
it and possibly use the wrong partition. The OpenRC service does not use
the same logic to find the boot partition, in particular it does not
support the pmos_boot kernel parameter.

While at it, print the mountpoint and read-only/read-write arguments in
the mounting log message for both root and boot.

Fixes: #664
2020-07-08 18:02:49 +02:00
Oliver Smith
9be8b59a00
main/postmarketos-mkinitfs: support pmOS_install (MR 1296)
Prefer booting from a pmOS_install partition if it exists, but do not
resize it.

Related: https://wiki.postmarketos.org/wiki/On-device_installer
2020-06-17 21:41:06 +02:00
Antoine Fontaine
41c2e1a307
main/postmarketos-mkinitfs: add mkinitfs to replaces (MR 1300)
fixes pmbootstrap#1851.
2020-06-15 02:32:25 +03:00
Niklas Cathor
6e75bf0e40
main/postmarketos-mkinitfs: fix mkbootimg call for devices w/o dtb (MR 1148)
Don't pass empty arguments to mkbootimg, when _second or _dt are not set.
2020-04-12 19:51:22 +02:00
Oliver Smith
23c58a681f
main/postmarketos-mkinitfs: modules from files (!1123)
Read kernel module names from files in
/etc/postmarketos-mkinitfs/modules and print out which modules are
required by which of these files as the initramfs gets generated. Put
the default modules into a new 00-default.modules. This allows mkinitfs
hooks to add modules to the initramfs.

Parse the modules from a file similar to modules-load.d, with commented
lines and empty lines ignored. Add a simple test script for that and run
it in check().
2020-04-12 00:56:22 +02:00
Oliver Smith
3e7604601a
main/postmarketos-mkinitfs: split mkinitfs funcs (!1123)
Split mkinitfs.sh into two files, so the functions (now in
mkinitfs_functions.sh) can be sourced in a test. Such a test will be
added in the next commit.

Move $BINARIES_EXTRA into the get_binaries_extra() function, so its
$(find...) does not get executed when sourcing the functions file. Move
$BINARIES into get_binaries() too for consistency.
2020-04-12 00:56:22 +02:00
Oliver Smith
74f42ebeb0
main/postmarketos-mkinitfs: pass shellcheck (!1123)
Make it pass shellcheck by fixing obvious mistakes like '==' instead of
'='. Add "shellcheck disable" lines for things that are intentionally done
or would be a bit more complicated to rewrite. It would be nice to
refactor some things like '${outfile/initramfs-/uImage-}', but this should
be done in a separate change (patches welcome).

Remove unused variable "modules_path". While at it, add two new fatal
error messages instead of just "exit 1" without any comment and remove
redundant mkdir in APKBUILD.
2020-04-12 00:56:17 +02:00
Daniele Debernardi
bd15afc217
main/postmarketos-mkinitfs: execute lddtree without privileges (!1133)
The lddtree script uses the scanelf utility which has some security check that causes a slowdown of the operation, executing it without privileges it's really faster.
2020-04-09 10:35:06 +02:00
Daniele Debernardi
36f15b58f6
main/postmarketos-mkinitfs: remove initramfs-extra cache (!1133) 2020-04-09 10:35:03 +02:00
Daniele Debernardi
de6deb8201
main/postmarketos-mkinitfs: check if initramfs-extra is missing (!1046) 2020-03-10 01:23:14 +01:00
Martijn Braam
ec83ab9a06
postmarketos-mkinitfs: fix unlocking with pmos_root (!943)
Fix --fde on the PinePhone (actually it fixes it for devices that
uses the pmos_root cmdline).
2020-03-01 00:43:08 +01:00
Minecrell
ed3eeeeebb
main/postmarketos-mkinitfs: append extra initfs hash to file contents (!983)
Partial revert of 24fa68c9 ("avoid storing initramfs-extra twice").

Some people have (rightfully) complained that including the hash
in the filename of the initramfs-extra prevents the device from booting
whenever the boot partition gets out of sync with the boot image.

In general we should assume that those two are in sync, but there is
no need to unnecessarily break this if previously booting the outdated
extra initramfs worked just fine.

At the end, the hash is just an implementation detail for the caching
mechanism - we need it when (re-)generating the initramfs, but it does
not have to be within the filename. Instead, we can simply append the
hash to the file contents. GZIP will simply ignore the trailing garbage.

The boot partition will then look like:
    $ cat /boot/initramfs-<flavor>-extra
    <GZIP data>d3c7b449c6fc811d97351bbc46852b66 (the hash)

This makes the filename of initramfs-extra nice and stable again.
It also fixes a regression where the initramfs-extra would no longer
get symlinked by "pmbootstrap export" (I was going to fix that in
pmbootstrap but now this solution is more appealing...)

While we're at it: Make the script more resilient again by writing
to a temporary file first, then move it (atomically) to the real path.
2020-03-01 00:31:27 +01:00
Dolphin von Chips
2bb9599dce
main/postmarketos-mkinitfs: add option to append SEANDROIDENFORCE to boot.img (!1000) 2020-02-27 20:19:21 +03:00
Minecrell
24fa68c9b6
main/postmarketos-mkinitfs: avoid storing initramfs-extra twice (!932)
At the moment we store the same initramfs-extra twice on the file system:
  - /boot/initramfs-<flavor>-extra
  - /var/cache/postmarketos-mkinitfs/initramfs-<flavor>-extra_<hash>

The second copy is exactly the same file, just with the <hash> (for caching)
appended to the filename.

We can avoid this by appending the hash directly to the filename
on the boot partition, i.e.
  - /boot/initramfs-<flavor>-extra_<hash>

This is possible because we only reference initramfs-extra from the main
initramfs, and we already replace the path in it dynamically.
It will just let the main initramfs load -extra_<hash> instead of just -extra.

This saves a few megabytes of disk space on the rootfs.
2020-02-10 01:38:18 +03:00
Minecrell
e3d07c832c
main/{devicepkg-dev,postmarketos-mkinitfs}: statically generate splash screens (!899)
We need to generate the splash screens separately for each device,
because they are specific to the device's display resolution.

At the moment we do this dynamically during the installation process.
This has the advantage that there is no need to re-build all device
packages when one of the splash screen is changed (or a new one is added).

In reality, however, the splash screens do not change very frequently.
On the other hand, generating the splash screens dynamically has signficant
disk usage overhead for a minimal ("none" UI) rootfs:

The Python interpreter together with the necessary libraries requires
about ~60 MB of disk space on aarch64.
The splash screens itself require about ~100 KB for 720x1280.

This is not necessary if we move the splash screen generation into
devicepkg-dev, which is used to build the device package for all devices.
Another advantage is that we no longer need the (rather complicated)
caching mechanism for splash screens - so we actually end up with less
lines than before.

rootfs size for samsung-a5ulte ("none" UI):
  Before: 450M
  After:  388M (-62M)

After this change, every(!) device package needs to be rebuilt once.
No changes are necessary in device packages.
2020-01-28 15:33:40 +01:00
Pops Dylan
8760409717
main/postmarketos-mkinitfs: enable profiling with bootchart (!852)
If (a) the kernel command line parameters include PMOS_BOOTCHART2 and
(b) /sbin/bootchartd exists (i.e., the bootchart2 package has been
installed), run /sbin/bootchartd instead of /sbin/init.
2020-01-13 15:44:51 +03:00
Martijn Braam
cfcf1e6d7d
main/postmarketos-mkinitfs: added pmos_boot and pmos_root (!756) 2019-11-24 20:16:41 +01:00
Danct12
dd028490c4
main/postmarketos-mkinitfs: make android_usb attrs customizable (!734)
ConfigFS USB attrs are customizable based on the `deviceinfo_usb_*` variables,
however some downstream kernels (e.g: msm-3.18) doesn't use configfs, instead
uses the traditional Android USB Gadget.

Based on `deviceinfo_usb_{idVendor/idProduct}` variables, we can change the USB
vendor and product.

So that on these devices, we can make it appear on USB bus as the correct USB
vendor/product ID, not "Google Inc. Nexus 4 (fastboot)"

Signed-off-by: Danct12 <danct12@disroot.org>
2019-11-11 13:56:47 +07:00
lambdadroid
803b8dcec9
main/postmarketos-mkinitfs: stop forcing full fsck on every boot (!723)
At the moment, a full file system check is forced even if the
file system is marked clean (i.e. it was properly unmounted the
last time it was used). On large file systems with slow I/O
(e.g. SD cards), this can take a significant amount of time.

Removing the -f option of e2fsck allows skipping the full
file system check if it is marked clean, speeding up the boot time.
2019-11-06 00:08:50 +01:00
Alexey Min
68821d2cb2
main/postmarketos-mkinitfs: make USB configfs attrs customizable (!706)
Some devices' downstream kernels may have different RNDIS/functionfs
drivers (ex. QCRNDIS) that require different values for some
configfs gadget attributes. Make it possible to customize with
deviceinfo file from device- package.

The idea is that each device- package can optionally specify a
bunch of `deviceinfo_usb_*` variables to customize the way it is
visible on USB bus. The ability to override
`deviceinfo_usb_rndis_function` is essential to make downstream
sdm660 based device to appear on USB bus.

While at it, make `idVendor`, `idProduct` and `serialnumber` also
customizable. So that we can make, for example, PineTab appear on
USB bus as PineTab, not as "Google Inc. Nexus 4 (fastboot)".
2019-11-05 23:33:22 +01:00
lambdadroid
74815e3312
main/postmarketos-mkinitfs: add option to place DTB in Android boot image second area (!700)
Mainline U-Boot looks for the device tree blob in the "second" area
of the Android boot image (see https://patchwork.ozlabs.org/patch/1025211/).

Add an option "deviceinfo_bootimg_dtb_second" to place the device DTB there.
2019-10-30 19:15:00 +01:00
lambdadroid
0c76dd4ce3
main/postmarketos-mkinitfs: configure USB gadget serialnumber (!684)
Currently, the USB networking setup using configfs does not configure
a "serialnumber" for the USB gadget. This means that an empty
serial number will be sent during USB enumeration.

This is usually not a problem, but it seems to cause issues under
special circumstances (on asus-me176c on one of my PCs).

The USB Gadget configfs documentation also suggests setting
the "serialnumber":
  https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt
It can be any string, so we can just set it as "postmarketOS" like
the manufacturer.
2019-10-23 23:27:16 +02:00
lambdadroid
2c57359b8a
main/postmarketos-mkinitfs: include ext4 and usb_f_rndis in initramfs (!673)
The initramfs needs ext4 (to mount the rootfs) and usb_f_rndis
(to enable USB networking on devices that use USB configfs).
If these are built as modules, they need to be included in initramfs.

[ci:skip-build]: already built successfully in CI
2019-10-13 21:22:42 +02:00
Oliver Smith
8c34ea6f81
main/postmarketos-mkinitfs: make shellcheck happy (!636)
We'll switch from whatever version of shellcheck is packaged in Debian
stretch to the newer version in Alpine edge in the next commit. Adjust
postmarketos-mkinitfs first, so it doesn't report any errors.
2019-09-26 21:27:58 +02:00
mgulin
9e37742928
main/postmarketos-mkinitfs: custom legacy uboot initfs addr (!578)
Seems like VIA/Wondermedia 8850 devices do not boot with the default
address. Add new deviceinfo_legacy_uboot_load_address variable to
allow setting a custom one.
2019-08-31 20:21:11 +02:00
lambdadroid
68be470893
main/postmarketos-mkinitfs: Do not forcefully include DRM in initfs (!548)
The DRM module itself can not do anything without a DRM driver.
It just takes up precious space (about ~5 MB for aarch64)
on the boot partition.

Devices that do include the appropriate DRM driver via
deviceinfo_modules_initfs will automatically pull in
"drm" and "drm_kms_helper" as dependencies, if needed.
So there is no need to depend on it explicitly.
2019-08-06 12:51:38 +02:00
Luca Weiss
c2444a0870
main/postmarketos-mkinitfs: Fix spaces->tabs (!536)
[ci:skip-vercheck]
2019-08-06 12:37:12 +02:00
Luca Weiss
ed182b60ff
main/postmarketos-mkinitfs: Use the original filename for the dtb (!536) 2019-08-06 12:37:12 +02:00
Daniele Debernardi
e4e38c2001
main/postmarketos-mkinitfs: add deviceinfo_framebuffer_landscape (!546)
Use deviceinfo_framebuffer_landscape during splash screen generation.
Also add the postmarketos-splash arguments variable to the computation
of the hash for the cache.

Adjust device-pine-pinetab to use the new variable, and therefore rotate
its splash screen.

[ci:skip-build]: already built successfully in CI
2019-08-06 12:00:31 +02:00
Luca Weiss
7699f8d537
main/postmarketos-mkinitfs: set pmOS-specific firmware path (!515)
Currently we rely on the fact, that the kernel asks user space to load
the firmware for it, so we can use the /lib/firmware/postmarketos
directory for firmware.

As the kernel has support for loading the firmware itself since
v3.7, and the parameter for adding an additional path to the search
paths was added with v3.10, we can use that to not rely on
CONFIG_FW_LOADER_USER_HELPER being set.
2019-07-25 20:30:04 +02:00
Martijn Braam
74ac6819c9
main/postmarketos-mkinitfs: verbose network log (!468)
Make the initfs show better errors in the network setup part.
2019-06-30 11:49:03 +02:00
Luca Weiss
693079abb5
mkinitfs: Introduce deviceinfo_append_dtb variable (!387)
We don't need to append the dtb to the kernel image in all cases, with
e.g. the u-boot bootloader we can load the dtb seperately from the
kernel image. Introduce a new variable deviceinfo_append_dtb, if set to
"true", append the dtb, otherwise just copy the dtb file to the boot
partition.

Fixes #260

[ci:ignore-count]
2019-06-02 03:13:43 +02:00
Martijn Braam
d72923dcd5
main: linux-postmarketos-allwinner: PinePhone updates
- main: postmarketos-mkinitfs: Add /run
  Create the /run directory in the initramfs so that cryptsetup doesn't
  crash on not being able to create /run/cryptsetup for lockfiles

- device: pine-dontbeevil: Remove workaround for touchscreen

- main: linux-postmarketos-allwinner: Implemented supplies for touchscreen
  This uses a slightly newer commit from the kernel repo that implements
  requesting a regulator in the touchscreen driver

- device: pine-dontbeevil: Remove ethernet from initramfs
  This actually makes debugging more complicated since networkmanager wont
  touch the ethernet adapter afterwards and the initramfs can be debugged
  over uart

- temp/u-boot: sync APKBUILD with upstream and update to 2019.04

- main: linux-postmarketos-allwinner: Use 20190521 git version
2019-05-23 14:39:21 +02:00
Martin Piatka
8caa370611 postmarketos-mkinitfs: Support initramfs compressions other than gzip (!334)
The postmarketos initramfs is larger than android initramfs. This causes
problems on some devices like htc-ace that have a very small boot
partition (4MB in htc-ace). I've been able to make the boot image small
enough to fit by compressing initramfs using lzma.
With this change it should be possible to change the compression in
deviceinfo like this: deviceinfo_initfs_compression='lzma'
or even deviceinfo_initfs_compression='lzma -9'. When no option is
specified it defaults to 'gzip -1'.

I've also added dependencies to compression utilities for all possible
initramfs compression algorithms.
2019-04-30 17:12:33 +00:00
Zhuowei Zhang
7df2c93459
main/postmarketos-mkinitfs: support verbose boot (!234)
Adds a new initfs hook, verbose-initfs, which doesn't do anything on its
own. Modify postmarketos-mkinitfs to check if this hook is installed and
if so run `set -x`.

It's done this way so verbose boot is enabled as early as possible,
before hooks are loaded.

Tested on the qemu-aarch64 device.

- pmboostrap initfs hook_add verbose-initfs
- pmbootstrap qemu --arch aarch64
- confirmed that commands are echoed to the console
2019-02-27 21:02:02 +01:00
Zhuowei Zhang
2a4d30e52a
main/postmarketos-mkinitfs: fix USB idVendor/idProduct values for ConfigFS (!190)
ConfigFS expects idVendor and idProduct values to be prefixed with 0x.

Without this change, google-crosshatch shows as a device with 0:0 as the
idVendor/idProduct in lsusb:

Bus 001 Device 004: ID 0000:0000

This confuses VirtualBox: it has trouble detaching this device from
a virtual machine, so one must manually use ifconfig to bring down the
old USB network connection before reattaching.

With this change, the idVendor/idProduct is correct:

Bus 001 Device 004: ID 18d1:d001 Google Inc.

This issue also seems to affect other devices with ConfigFS, such as the
Nexus 5:

https://matrix.to/#/!clcCCNrLZYwdfNqkkR:disroot.org/$15487159511194991apGpy:matrix.org
2019-02-05 10:07:21 +01:00
Clayton Craft
018e28cc66
main/postmarketos-mkinitfs: aarch64 uboot initrd (!141)
Support generating the aarch64 legacy uboot initrd files, not only the
armhf version. Use deviceinfo_arch to choose the right arch.
2019-01-28 20:45:18 +01:00
Daniele Debernardi
a98b900b65
postmarketos-mkinitfs: skip fbsplash for deviceinfo_no_framebuffer (!108)
Also noticed that the debug-shell hook wasn't sourcing the deviceinfo
and still showing the splashscreen even with
deviceinfo_no_framebuffer="true", now is fixed and tested.

Additionally, fix a typo in the existing
"NOTE: Skipping framebuffer setup..." message.
2018-12-26 20:21:55 +01:00
pinoaffe
0188930f21
main/postmarketos-mkinitfs: iterate over all block devices and partitions in init_functions.sh:mount_subpartitions() 2018-11-27 07:47:11 +01:00
Pierre Parent
5db8fd724c
main/pmos-mkinitfs: wait for rootfs, framebuffer
Fix Nexus 5 (hammerhead) boot and framebuffer issues at startup by
waiting up to 10 seconds until the rootfs and /dev/fb0 have been
found. Waiting for the framebuffer device can be disabled by setting
deviceinfo_no_framebuffer=true in the deviceinfo.
2018-11-27 07:47:11 +01:00
Luca Weiss
98c88bd9f6
Fairphone 1 support 2018-11-27 07:47:11 +01:00
Martijn Braam
fb23669e29 * Added device package for the pine-a64lts
* Added linux-postmarketos-allwinner kernel
* Added copy of alpines u-boot package with pine-a64lts support
* Changed postmarketos-mkinitfs to add the plain .dtb file to the boot partition
2018-09-16 18:02:06 +02:00
Marti Raudsepp
ce5a83b978 Add initramfs error message when charging-sdl fails to run
There are devices where charging-sdl/directfb fails (osk-sdl#77).

It's nicer to give an error message than display "Loading..." forever.
2018-08-14 02:02:13 +00:00