Today, I tried to compress initramfs-linux.img
and initramfs-linux-fallback.img
to get more space in /boot
partition. During the generate processing of them, I found some warning messages like this:
Possibly missing firmware for module: aic94xx
Possibly missing firmware for module: wd719x
Notes: It’s may different on your computer depend on its hardwares.
- wd719x: Driver for Western Digital WD7193, WD7197 and WD7296 SCSI cards
- aic94xx: Adaptec SAS 44300, 48300, 58300 Sequencer Firmware for AIC94xx driver
As I known, most common firmware files can be acquired by installing the linux-firmware
package. But you’re still missing them like me, you could install it by yourself. If you do not use hardware which uses these firmwares you can safely ignore this message.
Possibly missing firmware for module XXXX
In my case, I looking for the missing firmwares from AUR then install it, after that, I rebuild the kernel image. Here is my solution:
$ yay -S aic94xx-firmware wd719x-firmware --noconfirm
$ sudo mkinitcpio -p linux
Since I replace my old laptop with Huawei Matebook D15 I faced with new missing firmware’s module called as: xhci_pci
.
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 5.8.0-arch1-1
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: xhci_pci
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
According to my experience, the missing firmware’s module is a USB controller. After researching online, I found it’s Renesas uPD720202 USB 3.0 controller, and it DID work with 5.7.12-arch1-1, but it does NOT work with kernel 5.8.1+.
Fortunately, I found that firmware in AUR: <a href="https://aur.archlinux.org/packages/upd72020x-fw/">upd72020x-fw</a>
– Renesas uPD720201 / uPD720202 USB 3.0 chipsets firmware. Install it from AUR then rebuild the kernel, the problem solved.
mkinitcpio: consolefont error
As you see on the image above, my system missed consolefont
with message: ==> WARNING: consolefont: no font found in configuration
To fix it, you need provide the console font name in /etc/vconsole.conf
, here is mine:
FONT=tcvn8x16
KEYMAP=us
To find the correct console font’s names, you could view the list of them in /usr/share/kbd/consolefonts/
.
Addition: Compress initramfs-linux.img in /boot
I mentioned at the begin of this post, I tried to compress initramfs-linux.img
and initramfs-linux-fallback.img
to decrease their file size because I need more free space to install GRUB themes.
Change /boot
parition size if you’re running a system with multi-OS is risky and too complex. That’s why I tried to compress them to smaller file size.
By default, the configuration of mkinitcpio is not provide the compress method. So then the Linux kernel updated, it’ll generating the uncompress image include fallback version. The most common size of /boot
(or EFI
) partision is 100MB, it’s just almost enough disk space for Windows and Linux. To get more free space, you must created it manual.
My goal is compress initramfs-linux.img
and initramfs-linux-fallback.img
to small size, so I take a look in to /etc/mkinitcpio.conf
:
# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()
For most use cases, gzip, lzop, and lz4 provide the best balance of compressed image size and decompression speed. You can choose a better compression algorithm, the default should still be gzip, but xz (or lzma2), bzip… are better. After tested several times, I found xz is best for my goal. The initial compression takes longer, but decompression during boot shouldn’t take much longer. Both options together may also reduce your boot time a little bit.
After setting this, run sudo mkinitcpio -p linux
all to have it take effect.