Draft:Porting to a new device/Device package
The next step is to adjust and build the device-vendor-codename package. A mostly complete device package was generated by pmbootstrap during the initialization step.
Open the ~/.local/var/pmbootstrap/cache_git/pmaports/device/downstream/device-vendor-codename directory (replace vendor-codename with your device's vendor/codename).
deviceinfo adjustments
deviceinfo options, see Deviceinfo reference.The deviceinfo file stores information related to the device: its metadata (like name, chassis type or release year), as well as options related to initramfs generation and flashing.
There are some adjustments that you may need to do to the deviceinfo file:
Enabling the minimal initramfs
If your device has a boot partition smaller than ~16MB, or if flashing the kernel fails with an "image too large" error, you might need to switch to the minimal initramfs.
Add the following line to the deviceinfo file:
deviceinfo_create_initfs_extra="true"
rootfs block size
If your device uses UFS storage, you may need to configure the rootfs image sector size. It defaults to 512b, but some devices use 4096b. In a root shell, check your sector size with:
# blockdev --getss /dev/block/sda
If the sector size is 4096 bytes, add the following line to the deviceinfo file:
deviceinfo_rootfs_image_sector_size="4096"
Flash offsets
If you skipped the boot.img analysis step during pmbootstrap init, you can get the flash offset values by running:
$ pmbootstrap bootimg_analyze path/to/boot.img
Paste the output of the command into the deviceinfo file.
Setting the DTB location
If deviceinfo_header_version is 2 or higher, fill in deviceinfo_dtb with the name of your device's dtb (without the dtb suffix). You should've found the location of the DTB file in the kernel package step.
deviceinfo_dtb="samsung/exynos4412-i9300"
Heimdall: Setting the partition names
For Samsung devices using the Odin protocol/Heimdall flashing method, you may need to set the system/rootfs and boot/kernel partitions manually.
To get a list of valid partitions, boot the device into download mode and run:
# heimdall print-pit
Find the system/rootfs and boot/kernel partitions there, then fill the deviceinfo_flash_heimdall_partition_* options accordingly:
deviceinfo_flash_heimdall_partition_kernel="KERNEL"
deviceinfo_flash_heimdall_partition_rootfs="system"
Setting the partition type to MBR
| This only applies to non-Android devices. |
pmbootstrap uses GPT as the default partition table for SD card/disk installs. If your device doesn't support GPT (e.g. if it uses an old U-Boot version), add the following line to use MBR instead:
deviceinfo_partition_type="msdos"
Direct Rendering Manager (DRM) support
DRM is the mechanism used in modern Linux kernels to provide display output; it supersedes the previously used fbdev, which most downstream kernels use.
Many UIs such as Phosh, Plasma Mobile and pretty much anything that uses Wayland require DRM support in the kernel; as such, these UIs are hidden by default unless the device declares DRM support.
If your device is running a mainline kernel, add the following line to the deviceinfo file:
deviceinfo_drm="true"
Updating checksums and building the device package
If you modified the deviceinfo file, you need to regenerate the checksums:
$ pmbootstrap checksum device-vendor-codename
Afterwards, you need to build the package:
$ pmbootstrap build device-vendor-codename
| TODO: Are there common errors that should be mentioned here? |
| TODO: Mention postmarketos-update-kernel |