aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: eebad0c4a3799732268678f31d2c0d74b0871bb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# ST-LSM6DSX-SHIFT13MI (v1.2)

Dieses Repositorium beinhaltet die Quelldaten des Pakets [st-lsm6dsx-shift13mi_1.2-1_amd64.deb](https://apt.twoexem.com/pool/main/s/st-lsm6dsx-shift13mi/), welches auf allen Geräten vom Typ SHIFT13mi / SHIFTbook der Firma SHIFT die Funktionsfähigkeit vom Gyroskop wiederherstellt.

Mehr Hintergründe zu diesem Problem sind auf [der Forumsseite](https://forum.shiftphones.com/threads/reparatur-des-lagesensors-unter-linux-fur-die-automatische-bildschirmorientierung.7817/) zu finden.

Dieses Paket wird nur solange nötig sein, bis ein Kernel-Patch im Mainline-Kernel ankommt.

## Um das Paket über meinen Server zu installieren:

1. GPG-Schlüssel importieren:

        $ curl https://apt.twoexem.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/twoexem.gpg

2. Apt-Quelle hinzufügen:

        $ echo "deb [signed-by=/etc/apt/keyrings/twoexem.gpg] https://apt.twoexem.com stable main" | sudo tee /etc/apt/sources.list.d/twoexem.list

3. Paket installieren:

        # apt update
        # apt install st-lsm6dsx-shift13mi

## Um das Paket selbst auf Ubuntu zu installieren:

1. Repo klonen:

        $ git clone https://git.twoexem.com/twoexem/st-lsm6dsx-shift13mi/
        cd st-lsm6dsx-shift13mi/

2. Das Paket erstellen:

        $ dpkg-deb --build --root-owner-group st-lsm6dsx-shift13mi

3. Das Paket installieren:

        # apt install ./st-lsm6dsx-shift13mi.deb

Zum Deinstallieren:

        # apt remove st-lsm6dsx-shift13mi

## Um das Paket auf allen anderen Distros OHNE DKMS zu installieren:

### Wichtig: Das Patch wird nach jedem Kernel-Update entfernt und muss neu installiert werden.

1. Kernel-Quellen herunterladen. Die relevanten Dateien sind:
   
   - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
   - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
   - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
   - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
   - drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c

2. Die Datei st_lsm6dsx_i2c.c bearbeiten. Nach Zeile 146 muss folgender Inhalt eingefügt werden:
   
        	{ "SMOCF00", ST_LSM6DSO_ID, },

3. Ein Makefile mit folgendem Inhalt erstellen:

        obj-m += st_lsm6dsx.o st_lsm6dsx_i2c.o
        st_lsm6dsx-objs := st_lsm6dsx_core.o st_lsm6dsx_buffer.o st_lsm6dsx_shub.o

        all:
                make -C /usr/lib/modules/$(shell uname -r)/build M=$(PWD) modules

        install:
                zstd -f st_lsm6dsx_i2c.ko -o st_lsm6dsx_i2c.ko.zst
                cp st_lsm6dsx_i2c.ko.zst /usr/lib/modules/$(shell uname -r)/kernel/drivers/iio/imu/st_lsm6dsx/
                depmod -A

        clean:
                make -C /usr/lib/modules/$(shell uname -r)/build M=$(PWD) clean

4. Die geänderte Datei kompilieren:

        $ make

5. Das Paket installieren:

        # make install

6. Neue Datei /etc/udev/hwdb.d/10-sensor-shiftbook.hwdb erstellen und folgenden Inhalt einfügen:

        sensor:modalias:acpi:SMOCF00:*
         ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1

    #### Wichtig: Das Leerzeichen vor der zweiten Zeile muss vorhanden sein.

7. Alle wichtigen Dienste neu starten:
   
        # systemd-hwdb update
        # udevadm trigger
        # systemctl restart iio-sensor-proxy

## Um das Paket auf allen anderen Distros MIT DKMS zu installieren:

1. Kernel-Quellen herunterladen. Die relevanten Dateien sind:
   
   1. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c
   2. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
   3. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
   4. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
   5. drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c

2. Die Datei st_lsm6dsx_i2c.c bearbeiten. Nach Zeile 146 muss folgender Inhalt eingefügt werden:
   
        	{ "SMOCF00", ST_LSM6DSO_ID, },

3. Ein Makefile mit folgendem Inhalt erstellen:

        obj-m += st_lsm6dsx.o st_lsm6dsx_i2c.o
        st_lsm6dsx-objs := st_lsm6dsx_core.o st_lsm6dsx_buffer.o st_lsm6dsx_shub.o

4. Eine Datei namens dkms.conf erstellen:

        PACKAGE_NAME="st-lsm6dsx-shift13mi"
        PACKAGE_VERSION="1.2"

        BUILT_MODULE_NAME[0]="st_lsm6dsx_i2c"

        BUILT_MODULE_LOCATION[0]=""

        DEST_MODULE_LOCATION[0]="/kernel/drivers/iio/imu/st_lsm6dsx/"

        AUTOINSTALL="yes"

        MAKE="make -C /usr/lib/modules/${kernelver}/build M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build"
        CLEAN="make -C /usr/lib/modules/${kernelver}/build M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean"

5. Den Treiber kompilieren und installieren:
 
        # dkms add st-lsm6dsx-shift13mi/1.2
        # dkms build st-lsm6dsx-shift13mi/1.2
        # dkms install st-lsm6dsx-shift13mi/1.2

6. Neue Datei /etc/udev/hwdb.d/10-sensor-shiftbook.hwdb erstellen und folgenden Inhalt einfügen:

        sensor:modalias:acpi:SMOCF00:*
         ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1

    #### Wichtig: Das Leerzeichen vor der zweiten Zeile muss vorhanden sein.

7. Alle wichtigen Dienste neu starten:
   
        # systemd-hwdb update
        # udevadm trigger
        # systemctl restart iio-sensor-proxy

Um den Treiber zu deinstallieren:

        # dkms remove st-lsm6dsx-shift13mi/1.2