sudo pesign -i /boot/vmlinuz-5.15.0-41-generic -o /boot/vmlinuz-5.15.0-41-unsigned -r -u 0
sudo update-grubI have a bad feeling about this (won't boot any more), but I'll try.
If it were to be that simple to disable the signature checking, than what would stop a malware to do the same?
Unless you have some very good reasons to use signed stuff...
Keep your life simple.
Get a clean stock tree
Compile it clean and all integrated...
DIFFERENT VERSION from current running... (install clean)
Add it to the boot list.
Avoid grub mess
Paul
sudo pesign -i /boot/vmlinuz-5.15.0-41-generic -o /boot/vmlinuz-5.15.0-41-unsigned -r -u 0
sudo update-grub
sudo apt install pesign
man pesign
sudo pesign -i /boot/vmlinuz-5.15.0-41-generic -o /boot/vmlinuz-5.15.0-41-unsigned -r -u 0
sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: vmlinuz-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx
Found initrd image: initrd.img-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx
Found linux image: vmlinuz-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx
Found initrd image: initrd.img-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
dpkg: warning: version 'ed/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
dpkg: warning: version 'ed_and_clean_wine/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed_and_clean_wine/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
dpkg: warning: version 'ed_wine5_installs/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed_wine5_installs/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
dpkg: warning: version 'designer_lxi-tools/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'designer_lxi-tools/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_added_Qt5-designer_lxi-tools
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_added_Qt5-designer_lxi-tools
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_added_Qt5-designer_lxi-tools
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_added_Qt5-designer_lxi-tools
dpkg: warning: version 'Hot-Pursuit-attempt/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'Hot-Pursuit-attempt/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_tmp_before_NFS-Hot-Pursuit-attempt
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_tmp_before_NFS-Hot-Pursuit-attempt
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_tmp_before_NFS-Hot-Pursuit-attempt
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_tmp_before_NFS-Hot-Pursuit-attempt
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_with_games
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_with_games
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_with_games
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_with_games
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_jc7jse
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_jc7jse
...
...
Found initrd image: initrd.img-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found linux image: vmlinuz-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found initrd image: initrd.img-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found linux image: vmlinuz-5.15.0-41-unsigned in rpool/ROOT/ubuntu_ifipuu
Warning: Couldn't find any valid initrd for dataset rpool/ROOT/ubuntu_ifipuu.
Found linux image: vmlinuz-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
Found linux image: vmlinuz-5.13.0-52-generic in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.13.0-52-generic in rpool/ROOT/ubuntu_ifipuu
cannot open 'bpool/BOOT/default': dataset does not exist
Warning: didn't find any valid initrd or kernel.
device-mapper: reload ioctl on osprober-linux-sda4 failed: Device or resource busy
Command failed.
Adding boot menu entry for UEFI Firmware Settings
done
sudo pesign -S -i /boot/vmlinuz-5.15.0-41-generic
---------------------------------------------
certificate address is 0x7f6003a3f368
Content was not encrypted.
Content is detached; signature cannot be verified.
The signer's common name is Canonical Ltd. Secure Boot Signing (2017)
No signer email address.
Signing time: Wed Jun 29, 2022
There were certs or crls included.
---------------------------------------------
sudo pesign -S -i /boot/vmlinuz-5.15.0-41-unsigned
No signatures found.
cat /proc/cmdline
BOOT_IMAGE=/BOOT/ubuntu_ifipuu@/vmlinuz-5.15.0-41-generic root=ZFS=rpool/ROOT/ubuntu_ifipuu ro quiet splash vt.handoff=1
I certainly did not ask for signed modules, and I didn't know they were so until yesterday, when I tried to install a modified one. From now on I'll experiment on another clean install, and let this OS as it is for now.
Code: [Select]Found linux image: vmlinuz-5.15.0-41-unsigned in rpool/ROOT/ubuntu_ifipuu
Warning: Couldn't find any valid initrd for dataset rpool/ROOT/ubuntu_ifipuu.
Found linux image: vmlinuz-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
BOOT_IMAGE=/BOOT/ubuntu_ifipuu@/vmlinuz-5.15.0-41-unsigned root=ZFS=rpool/ROOT/ubuntu_ifipuu ro quiet splash vt.handoff=1
in Grub.
I certainly did not ask for signed modules, and I didn't know they were so until yesterday, when I tried to install a modified one. From now on I'll experiment on another clean install, and let this OS as it is for now.What a wart, when a plain sudo update-grub reports errors...
sudo cp /boot/initrd.img-5.15.0-41-generic /boot/initrd.img-5.15.0-41-unsigned
sudo cp /boot/System.map-5.15.0-41-generic /boot/System.map-5.15.0-41-unsigned
sudo cp /boot/config-5.15.0-41-generic /boot/config-5.15.0-41-unsigned
ls -l /boot/*5.15.0-41*
-rw-r--r-- 1 root root 262026 Jun 24 16:04 /boot/config-5.15.0-41-generic
-rw-r--r-- 1 root root 262026 Jul 27 23:46 /boot/config-5.15.0-41-unsigned
-rw-r--r-- 1 root root 170835870 Jul 13 22:37 /boot/initrd.img-5.15.0-41-generic
-rw-r--r-- 1 root root 170835870 Jul 27 23:43 /boot/initrd.img-5.15.0-41-unsigned
-rw------- 1 root root 6218651 Jun 24 16:04 /boot/System.map-5.15.0-41-generic
-rw------- 1 root root 6218651 Jul 27 23:44 /boot/System.map-5.15.0-41-unsigned
-rw------- 1 root root 11000544 Jun 24 14:37 /boot/vmlinuz-5.15.0-41-generic
-rw------- 1 root root 10998624 Jul 27 20:22 /boot/vmlinuz-5.15.0-41-unsigned
sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: vmlinuz-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx
Found initrd image: initrd.img-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx
Found linux image: vmlinuz-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx
Found initrd image: initrd.img-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_wo_AutoKey_for_F12_Timestamp
dpkg: warning: version 'ed/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@full_OS_config-ed
dpkg: warning: version 'ed_and_clean_wine/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed_and_clean_wine/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_and_clean_wine
dpkg: warning: version 'ed_wine5_installs/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'ed_wine5_installs/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found initrd image: initrd.img-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found linux image: vmlinuz-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
Found initrd image: initrd.img-5.11.0-27-generic in rpool/ROOT/ubuntu_eqazcx@OS_config-ed_wine5_installs
dpkg: warning: version 'designer_lxi-tools/vmlinuz-5.11.0-41-generic' has bad syntax: version number does not start with digit
dpkg: warning: version 'designer_lxi-tools/vmlinuz-5.11.0-27-generic' has bad syntax: version number does not start with digit
Found linux image: vmlinuz-5.11.0-41-generic in rpool/ROOT/ubuntu_eqazcx@OS_added_Qt5-designer_lxi-tools
...
...
Found linux image: vmlinuz-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_wb5pqa
Found initrd image: initrd.img-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_wb5pqa
Found linux image: vmlinuz-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_wb5pqa
Found initrd image: initrd.img-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_wb5pqa
Found linux image: vmlinuz-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found initrd image: initrd.img-5.15.0-30-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found linux image: vmlinuz-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found initrd image: initrd.img-5.13.0-41-generic in rpool/ROOT/ubuntu_eqazcx@autozsys_8br34k
Found linux image: vmlinuz-5.15.0-41-unsigned in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.15.0-41-unsigned in rpool/ROOT/ubuntu_ifipuu
Found linux image: vmlinuz-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.15.0-41-generic in rpool/ROOT/ubuntu_ifipuu
Found linux image: vmlinuz-5.13.0-52-generic in rpool/ROOT/ubuntu_ifipuu
Found initrd image: initrd.img-5.13.0-52-generic in rpool/ROOT/ubuntu_ifipuu
cannot open 'bpool/BOOT/default': dataset does not exist
Warning: didn't find any valid initrd or kernel.
device-mapper: reload ioctl on osprober-linux-sda4 failed: Device or resource busy
Command failed.
Adding boot menu entry for UEFI Firmware Settings
done
reboot
cat /proc/cmdline
BOOT_IMAGE=/BOOT/ubuntu_ifipuu@/vmlinuz-5.15.0-41-unsigned root=ZFS=rpool/ROOT/ubuntu_ifipuu ro quiet splash
uname -r
5.15.0-41-generic
I certainly did not ask for signed modules, and I didn't know they were so until yesterday, when I tried to install a modified one. From now on I'll experiment on another clean install, and let this OS as it is for now.What a wart, when a plain sudo update-grub reports errors...I didn't meant to not try to finish this exercise, that thought was a way of agreeing with PKTKS about leaving Ubuntu for good at the next install, I would probably not upgrade it from 20.04 LTS to 22.04 LTS, but rather move to something like Devuan, or maybe move to FreeBSD entirely, the most unclutter OS I've seen so far.
Anyway the only place where I can see "vmlinuz-5.15.0-41-unsigned" (or the -original) is "/boot" (without manually handling datasets or snapshots) so just to be sure, I did a copy for any other "generic" as "unsigned", like this:Code: [Select]sudo cp /boot/initrd.img-5.15.0-41-generic /boot/initrd.img-5.15.0-41-unsigned
sudo cp /boot/System.map-5.15.0-41-generic /boot/System.map-5.15.0-41-unsigned
sudo cp /boot/config-5.15.0-41-generic /boot/config-5.15.0-41-unsigned
...
sudo update-grub
And it worked, it worked!
apt list *-5.15.0-41-*
Listing... Done
linux-buildinfo-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1 amd64
linux-cloud-tools-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1 amd64
linux-headers-5.15.0-41-generic/focal-updates,focal-security,now 5.15.0-41.44~20.04.1 amd64 [installed]
linux-image-5.15.0-41-generic/focal-updates,focal-security,now 5.15.0-41.44~20.04.1 amd64 [installed,automatic]
linux-image-unsigned-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1 amd64
linux-modules-5.15.0-41-generic/focal-updates,focal-security,now 5.15.0-41.44~20.04.1 amd64 [installed,automatic]
linux-modules-extra-5.15.0-41-generic/focal-updates,focal-security,now 5.15.0-41.44~20.04.1 amd64 [installed,automatic]
linux-modules-iwlwifi-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1 amd64
linux-modules-nvidia-418-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-450-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-470-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-470-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-510-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-510-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-515-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-modules-nvidia-515-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-418-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-450-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-470-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-470-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-510-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-510-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-515-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-objects-nvidia-515-server-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-signatures-nvidia-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1+1 amd64
linux-tools-5.15.0-41-generic/focal-updates,focal-security 5.15.0-41.44~20.04.1 amd64
diff -c ./patch_ca0132.c sound/pci/hda/patch_ca0132.c
*** ./patch_ca0132.c
--- sound/pci/hda/patch_ca0132.c 2022-07-27 16:59:02.162469113 +0300
***************
*** 1304,1309 ****
--- 1304,1310 ----
SND_PCI_QUIRK(0x1102, 0x0033, "Sound Blaster ZxR", QUIRK_SBZ),
SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI),
SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI),
+ SND_PCI_QUIRK(0x1102, 0x0011, "ASRock Fatal1ty Z97 Professional", QUIRK_R3DI),
SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI),
SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI),
SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D),
# temporary stop PulseAudio, or else triggering a reconfigure will I/O error as busy
systemctl --user stop pulseaudio.{socket,service}
# pretend the current onboard soundcard in "ASRock Fatal1ty Z97 Professional" motherbords,
# with vendor ID 0x11020011 would be a 0x1458A026, "Gigabyte G1.Sniper Z97", r3di
cat /sys/class/sound/hwC1D0/vendor_id
# 0x11020011 <-- this vendor ID is for "ASRock Fatal1ty Z97 Professional" motherbords
sudo sh': sudo sh -c "echo 0x1458A026 > /sys/class/sound/hwC1D0/vendor_id"
sudo sh': sudo sh -c "echo 1 > /sys/class/sound/hwC1D0/reconfig"
systemctl --user start pulseaudio.{socket,service}
/*
* This file was taken from the emu10k1 archives. I've cleaned up the code a
* bit and fixed some of the bugs, but other than that it's unchanged.
*/
/* By: Daniel Bertrand
Date: Nov 6th, 2000
Description: A software implementation of creatives LOG and EXP instructions
found in the emu10k1 processor. (Patent: WO 9901814 (A1))
I'm not sure if this is even legal, being a software implementation of a patented hardware instruction,
so I'm releasing it into the public domain (no license, no copyright).
Compiling:
exp:
gcc explog.c -o exp
usage:
./exp <log_data> <max_exponent_size> <Sign_control>
log:
gcc explog.c -DLOG -o log
usage:
./log <lin_data> <max_exponent_size> <Sign_control>
--
log converts linear to logarithmic
exp converts logarithmic to linear
Logarithmic representation:
| 31 |30 29-25|28-24 0|
|sign| exponent | Mantissa |
exponent size varies between 2 and 5 bits,
<max_exp_size> is specified in actual value, thus 3 bits is <max_exp_size>=7
max_exp_size can be anyvalue between 2 and 31.
*/
#include <stdio.h>
#include <stdlib.h>
/*
#include <linux/types.h>
search for existing replacements:
find /usr/include -iname types.h
/usr/include/rpc/types.h
/usr/include/sys/types.h
/usr/include/infiniband/types.h
*/
#include <infiniband/types.h>
__u32 log1(__u32 lin_data,__u32 max_exp,__u32 sign_ctrl)
{
int exp = (int)max_exp + 1;
__u32 result;
__u8 sign;
//FIX ME: mask inputs (i think this is what it does, haven't checked it yet):
sign_ctrl &= 0x03;
max_exp &= 0x1f;
sign = (lin_data >> 31) & 0x01;
/* Smallest exponent value is 2, if we're below that, default to 2. */
if (max_exp < 2)
max_exp = 2;
/* If the value is negative, one's complement the bits. */
if (sign)
lin_data= ~lin_data;
/*
* Continue to shift left until we either:
* - End up with the exponent being 0.
* - Or end up with the MSB set.
*/
while (!(lin_data & 0x80000000)) {
lin_data <<= 1;
exp--;
if (!exp)
break;
}
/*
* If the exponent is not 0, shift left by 1 to get rid of the
* implicit bit.
*/
if (exp)
lin_data <<= 1;
if (max_exp & 0x10)
result = (exp << 26) | (lin_data >> 6);
else if (max_exp & 0x8)
result = (exp << 27) | (lin_data >> 5);
else if (max_exp & 0x4)
result = (exp << 28) | (lin_data >> 4);
else
result = (exp << 29) | (lin_data >> 3);
printf("Exponent %d, mantissa 0x%08x, result 0x%08x.\n", exp, ((lin_data >> 1) + 0x80000000) >> 6, result);
/*
Sign control
------------
the result is complemented depending on the following conditions
|----------------|----------|---------|
| Sign Control | sign=0 | sign=1 |
|----------------|----------|---------|
| 00 | R | ~R |
|----------------|----------|---------|
| 01 | R | R |
|----------------|----------|---------|
| 10 | ~R | ~R |
|----------------|----------|---------|
| 11 | ~R | R |
|----------------|----------|---------|
*/
switch( sign_ctrl){
case 0:
if (sign)
result = ~result;
break;
case 2:
result = ~result;
break;
case 3:
if (!sign)
result= ~result;
break;
default:
break;
}
return result;
}
__u32 exp1(__u32 log_data,__u32 max_exp,__u32 sign_ctrl)
{
int exp = (int)max_exp + 1;
__u32 result;
__u8 sign;
sign_ctrl &= 0x03;
max_exp &= 0x1f;
sign = (log_data >> 31) & 0x01;
/* Smallest exponent value is 2, if we're below that, default to 2. */
if (max_exp < 2)
max_exp = 2;
/* If the value is negative, one's complement the bits. */
if (sign)
log_data = ~log_data;
//seperate mantissa and exponent
if (max_exp & 0x10) {
exp = log_data >> 26;
log_data <<= 6;
} else if (max_exp & 0x8) {
exp = log_data >> 27;
log_data <<= 5;
} else if (max_exp & 0x4) {
exp = log_data >> 28;
log_data <<= 4;
} else {
exp = log_data >> 29;
log_data <<= 3;
}
//put back the implicit 1
if (exp) {
log_data >>= 1;
log_data |= 0x80000000;
exp--;
}
//shift mantissa back down
result = log_data >> (max_exp - exp);
//handle sign
switch( sign_ctrl){
case 0:
if(sign!=0)
result= ~result;
return result;
case 1:
return result;
case 2:
return ~result;
case 3:
if(sign==0)
result= ~result;
return result;
}
}
int main (int argc, char *argv[])
{
if(argc!=4){
printf("usage: log <lin_value> <max exponent size> <sign control>");
return -1;
}
#ifdef LOG
printf("0x%08x\n",log1(strtoul(argv[1],NULL,16),strtoul(argv[2],NULL,16),strtoul(argv[3],NULL,16) ));
#else
printf("0x%08x\n",exp1(strtoul(argv[1],NULL,16),strtoul(argv[2],NULL,16),strtoul(argv[3],NULL,16) ));
#endif
return 0;
}
#!/usr/bin/env bash
#!/bin/bash
for i in {0..50}
do
./explog 10 $i 1
done
If anybody curious for a code puzzle, this is the C code for it:
Code: [Select]#ifdef LOG
printf("0x%08x\n",log1(strtoul(argv[1],NULL,16),strtoul(argv[2],NULL,16),strtoul(argv[3],NULL,16) ));
#else
printf("0x%08x\n",exp1(strtoul(argv[1],NULL,16),strtoul(argv[2],NULL,16),strtoul(argv[3],NULL,16) ));
#endif
What's the puzzle?