SlideShare a Scribd company logo
Don’t let your motivation go,
Don’t let your motivation go,
save time with kworkflow
save time with kworkflow
Melissa Wen
Melissa Wen
kernel GPU driver developer @ Igalia
kernel GPU driver developer @ Igalia
1
1 /
/ 25
25
Spending your life compiling the kernel
Spending your life compiling the kernel
So, you are a kernel developer…
So, you are a kernel developer…
… or wanna be a kernel developer…
… or wanna be a kernel developer…
… or don’t wanna be a kernel developer…
… or don’t wanna be a kernel developer…
United by a single need: Validate a custom kernel with a given change.
United by a single need: Validate a custom kernel with a given change.
2
2 /
/ 25
25
For a given distro:
For a given distro:
3
3 /
/ 25
25
For a given device:
For a given device:
4
4 /
/ 25
25
For a given subsystem:
For a given subsystem:
Patch flow into the mainline
mainline
$KORG/davem/net-next
1812
$KORG/kvalo/wireless-drivers-next 314
$KORG/iwlwifi/iwlwifi-next
73
$KORG/kvalo/wireless-drivers.git
1
$KORG/jkirsher/next-queue
64
$KORG/pablo/nf-next
61
$KORG/saeed/linux
47
$KORG/davem/net
12
$KORG/bluetooth/bluetooth-next 38
$KORG/klassert/ipsec-next 12
$KORG/dhowells/linux-fs 11
$KORG/mellanox/linux 9
309
8
$KORG/pablo/nf 26
$KORG/jberg/mac80211
24
$KORG/kvalo/wireless-drivers
22
$KORG/iwlwifi/iwlwifi-fixes
11
$KORG/jkirsher/net-queue
3
6
$KORG/klassert/ipsec 5
git.open-mesh.org/linux-merge
7
people.freedesktop.org/~airlied/linux
1193
anongit.freedesktop.org/git/drm-misc
349
anongit.freedesktop.org/git/drm-intel
18
281
github.com/01org/gvt-linux
19
people.freedesktop.org/~agd5f/linux
255
$KORG/tomba/linux
66
people.freedesktop.org/~gabbayo/linux
34
people.freedesktop.org/~robclark/linux
29
linuxtv.org/pinchartl/media
25
$KORG/daeinki/drm-exynos
23
anongit.freedesktop.org/tegra/linux
22
github.com/skeggsb/linux 21
git.pengutronix.de/git/lst/linux 11
people.freedesktop.org/~syeh/repos_linux
10
$KORG/mripard/linux 10
anongit.freedesktop.org/drm/drm-intel 8
git.pengutronix.de/git/pza/linux
7
$KORG/arm/arm-soc
17
github.com/foss-for-synopsys-dwc-arc-processors/linux
6
anongit.freedesktop.org/drm/drm-misc 3
$KORG/tip/tip
1038
$KORG/linusw/linux-gpio
8
$KORG/acme/linux
281
$KORG/paulmck/linux-rcu
65
$KORG/maz/arm-platforms
58
git.linaro.org/people/daniel.lezcano/linux
11
git.linaro.org/people/john.stultz/linux
7
863
$KORG/horms/renesas 127
$KORG/mmind/linux-rockchip 111
$KORG/clk/linux
21
$KORG/shawnguo/linux 77
$KORG/tmlind/linux-omap
71
$KORG/sunxi/linux 52
17
github.com/Broadcom/stblinux
36
git.infradead.org/linux-mvebu
35
github.com/mbgg/linux-mediatek
34
$KORG/khilman/linux-amlogic
33
github.com/BayLibre/clk-meson
1
$KORG/agross/linux
32
$KORG/krzk/linux
29
$KORG/ssantosh/linux-keystone
29
github.com/Xilinx/linux-xlnx 26
github.com/hisilicon/linux-hisi 24
$KORG/masahiroy/linux-uniphier 20
$KORG/tegra/linux
18
$KORG/atorgue/stm32
16
$KORG/linusw/linux-nomadik 9
$KORG/abelloni/linux
41
9
git.linaro.org/people/jens.wiklander/linux-tee 8
$KORG/nsekhar/linux-davinci
6
$KORG/sudeep.holla/linux
5
$KORG/nferre/linux-at91
5
$KORG/joel/aspeed 5
github.com/sverdlin/linux 4
$KORG/gregkh/staging 640
$KORG/jic23/iio 141
$KORG/mchehab/linux-media 625
$KORG/tiwai/sound 557
$KORG/broonie/sound
359
26
$KORG/dledford/rdma 375
$KORG/leon/linux-rdma
34
$KORG/powerpc/linux 354
$KORG/scottwood/linux
2
Applied by Linus 352
$KORG/jejb/scsi 304
git.kernel.dk/linux-block 295
git.infradead.org/nvme
57
$KORG/gregkh/char-misc 266
$KORG/ash/stm 16
$KORG/chanwoo/extcon
15
$KORG/kees/linux
44
6
$KORG/gregkh/usb 234
$KORG/balbi/usb
76
$KORG/kishon/linux-phy 28
$KORG/johan/usb-serial 11
$KORG/peter.chen/usb
6
$KORG/rafael/linux-pm 201
$KORG/mzx/devfreq
5
$KORG/helgaas/pci 187
git.linux-mips.org/pub/scm/ralf/upstream-linus
181
$KORG/broonie/spi 71
2
$KORG/linusw/linux-pinctrl
163
$KORG/geert/renesas-drivers
38
12
$KORG/pinctrl/samsung
8
$KORG/ulfh/mmc 160
$KORG/herbert/crypto-2.6 145
1
141
github.com/baylibre/clk-meson
15
$KORG/snawrocki/clk
4
$KORG/kdave/linux 126
$KORG/kvm/kvm 126
$KORG/paulus/powerpc
15
$KORG/kvms390/linux
9
$KORG/kvmarm/kvmarm
6
$KORG/joro/iommu 103
$KORG/will/linux
4
$KORG/arm64/linux
8
$KORG/gregkh/tty 101
95
$KORG/mark/linux
23
$KORG/lpieralisi/linux 3
$KORG/dtor/input 92
$KORG/gregkh/driver-core 37
1
git.infradead.org/linux-mtd 86
git.infradead.org/l2-mtd
62
2
git.linux-nfs.org/projects/trondmy/linux-nfs
83
git.linux-nfs.org/projects/anna/linux-nfs
17
77
github.com/bzolnier/linux 76
$KORG/shuah/linux-kselftest 74
$KORG/s390/linux 70
$KORG/kvms390/vfio-ccw
1
$KORG/xfs/xfs-linux 69
$KORG/viro/vfs 68
$KORG/lee/mfd 66
$KORG/jaegeuk/f2fs 66
$KORG/wsa/linux 63
github.com/peda-r/i2c-mux
9
git.lwn.net/linux 59
git.infradead.org/users/vkoul/slave-dma
58
github.com/andersson/remoteproc
56
$KORG/robh/linux 55
$KORG/jikos/hid 48
$KORG/jack/linux-fs 47
github.com/ceph/ceph-client
42
www.linux-watchdog.org/linux-watchdog
41
$KORG/sre/linux-power-supply
40
$KORG/deller/parisc-linux
40
$KORG/vgupta/arc
40
$KORG/xen/tip 38
$KORG/groeck/linux-staging 35
$KORG/davem/sparc-next 35
$KORG/davem/sparc
1
$KORG/thierry.reding/linux-pwm 33
$KORG/gfs2/linux-gfs2
32
$KORG/tj/percpu
32
$KORG/nvdimm/nvdimm
30
$KORG/rzhang/linux
28
git.infradead.org/linux-platform-drivers-x86 26
$KORG/broonie/regulator
25
$KORG/j.anaszewski/linux-leds
25
$KORG/tj/cgroup
24
$KORG/jmorris/linux-security
23
git.samba.org/sfrench/cifs-2.6
22
$KORG/shli/md
21
$KORG/rostedt/linux-trace
21
$KORG/device-mapper/linux-dm
20
$KORG/jj/linux-apparmor
18
$KORG/teigland/linux-dlm
18
linux-nfs.org/~bfields/linux
18
$KORG/mszeredi/vfs
17
$KORG/tj/libata
17
$KORG/bp/bp
16
git.infradead.org/users/hch/dma-mapping 15
$KORG/jlayton/linux
15
$KORG/ebiederm/user-namespace
15
$KORG/pcmoore/selinux
14
$KORG/tytso/ext4
13
git.armlinux.org.uk/~rmk/linux-arm
12
$KORG/mattst88/alpha
11
$KORG/masahiroy/linux-kbuild
10
$KORG/hubcap/linux
10
$KORG/rw/uml
9
$KORG/tj/wq
7
git.linaro.org/landing-teams/working/fujitsu/integration
6
git.infradead.org/linux-ubifs
6
github.com/awilliam/linux-vfio
6
$KORG/pmladek/printk
5
$KORG/lee/backlight
5
$KORG/pcmoore/audit
5
$KORG/geert/linux-m68k
5
$KORG/mason/linux-btrfs
5
$KORG/mszeredi/fuse
4
$KORG/jeyu/linux
4
git.monstr.eu/linux-2.6-microblaze
4
$KORG/cmetcalf/linux-tile
3
$KORG/lftan/nios2
3
$KORG/gerg/m68knommu
3
git.infradead.org/users/hch/uuid
2
github.com/openrisc/linux
2
git.kvack.org/~bcrl/aio-next
2
$KORG/jikos/livepatching
2
$KORG/jdelvare/staging
2
5
5 /
/ 25
25
Don't let your motivation go, save time with kworkflow
$KORG/davem/net-next
1812
$KORG/kvalo/wireless-drivers-next 314
$KORG/iwlwifi/iwlwifi-next
73
$KORG/kvalo/wireless-drivers.git
1
$KORG/jkirsher/next-queue
64
$KORG/pablo/nf-next
61
$KORG/saeed/linux
47
$KORG/davem/net
12
$KORG/bluetooth/bluetooth-next 38
$KORG/klassert/ipsec-next 12
$KORG/dhowells/linux-fs 11
$KORG/mellanox/linux 9
309
8
$KORG/pablo/nf 26
$KORG/jberg/mac80211
24
$KORG/kvalo/wireless-drivers
22
$KORG/iwlwifi/iwlwifi-fixes
11
$KORG/jkirsher/net-queue
3
6
$KORG/klassert/ipsec 5
git.open-mesh.org/linux-merge
7
people.freedesktop.org/~airlied/linux
1193
anongit.freedesktop.org/git/drm-misc
349
anongit.freedesktop.org/git/drm-intel
18
281
github.com/01org/gvt-linux
19
people.freedesktop.org/~agd5f/linux
255
$KORG/tomba/linux
66
people.freedesktop.org/~gabbayo/linux
34
people.freedesktop.org/~robclark/linux
29
linuxtv.org/pinchartl/media
25
$KORG/daeinki/drm-exynos
23
anongit.freedesktop.org/tegra/linux
22
github.com/skeggsb/linux 21
git.pengutronix.de/git/lst/linux 11
people.freedesktop.org/~syeh/repos_linux
10
$KORG/mripard/linux 10
anongit.freedesktop.org/drm/drm-intel 8
git.pengutronix.de/git/pza/linux
7
$KORG/arm/arm-soc
17
github.com/foss-for-synopsys-dwc-arc-processors/linux
6
anongit.freedesktop.org/drm/drm-misc 3
$KORG/tip/tip 1038
$KORG/linusw/linux-gpio
8
$KORG/acme/linux
281
$KORG/paulmck/linux-rcu
65
$KORG/maz/arm-platforms
58
git.linaro.org/people/daniel.lezcano/linux
11
git.linaro.org/people/john.stultz/linux
7
863
$KORG/horms/renesas 127
$KORG/mmind/linux-rockchip 111
$KORG/clk/linux
21
$KORG/shawnguo/linux 77
$KORG/tmlind/linux-omap
71
$KORG/sunxi/linux 52
17
github.com/Broadcom/stblinux
36
git.infradead.org/linux-mvebu
35
github.com/mbgg/linux-mediatek
34
$KORG/khilman/linux-amlogic
33
github.com/BayLibre/clk-meson
1
$KORG/agross/linux
32
$KORG/krzk/linux
29
$KORG/ssantosh/linux-keystone
29
github.com/Xilinx/linux-xlnx 26
github.com/hisilicon/linux-hisi 24
$KORG/masahiroy/linux-uniphier 20
$KORG/tegra/linux
18
$KORG/atorgue/stm32
16
$KORG/linusw/linux-nomadik 9
$KORG/abelloni/linux
41
9
git.linaro.org/people/jens.wiklander/linux-tee 8
$KORG/nsekhar/linux-davinci
6
$KORG/sudeep.holla/linux
5
$KORG/nferre/linux-at91
5
$KORG/joel/aspeed 5
github.com/sverdlin/linux 4
$KORG/gregkh/staging 640
$KORG/jic23/iio 141
$KORG/mchehab/linux-media 625
$KORG/tiwai/sound 557
$KORG/broonie/sound
359
26
$KORG/dledford/rdma 375
$KORG/leon/linux-rdma
34
$KORG/powerpc/linux 354
$KORG/scottwood/linux
2
Applied by Linus 352
$KORG/jejb/scsi 304
git.kernel.dk/linux-block 295
git.infradead.org/nvme
57
$KORG/gregkh/char-misc 266
$KORG/ash/stm 16
$KORG/chanwoo/extcon
15
$KORG/kees/linux
44
6
$KORG/gregkh/usb 234
$KORG/balbi/usb
76
$KORG/kishon/linux-phy 28
$KORG/johan/usb-serial 11
$KORG/peter.chen/usb
6
$KORG/rafael/linux-pm 201
$KORG/mzx/devfreq
5
$KORG/helgaas/pci 187
git.linux-mips.org/pub/scm/ralf/upstream-linus
181
$KORG/broonie/spi 71
2
$KORG/linusw/linux-pinctrl
163
$KORG/geert/renesas-drivers
38
12
$KORG/pinctrl/samsung
8
$KORG/ulfh/mmc 160
$KORG/herbert/crypto-2.6 145
1
141
github.com/baylibre/clk-meson
15
$KORG/snawrocki/clk
4
$KORG/kdave/linux 126
$KORG/kvm/kvm 126
$KORG/paulus/powerpc
15
$KORG/kvms390/linux
9
$KORG/kvmarm/kvmarm
6
$KORG/joro/iommu 103
$KORG/will/linux
4
$KORG/arm64/linux
8
$KORG/gregkh/tty 101
95
$KORG/mark/linux
23
$KORG/lpieralisi/linux 3
$KORG/dtor/input 92
$KORG/gregkh/driver-core 37
1
git.infradead.org/linux-mtd 86
git.infradead.org/l2-mtd
62
2
git.linux-nfs.org/projects/trondmy/linux-nfs
83
git.linux-nfs.org/projects/anna/linux-nfs
17
77
github.com/bzolnier/linux 76
$KORG/shuah/linux-kselftest 74
$KORG/s390/linux 70
$KORG/kvms390/vfio-ccw
1
6
6 /
/ 25
25
Being or not being a kernel developer
Being or not being a kernel developer
Issue tracker: reporter vs kernel developer
Issue tracker: reporter vs kernel developer
<Source: freepik/catalyststuff>
<Source: freepik/catalyststuff>
7
7 /
/ 25
25
Once upon a time there was a
Once upon a time there was a
userspace developer who reported a
userspace developer who reported a
kernel issue…
kernel issue…
Reporter:
Reporter: “There is an issue in your driver only reproducible when running this distribution.”
“There is an issue in your driver only reproducible when running this distribution.”
Kernel developer:
Kernel developer: “Can you check if this issue still happens using this kernel branch?”
“Can you check if this issue still happens using this kernel branch?”
Reporter
Reporter never compiled and installed a custom kernel
never compiled and installed a custom kernel before. Read many kernel
before. Read many kernel
tutorials to
tutorials to create a build & deploy kernel script.
create a build & deploy kernel script.
Reporter:
Reporter: “Sorry for delaying, it’s my first time deploying a custom kernel. I’m not sure I did
“Sorry for delaying, it’s my first time deploying a custom kernel. I’m not sure I did
it right, but the issue is still present in this kernel branch”
it right, but the issue is still present in this kernel branch”
Kernel developer
Kernel developer needs to reproduce the issue on their side, but
needs to reproduce the issue on their side, but never used this
never used this
distribution
distribution so also
so also created almost the same script created by the reporter.
created almost the same script created by the reporter.
8
8 /
/ 25
25
The Problem: You keep creating new
The Problem: You keep creating new
scripts!
scripts!
Every time you:
Every time you:
Change distro
Change distro
Change architecture
Change architecture
Change hardware
Change hardware
Change project
Change project
You create
You create another
another script for your new kernel development workflow!
script for your new kernel development workflow!
9
9 /
/ 25
25
My precious script
My precious script
10
10 /
/ 25
25
The Repetitive Developer Cycle
The Repetitive Developer Cycle
Instead of creating and accumulating scripts,
Instead of creating and accumulating scripts, save your life time
save your life time with kworkflow!
with kworkflow!
# Your script
# Your script
$ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $DEFCONFIG
$ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $DEFCONFIG
$ make -j$(nproc) ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64
$ make -j$(nproc) ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64
$ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 INSTALL_MOD_PATH=$TMP modules_install
$ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 INSTALL_MOD_PATH=$TMP modules_install
$ ssh $RPI4 mkdir -p /tmp/new_modules /tmp/new_kernel /tmp/new_kernel/overlays
$ ssh $RPI4 mkdir -p /tmp/new_modules /tmp/new_kernel /tmp/new_kernel/overlays
$ rsync -av $TMP/ $RPI4:/tmp/new_modules/
$ rsync -av $TMP/ $RPI4:/tmp/new_modules/
$ scp arch/$ARCH_64/boot/Image $RPI4:/tmp/new_kernel/Image-$KERNEL.img
$ scp arch/$ARCH_64/boot/Image $RPI4:/tmp/new_kernel/Image-$KERNEL.img
$ scp arch/$ARCH_64/boot/$DTB_PATH/*.dtb $RPI4:/tmp/new_kernel
$ scp arch/$ARCH_64/boot/$DTB_PATH/*.dtb $RPI4:/tmp/new_kernel
$ scp arch/$ARCH_64/boot/dts/overlays/*.dtb* $RPI4:/tmp/new_kernel/overlays
$ scp arch/$ARCH_64/boot/dts/overlays/*.dtb* $RPI4:/tmp/new_kernel/overlays
$ ssh $RPI4 sudo rsync -av /tmp/new_modules/lib/modules/ /lib/modules/
$ ssh $RPI4 sudo rsync -av /tmp/new_modules/lib/modules/ /lib/modules/
$ ssh $RPI4 sudo rsync -av /tmp/new_kernel/ /boot/
$ ssh $RPI4 sudo rsync -av /tmp/new_kernel/ /boot/
$ rm -rf $TMP
$ rm -rf $TMP
# With kworkflow
# With kworkflow
$ kw k --fetch --remote root@localhost:2222
$ kw k --fetch --remote root@localhost:2222
$ kw bd
$ kw bd
11
11 /
/ 25
25
What is kworkflow? (kw)
What is kworkflow? (kw)
A collection of tools and software combined to:
A collection of tools and software combined to:
Optimizes Linux kernel development workflow.
Optimizes Linux kernel development workflow.
Reduces time spent on repetitive tasks.
Reduces time spent on repetitive tasks.
Standardizes best practices.
Standardizes best practices.
Ensures reliable data exchange across kernel workflows.
Ensures reliable data exchange across kernel workflows.
12
12 /
/ 25
25
What is kworkflow? (kw)
What is kworkflow? (kw)
<Source:
<Source: >
>
powerrangers.fandom.com
powerrangers.fandom.com
13
13 /
/ 25
25
Key Features of kworkflow
Key Features of kworkflow
Build & deploy custom kernels
Build & deploy custom kernels across devices & distros
across devices & distros.
.
Handle
Handle cross-compilation seamlessly
cross-compilation seamlessly.
.
Manage
Manage multiple architecture, settings and target devices
multiple architecture, settings and target devices in the same work tree.
in the same work tree.
Organize
Organize kernel configuration files
kernel configuration files.
.
Facilitate
Facilitate remote debugging & code inspection
remote debugging & code inspection.
.
Standardize Linux kernel patch submission guidelines
Standardize Linux kernel patch submission guidelines.
.
Upcoming:
Upcoming: Interface to bookmark, apply and “reviewed-by” patches from mailing lists (
Interface to bookmark, apply and “reviewed-by” patches from mailing lists (
).
).
lore.kernel.org
lore.kernel.org
14
14 /
/ 25
25
kworkflow Command Overview
kworkflow Command Overview
# Manage kw and kw configurations
# Manage kw and kw configurations
kw init - Initialize kw config file
kw init - Initialize kw config file
kw self-update (u) - Update kw
kw self-update (u) - Update kw
kw config (g) - Manage kernel .config files
kw config (g) - Manage kernel .config files
[...]
[...]
# Build & Deploy custom kernels
# Build & Deploy custom kernels
kw kernel-config-manager (k) - Manage kernel .config files
kw kernel-config-manager (k) - Manage kernel .config files
kw build (b) - Build kernel
kw build (b) - Build kernel
kw deploy (d) - Deploy kernel image (local/remote)
kw deploy (d) - Deploy kernel image (local/remote)
kw bd - Build and deploy kernel
kw bd - Build and deploy kernel
# Manage and interact with target machines
# Manage and interact with target machines
kw ssh (s) - SSH support
kw ssh (s) - SSH support
kw remote (r) - Manage machines available via ssh
kw remote (r) - Manage machines available via ssh
kw vm - QEMU support
kw vm - QEMU support
# Inspect and debug
# Inspect and debug
kw device - Show basic hardware information
kw device - Show basic hardware information
kw explore (e) - Explore string patterns in the work tree and git logs
kw explore (e) - Explore string patterns in the work tree and git logs
kw debug - Linux kernel debug utilities
kw debug - Linux kernel debug utilities
kw drm - Set of commands to work with DRM drivers
kw drm - Set of commands to work with DRM drivers
# Automatize best practices for patch submission
# Automatize best practices for patch submission
kw codestyle (c) - Check code style
kw codestyle (c) - Check code style
kw maintainers (m) - Get maintainers/mailing list
kw maintainers (m) - Get maintainers/mailing list
kw send-patch - Send patches via email
kw send-patch - Send patches via email
# Upcoming
# Upcoming
kw patch-hub - Interact with patches (lore.kernel.org)
kw patch-hub - Interact with patches (lore.kernel.org)
15
15 /
/ 25
25
Save time on: building and deploying
Save time on: building and deploying
custom kernels
custom kernels
Before:
Before:
Manually extract and manage .config files from different targets
Manually extract and manage .config files from different targets
Sometimes renaming .config files with some descriptive suffix
Sometimes renaming .config files with some descriptive suffix
copy&paste (ofc)
copy&paste (ofc)
After:
After: kw kernel-config-manager (k)
kw kernel-config-manager (k) - Fetch and manage kernel
- Fetch and manage kernel .config
.config files easily.
files easily.
# Extract and copy .config file from a given device
# Extract and copy .config file from a given device
kw k --fetch (--remote root@localhost:2222 | --local)
kw k --fetch (--remote root@localhost:2222 | --local)
# Store and manage .config files
# Store and manage .config files
kw k --save <my_current_config_name> --description <perfect_for_device1>
kw k --save <my_current_config_name> --description <perfect_for_device1>
kw k --list
kw k --list
kw k --get <my_current_config_name>
kw k --get <my_current_config_name>
16
16 /
/ 25
25
Save time on: building and deploying
Save time on: building and deploying
custom kernels
custom kernels
Before:
Before: Memorize combinations of make commands and options
Memorize combinations of make commands and options
After:
After: kw build (b)
kw build (b) - Build the kernel
- Build the kernel
kw b # Build kernel with settings for cross-compilation, cflags, llvm, ccache, cpu scaling factor
kw b # Build kernel with settings for cross-compilation, cflags, llvm, ccache, cpu scaling factor
kw b --menu # Open menuconfig
kw b --menu # Open menuconfig
kw b -i # Show name/version and module count
kw b -i # Show name/version and module count
kw b -w # Enable compilation warnings
kw b -w # Enable compilation warnings
17
17 /
/ 25
25
Save time on: building and deploying
Save time on: building and deploying
custom kernels
custom kernels
Before:
Before:
SSH
SSH
Copy or remove files according to distro and architecture
Copy or remove files according to distro and architecture
Manually update bootloader by distro.
Manually update bootloader by distro.
After:
After: kw deploy (d)
kw deploy (d) - Deploy the custom kernel in a target machine
- Deploy the custom kernel in a target machine
kw d # Deploy kernel
kw d # Deploy kernel
kw d --setup # Prepare target machine
kw d --setup # Prepare target machine
kw d --list # List available kernels
kw d --list # List available kernels
kw d --uninstall # Remove kernel(s)
kw d --uninstall # Remove kernel(s)
kw d --create-package # Create sharable kw package
kw d --create-package # Create sharable kw package
kw d --reboot # Reboot after deploy
kw d --reboot # Reboot after deploy
kw bd # Build and deploy kernel
kw bd # Build and deploy kernel
18
18 /
/ 25
25
Save time on: debugging kernels locally
Save time on: debugging kernels locally
or remotely
or remotely
Before:
Before:
SSH
SSH
Manually setup and enable traces
Manually setup and enable traces
Copy&Paste (again)
Copy&Paste (again)
After:
After: kw debug
kw debug - simplify kernel debug utilities: events, ftrace, dmesg.
- simplify kernel debug utilities: events, ftrace, dmesg.
kw debug # Debug utilities
kw debug # Debug utilities
kw debug -c "cmd" # Trace log for a command
kw debug -c "cmd" # Trace log for a command
kw debug -k # Store trace logs
kw debug -k # Store trace logs
kw debug -f # Follow traces in real-time
kw debug -f # Follow traces in real-time
Supports local & remote debugging.
Supports local & remote debugging.
19
19 /
/ 25
25
Save time on: managing multiple kernel
Save time on: managing multiple kernel
images in the same work tree
images in the same work tree
Before:
Before:
Clone multiple times the same branch(?)
Clone multiple times the same branch(?)
Lose compiled files when changing kernel config or compilation options
Lose compiled files when changing kernel config or compilation options
Manually manage deployment scripts.
Manually manage deployment scripts.
After:
After: kw env
kw env - isolating multiple contexts in the same work tree as environments
- isolating multiple contexts in the same work tree as environments
kw config # Manage kernel environment settings
kw config # Manage kernel environment settings
kw env # Create isolated kernel environments
kw env # Create isolated kernel environments
Maintain different setups in the
Maintain different setups in the same work tree
same work tree.
.
20
20 /
/ 25
25
Save time on: submitting patches to
Save time on: submitting patches to
mailing lists
mailing lists
kw code-style # Check kernel coding style
kw code-style # Check kernel coding style
kw maintainer # Get maintainers & mailing lists
kw maintainer # Get maintainers & mailing lists
kw send-patch # Automatically create the list of recipients and send patches via email
kw send-patch # Automatically create the list of recipients and send patches via email
kw patch-hub # Terminal UI for interacting with patches in lore mailing lists
kw patch-hub # Terminal UI for interacting with patches in lore mailing lists
Automate patch submission rules on sending patches
Automate patch submission rules on sending patches, via
, via git send-email
git send-email .
.
Ensure patches
Ensure patches reach the right people (maintainers and ML)
reach the right people (maintainers and ML).
.
21
21 /
/ 25
25
22
22 /
/ 25
25
Call to Action
Call to Action
Stop writing redundant scripts!
Stop writing redundant scripts!
Save everybody’s time and effort with kworkflow.
Save everybody’s time and effort with kworkflow.
Try kworkflow today:
Try kworkflow today:
Contribute to kworkflow: it’s 100% volunteering work.
Contribute to kworkflow: it’s 100% volunteering work.
Challenge:
Challenge:
Replace one of your scripts with kworkflow this week!
Replace one of your scripts with kworkflow this week!
Make a new kworkflow feature with one of your scripts.
Make a new kworkflow feature with one of your scripts.
https://kworkflow.org
https://kworkflow.org
23
23 /
/ 25
25
Demo setup:
Demo setup:
Setup: Three devices:
Setup: Three devices:
laptop (debian|x86|intel|local)
laptop (debian|x86|intel|local)
SteamDeck (steamos|x86|amd|remote)
SteamDeck (steamos|x86|amd|remote)
RaspberryPi 4 (raspbian|arm64|broadcomm|remote)
RaspberryPi 4 (raspbian|arm64|broadcomm|remote)
Goal: To validate a change on DRM/VKMS using a single kernel tree.
Goal: To validate a change on DRM/VKMS using a single kernel tree.
Kworkflow commands:
Kworkflow commands:
kw env
kw env
kw d
kw d
kw bd
kw bd
kw device
kw device
kw debug
kw debug
kw drm
kw drm
24
24 /
/ 25
25
25
25 /
/ 25
25
Ad

More Related Content

Similar to Don't let your motivation go, save time with kworkflow (20)

Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled Cucumbers
Joseph Wilk
 
Canary Deployments for Kubernetes (KubeCon 2018 North America)
Canary Deployments for Kubernetes (KubeCon 2018 North America)Canary Deployments for Kubernetes (KubeCon 2018 North America)
Canary Deployments for Kubernetes (KubeCon 2018 North America)
Nail Islamov
 
Jean s ca-le-videolan
Jean s ca-le-videolanJean s ca-le-videolan
Jean s ca-le-videolan
Ahmed NE
 
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchaginstackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
NETWAYS
 
4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel 4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel
Red Hat Developers
 
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
CloudOps2005
 
Iscsi
IscsiIscsi
Iscsi
Md Shihab
 
Kernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clangKernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clang
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Docker Clustering - Batteries Included
Docker Clustering - Batteries IncludedDocker Clustering - Batteries Included
Docker Clustering - Batteries Included
C4Media
 
Hands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaHands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ Osaka
Kiwamu Okabe
 
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Cloud Native Day Tel Aviv
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
Shiao-An Yuan
 
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebula Project
 
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
confluent
 
The Unofficial VCAP / VCP VMware Study Guide
The Unofficial VCAP / VCP VMware Study GuideThe Unofficial VCAP / VCP VMware Study Guide
The Unofficial VCAP / VCP VMware Study Guide
Veeam Software
 
Next Stop, Android
Next Stop, AndroidNext Stop, Android
Next Stop, Android
National Cheng Kung University
 
DEFCON 23 - Etienne Martineau - inter vm data exfiltration
DEFCON 23 - Etienne Martineau - inter vm data exfiltrationDEFCON 23 - Etienne Martineau - inter vm data exfiltration
DEFCON 23 - Etienne Martineau - inter vm data exfiltration
Felipe Prado
 
Docker on Windows
Docker on WindowsDocker on Windows
Docker on Windows
Stefan Scherer
 
Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled Cucumbers
Joseph Wilk
 
Canary Deployments for Kubernetes (KubeCon 2018 North America)
Canary Deployments for Kubernetes (KubeCon 2018 North America)Canary Deployments for Kubernetes (KubeCon 2018 North America)
Canary Deployments for Kubernetes (KubeCon 2018 North America)
Nail Islamov
 
Jean s ca-le-videolan
Jean s ca-le-videolanJean s ca-le-videolan
Jean s ca-le-videolan
Ahmed NE
 
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchaginstackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
stackconf 2020 | Speeding up Linux disk encryption by Ignat Korchagin
NETWAYS
 
4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel 4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel
Red Hat Developers
 
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
Kubernetes on Bare Metal at the Kitchener-Waterloo Kubernetes and Cloud Nativ...
CloudOps2005
 
Kernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clangKernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clang
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Docker Clustering - Batteries Included
Docker Clustering - Batteries IncludedDocker Clustering - Batteries Included
Docker Clustering - Batteries Included
C4Media
 
Hands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaHands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ Osaka
Kiwamu Okabe
 
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Cloud Native Day Tel Aviv
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
Shiao-An Yuan
 
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebulaConf 2016 - Building a GNU/Linux Distribution by Daniel Dehennin, M...
OpenNebula Project
 
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
confluent
 
The Unofficial VCAP / VCP VMware Study Guide
The Unofficial VCAP / VCP VMware Study GuideThe Unofficial VCAP / VCP VMware Study Guide
The Unofficial VCAP / VCP VMware Study Guide
Veeam Software
 
DEFCON 23 - Etienne Martineau - inter vm data exfiltration
DEFCON 23 - Etienne Martineau - inter vm data exfiltrationDEFCON 23 - Etienne Martineau - inter vm data exfiltration
DEFCON 23 - Etienne Martineau - inter vm data exfiltration
Felipe Prado
 

More from Igalia (20)

Solving the world’s (localization) problems
Solving the world’s (localization) problemsSolving the world’s (localization) problems
Solving the world’s (localization) problems
Igalia
 
The Whippet Embeddable Garbage Collection Library
The Whippet Embeddable Garbage Collection LibraryThe Whippet Embeddable Garbage Collection Library
The Whippet Embeddable Garbage Collection Library
Igalia
 
Nobody asks "How is JavaScript?"
Nobody asks         "How is JavaScript?"Nobody asks         "How is JavaScript?"
Nobody asks "How is JavaScript?"
Igalia
 
Getting more juice out from your Raspberry Pi GPU
Getting more juice out from your Raspberry Pi GPUGetting more juice out from your Raspberry Pi GPU
Getting more juice out from your Raspberry Pi GPU
Igalia
 
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status updateWebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Igalia
 
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
Demystifying Temporal: A Deep Dive into JavaScript New Temporal APIDemystifying Temporal: A Deep Dive into JavaScript New Temporal API
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
Igalia
 
CSS :has() Unlimited Power
CSS :has()               Unlimited PowerCSS :has()               Unlimited Power
CSS :has() Unlimited Power
Igalia
 
Device-Generated Commands in Vulkan
Device-Generated Commands      in VulkanDevice-Generated Commands      in Vulkan
Device-Generated Commands in Vulkan
Igalia
 
Current state of Lavapipe: Mesa's software renderer for Vulkan
Current state of Lavapipe: Mesa's software renderer for VulkanCurrent state of Lavapipe: Mesa's software renderer for Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Igalia
 
Vulkan Video is Open: Application showcase
Vulkan Video is Open: Application showcaseVulkan Video is Open: Application showcase
Vulkan Video is Open: Application showcase
Igalia
 
Scheme on WebAssembly: It is happening!
Scheme on WebAssembly:  It is happening!Scheme on WebAssembly:  It is happening!
Scheme on WebAssembly: It is happening!
Igalia
 
EBC - A new backend compiler for etnaviv
EBC - A new backend compiler for etnavivEBC - A new backend compiler for etnaviv
EBC - A new backend compiler for etnaviv
Igalia
 
RISC-V LLVM State of the Union
RISC-V LLVM           State of the UnionRISC-V LLVM           State of the Union
RISC-V LLVM State of the Union
Igalia
 
Device-Generated Commands in Vulkan
Device-Generated Commands      in VulkanDevice-Generated Commands      in Vulkan
Device-Generated Commands in Vulkan
Igalia
 
Downstream challenges
Downstream                    challengesDownstream                    challenges
Downstream challenges
Igalia
 
Using Chrome for Building Apps
Using Chrome           for Building AppsUsing Chrome           for Building Apps
Using Chrome for Building Apps
Igalia
 
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdfSustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Igalia
 
New and upcoming features in the Node.js module loaders
New and upcoming features in the Node.js module loadersNew and upcoming features in the Node.js module loaders
New and upcoming features in the Node.js module loaders
Igalia
 
WebDriver BiDi in WebKit
WebDriver BiDi in WebKitWebDriver BiDi in WebKit
WebDriver BiDi in WebKit
Igalia
 
Skia integration in WebKit Linux ports
Skia integration in WebKit Linux portsSkia integration in WebKit Linux ports
Skia integration in WebKit Linux ports
Igalia
 
Solving the world’s (localization) problems
Solving the world’s (localization) problemsSolving the world’s (localization) problems
Solving the world’s (localization) problems
Igalia
 
The Whippet Embeddable Garbage Collection Library
The Whippet Embeddable Garbage Collection LibraryThe Whippet Embeddable Garbage Collection Library
The Whippet Embeddable Garbage Collection Library
Igalia
 
Nobody asks "How is JavaScript?"
Nobody asks         "How is JavaScript?"Nobody asks         "How is JavaScript?"
Nobody asks "How is JavaScript?"
Igalia
 
Getting more juice out from your Raspberry Pi GPU
Getting more juice out from your Raspberry Pi GPUGetting more juice out from your Raspberry Pi GPU
Getting more juice out from your Raspberry Pi GPU
Igalia
 
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status updateWebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Igalia
 
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
Demystifying Temporal: A Deep Dive into JavaScript New Temporal APIDemystifying Temporal: A Deep Dive into JavaScript New Temporal API
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
Igalia
 
CSS :has() Unlimited Power
CSS :has()               Unlimited PowerCSS :has()               Unlimited Power
CSS :has() Unlimited Power
Igalia
 
Device-Generated Commands in Vulkan
Device-Generated Commands      in VulkanDevice-Generated Commands      in Vulkan
Device-Generated Commands in Vulkan
Igalia
 
Current state of Lavapipe: Mesa's software renderer for Vulkan
Current state of Lavapipe: Mesa's software renderer for VulkanCurrent state of Lavapipe: Mesa's software renderer for Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Igalia
 
Vulkan Video is Open: Application showcase
Vulkan Video is Open: Application showcaseVulkan Video is Open: Application showcase
Vulkan Video is Open: Application showcase
Igalia
 
Scheme on WebAssembly: It is happening!
Scheme on WebAssembly:  It is happening!Scheme on WebAssembly:  It is happening!
Scheme on WebAssembly: It is happening!
Igalia
 
EBC - A new backend compiler for etnaviv
EBC - A new backend compiler for etnavivEBC - A new backend compiler for etnaviv
EBC - A new backend compiler for etnaviv
Igalia
 
RISC-V LLVM State of the Union
RISC-V LLVM           State of the UnionRISC-V LLVM           State of the Union
RISC-V LLVM State of the Union
Igalia
 
Device-Generated Commands in Vulkan
Device-Generated Commands      in VulkanDevice-Generated Commands      in Vulkan
Device-Generated Commands in Vulkan
Igalia
 
Downstream challenges
Downstream                    challengesDownstream                    challenges
Downstream challenges
Igalia
 
Using Chrome for Building Apps
Using Chrome           for Building AppsUsing Chrome           for Building Apps
Using Chrome for Building Apps
Igalia
 
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdfSustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Sustainable Futures - Funding the Web Ecosystem v2 - fonts.pdf
Igalia
 
New and upcoming features in the Node.js module loaders
New and upcoming features in the Node.js module loadersNew and upcoming features in the Node.js module loaders
New and upcoming features in the Node.js module loaders
Igalia
 
WebDriver BiDi in WebKit
WebDriver BiDi in WebKitWebDriver BiDi in WebKit
WebDriver BiDi in WebKit
Igalia
 
Skia integration in WebKit Linux ports
Skia integration in WebKit Linux portsSkia integration in WebKit Linux ports
Skia integration in WebKit Linux ports
Igalia
 
Ad

Recently uploaded (20)

Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Ad

Don't let your motivation go, save time with kworkflow

  • 1. Don’t let your motivation go, Don’t let your motivation go, save time with kworkflow save time with kworkflow Melissa Wen Melissa Wen kernel GPU driver developer @ Igalia kernel GPU driver developer @ Igalia 1 1 / / 25 25
  • 2. Spending your life compiling the kernel Spending your life compiling the kernel So, you are a kernel developer… So, you are a kernel developer… … or wanna be a kernel developer… … or wanna be a kernel developer… … or don’t wanna be a kernel developer… … or don’t wanna be a kernel developer… United by a single need: Validate a custom kernel with a given change. United by a single need: Validate a custom kernel with a given change. 2 2 / / 25 25
  • 3. For a given distro: For a given distro: 3 3 / / 25 25
  • 4. For a given device: For a given device: 4 4 / / 25 25
  • 5. For a given subsystem: For a given subsystem: Patch flow into the mainline mainline $KORG/davem/net-next 1812 $KORG/kvalo/wireless-drivers-next 314 $KORG/iwlwifi/iwlwifi-next 73 $KORG/kvalo/wireless-drivers.git 1 $KORG/jkirsher/next-queue 64 $KORG/pablo/nf-next 61 $KORG/saeed/linux 47 $KORG/davem/net 12 $KORG/bluetooth/bluetooth-next 38 $KORG/klassert/ipsec-next 12 $KORG/dhowells/linux-fs 11 $KORG/mellanox/linux 9 309 8 $KORG/pablo/nf 26 $KORG/jberg/mac80211 24 $KORG/kvalo/wireless-drivers 22 $KORG/iwlwifi/iwlwifi-fixes 11 $KORG/jkirsher/net-queue 3 6 $KORG/klassert/ipsec 5 git.open-mesh.org/linux-merge 7 people.freedesktop.org/~airlied/linux 1193 anongit.freedesktop.org/git/drm-misc 349 anongit.freedesktop.org/git/drm-intel 18 281 github.com/01org/gvt-linux 19 people.freedesktop.org/~agd5f/linux 255 $KORG/tomba/linux 66 people.freedesktop.org/~gabbayo/linux 34 people.freedesktop.org/~robclark/linux 29 linuxtv.org/pinchartl/media 25 $KORG/daeinki/drm-exynos 23 anongit.freedesktop.org/tegra/linux 22 github.com/skeggsb/linux 21 git.pengutronix.de/git/lst/linux 11 people.freedesktop.org/~syeh/repos_linux 10 $KORG/mripard/linux 10 anongit.freedesktop.org/drm/drm-intel 8 git.pengutronix.de/git/pza/linux 7 $KORG/arm/arm-soc 17 github.com/foss-for-synopsys-dwc-arc-processors/linux 6 anongit.freedesktop.org/drm/drm-misc 3 $KORG/tip/tip 1038 $KORG/linusw/linux-gpio 8 $KORG/acme/linux 281 $KORG/paulmck/linux-rcu 65 $KORG/maz/arm-platforms 58 git.linaro.org/people/daniel.lezcano/linux 11 git.linaro.org/people/john.stultz/linux 7 863 $KORG/horms/renesas 127 $KORG/mmind/linux-rockchip 111 $KORG/clk/linux 21 $KORG/shawnguo/linux 77 $KORG/tmlind/linux-omap 71 $KORG/sunxi/linux 52 17 github.com/Broadcom/stblinux 36 git.infradead.org/linux-mvebu 35 github.com/mbgg/linux-mediatek 34 $KORG/khilman/linux-amlogic 33 github.com/BayLibre/clk-meson 1 $KORG/agross/linux 32 $KORG/krzk/linux 29 $KORG/ssantosh/linux-keystone 29 github.com/Xilinx/linux-xlnx 26 github.com/hisilicon/linux-hisi 24 $KORG/masahiroy/linux-uniphier 20 $KORG/tegra/linux 18 $KORG/atorgue/stm32 16 $KORG/linusw/linux-nomadik 9 $KORG/abelloni/linux 41 9 git.linaro.org/people/jens.wiklander/linux-tee 8 $KORG/nsekhar/linux-davinci 6 $KORG/sudeep.holla/linux 5 $KORG/nferre/linux-at91 5 $KORG/joel/aspeed 5 github.com/sverdlin/linux 4 $KORG/gregkh/staging 640 $KORG/jic23/iio 141 $KORG/mchehab/linux-media 625 $KORG/tiwai/sound 557 $KORG/broonie/sound 359 26 $KORG/dledford/rdma 375 $KORG/leon/linux-rdma 34 $KORG/powerpc/linux 354 $KORG/scottwood/linux 2 Applied by Linus 352 $KORG/jejb/scsi 304 git.kernel.dk/linux-block 295 git.infradead.org/nvme 57 $KORG/gregkh/char-misc 266 $KORG/ash/stm 16 $KORG/chanwoo/extcon 15 $KORG/kees/linux 44 6 $KORG/gregkh/usb 234 $KORG/balbi/usb 76 $KORG/kishon/linux-phy 28 $KORG/johan/usb-serial 11 $KORG/peter.chen/usb 6 $KORG/rafael/linux-pm 201 $KORG/mzx/devfreq 5 $KORG/helgaas/pci 187 git.linux-mips.org/pub/scm/ralf/upstream-linus 181 $KORG/broonie/spi 71 2 $KORG/linusw/linux-pinctrl 163 $KORG/geert/renesas-drivers 38 12 $KORG/pinctrl/samsung 8 $KORG/ulfh/mmc 160 $KORG/herbert/crypto-2.6 145 1 141 github.com/baylibre/clk-meson 15 $KORG/snawrocki/clk 4 $KORG/kdave/linux 126 $KORG/kvm/kvm 126 $KORG/paulus/powerpc 15 $KORG/kvms390/linux 9 $KORG/kvmarm/kvmarm 6 $KORG/joro/iommu 103 $KORG/will/linux 4 $KORG/arm64/linux 8 $KORG/gregkh/tty 101 95 $KORG/mark/linux 23 $KORG/lpieralisi/linux 3 $KORG/dtor/input 92 $KORG/gregkh/driver-core 37 1 git.infradead.org/linux-mtd 86 git.infradead.org/l2-mtd 62 2 git.linux-nfs.org/projects/trondmy/linux-nfs 83 git.linux-nfs.org/projects/anna/linux-nfs 17 77 github.com/bzolnier/linux 76 $KORG/shuah/linux-kselftest 74 $KORG/s390/linux 70 $KORG/kvms390/vfio-ccw 1 $KORG/xfs/xfs-linux 69 $KORG/viro/vfs 68 $KORG/lee/mfd 66 $KORG/jaegeuk/f2fs 66 $KORG/wsa/linux 63 github.com/peda-r/i2c-mux 9 git.lwn.net/linux 59 git.infradead.org/users/vkoul/slave-dma 58 github.com/andersson/remoteproc 56 $KORG/robh/linux 55 $KORG/jikos/hid 48 $KORG/jack/linux-fs 47 github.com/ceph/ceph-client 42 www.linux-watchdog.org/linux-watchdog 41 $KORG/sre/linux-power-supply 40 $KORG/deller/parisc-linux 40 $KORG/vgupta/arc 40 $KORG/xen/tip 38 $KORG/groeck/linux-staging 35 $KORG/davem/sparc-next 35 $KORG/davem/sparc 1 $KORG/thierry.reding/linux-pwm 33 $KORG/gfs2/linux-gfs2 32 $KORG/tj/percpu 32 $KORG/nvdimm/nvdimm 30 $KORG/rzhang/linux 28 git.infradead.org/linux-platform-drivers-x86 26 $KORG/broonie/regulator 25 $KORG/j.anaszewski/linux-leds 25 $KORG/tj/cgroup 24 $KORG/jmorris/linux-security 23 git.samba.org/sfrench/cifs-2.6 22 $KORG/shli/md 21 $KORG/rostedt/linux-trace 21 $KORG/device-mapper/linux-dm 20 $KORG/jj/linux-apparmor 18 $KORG/teigland/linux-dlm 18 linux-nfs.org/~bfields/linux 18 $KORG/mszeredi/vfs 17 $KORG/tj/libata 17 $KORG/bp/bp 16 git.infradead.org/users/hch/dma-mapping 15 $KORG/jlayton/linux 15 $KORG/ebiederm/user-namespace 15 $KORG/pcmoore/selinux 14 $KORG/tytso/ext4 13 git.armlinux.org.uk/~rmk/linux-arm 12 $KORG/mattst88/alpha 11 $KORG/masahiroy/linux-kbuild 10 $KORG/hubcap/linux 10 $KORG/rw/uml 9 $KORG/tj/wq 7 git.linaro.org/landing-teams/working/fujitsu/integration 6 git.infradead.org/linux-ubifs 6 github.com/awilliam/linux-vfio 6 $KORG/pmladek/printk 5 $KORG/lee/backlight 5 $KORG/pcmoore/audit 5 $KORG/geert/linux-m68k 5 $KORG/mason/linux-btrfs 5 $KORG/mszeredi/fuse 4 $KORG/jeyu/linux 4 git.monstr.eu/linux-2.6-microblaze 4 $KORG/cmetcalf/linux-tile 3 $KORG/lftan/nios2 3 $KORG/gerg/m68knommu 3 git.infradead.org/users/hch/uuid 2 github.com/openrisc/linux 2 git.kvack.org/~bcrl/aio-next 2 $KORG/jikos/livepatching 2 $KORG/jdelvare/staging 2 5 5 / / 25 25
  • 7. $KORG/davem/net-next 1812 $KORG/kvalo/wireless-drivers-next 314 $KORG/iwlwifi/iwlwifi-next 73 $KORG/kvalo/wireless-drivers.git 1 $KORG/jkirsher/next-queue 64 $KORG/pablo/nf-next 61 $KORG/saeed/linux 47 $KORG/davem/net 12 $KORG/bluetooth/bluetooth-next 38 $KORG/klassert/ipsec-next 12 $KORG/dhowells/linux-fs 11 $KORG/mellanox/linux 9 309 8 $KORG/pablo/nf 26 $KORG/jberg/mac80211 24 $KORG/kvalo/wireless-drivers 22 $KORG/iwlwifi/iwlwifi-fixes 11 $KORG/jkirsher/net-queue 3 6 $KORG/klassert/ipsec 5 git.open-mesh.org/linux-merge 7 people.freedesktop.org/~airlied/linux 1193 anongit.freedesktop.org/git/drm-misc 349 anongit.freedesktop.org/git/drm-intel 18 281 github.com/01org/gvt-linux 19 people.freedesktop.org/~agd5f/linux 255 $KORG/tomba/linux 66 people.freedesktop.org/~gabbayo/linux 34 people.freedesktop.org/~robclark/linux 29 linuxtv.org/pinchartl/media 25 $KORG/daeinki/drm-exynos 23 anongit.freedesktop.org/tegra/linux 22 github.com/skeggsb/linux 21 git.pengutronix.de/git/lst/linux 11 people.freedesktop.org/~syeh/repos_linux 10 $KORG/mripard/linux 10 anongit.freedesktop.org/drm/drm-intel 8 git.pengutronix.de/git/pza/linux 7 $KORG/arm/arm-soc 17 github.com/foss-for-synopsys-dwc-arc-processors/linux 6 anongit.freedesktop.org/drm/drm-misc 3 $KORG/tip/tip 1038 $KORG/linusw/linux-gpio 8 $KORG/acme/linux 281 $KORG/paulmck/linux-rcu 65 $KORG/maz/arm-platforms 58 git.linaro.org/people/daniel.lezcano/linux 11 git.linaro.org/people/john.stultz/linux 7 863 $KORG/horms/renesas 127 $KORG/mmind/linux-rockchip 111 $KORG/clk/linux 21 $KORG/shawnguo/linux 77 $KORG/tmlind/linux-omap 71 $KORG/sunxi/linux 52 17 github.com/Broadcom/stblinux 36 git.infradead.org/linux-mvebu 35 github.com/mbgg/linux-mediatek 34 $KORG/khilman/linux-amlogic 33 github.com/BayLibre/clk-meson 1 $KORG/agross/linux 32 $KORG/krzk/linux 29 $KORG/ssantosh/linux-keystone 29 github.com/Xilinx/linux-xlnx 26 github.com/hisilicon/linux-hisi 24 $KORG/masahiroy/linux-uniphier 20 $KORG/tegra/linux 18 $KORG/atorgue/stm32 16 $KORG/linusw/linux-nomadik 9 $KORG/abelloni/linux 41 9 git.linaro.org/people/jens.wiklander/linux-tee 8 $KORG/nsekhar/linux-davinci 6 $KORG/sudeep.holla/linux 5 $KORG/nferre/linux-at91 5 $KORG/joel/aspeed 5 github.com/sverdlin/linux 4 $KORG/gregkh/staging 640 $KORG/jic23/iio 141 $KORG/mchehab/linux-media 625 $KORG/tiwai/sound 557 $KORG/broonie/sound 359 26 $KORG/dledford/rdma 375 $KORG/leon/linux-rdma 34 $KORG/powerpc/linux 354 $KORG/scottwood/linux 2 Applied by Linus 352 $KORG/jejb/scsi 304 git.kernel.dk/linux-block 295 git.infradead.org/nvme 57 $KORG/gregkh/char-misc 266 $KORG/ash/stm 16 $KORG/chanwoo/extcon 15 $KORG/kees/linux 44 6 $KORG/gregkh/usb 234 $KORG/balbi/usb 76 $KORG/kishon/linux-phy 28 $KORG/johan/usb-serial 11 $KORG/peter.chen/usb 6 $KORG/rafael/linux-pm 201 $KORG/mzx/devfreq 5 $KORG/helgaas/pci 187 git.linux-mips.org/pub/scm/ralf/upstream-linus 181 $KORG/broonie/spi 71 2 $KORG/linusw/linux-pinctrl 163 $KORG/geert/renesas-drivers 38 12 $KORG/pinctrl/samsung 8 $KORG/ulfh/mmc 160 $KORG/herbert/crypto-2.6 145 1 141 github.com/baylibre/clk-meson 15 $KORG/snawrocki/clk 4 $KORG/kdave/linux 126 $KORG/kvm/kvm 126 $KORG/paulus/powerpc 15 $KORG/kvms390/linux 9 $KORG/kvmarm/kvmarm 6 $KORG/joro/iommu 103 $KORG/will/linux 4 $KORG/arm64/linux 8 $KORG/gregkh/tty 101 95 $KORG/mark/linux 23 $KORG/lpieralisi/linux 3 $KORG/dtor/input 92 $KORG/gregkh/driver-core 37 1 git.infradead.org/linux-mtd 86 git.infradead.org/l2-mtd 62 2 git.linux-nfs.org/projects/trondmy/linux-nfs 83 git.linux-nfs.org/projects/anna/linux-nfs 17 77 github.com/bzolnier/linux 76 $KORG/shuah/linux-kselftest 74 $KORG/s390/linux 70 $KORG/kvms390/vfio-ccw 1 6 6 / / 25 25
  • 8. Being or not being a kernel developer Being or not being a kernel developer Issue tracker: reporter vs kernel developer Issue tracker: reporter vs kernel developer <Source: freepik/catalyststuff> <Source: freepik/catalyststuff> 7 7 / / 25 25
  • 9. Once upon a time there was a Once upon a time there was a userspace developer who reported a userspace developer who reported a kernel issue… kernel issue… Reporter: Reporter: “There is an issue in your driver only reproducible when running this distribution.” “There is an issue in your driver only reproducible when running this distribution.” Kernel developer: Kernel developer: “Can you check if this issue still happens using this kernel branch?” “Can you check if this issue still happens using this kernel branch?” Reporter Reporter never compiled and installed a custom kernel never compiled and installed a custom kernel before. Read many kernel before. Read many kernel tutorials to tutorials to create a build & deploy kernel script. create a build & deploy kernel script. Reporter: Reporter: “Sorry for delaying, it’s my first time deploying a custom kernel. I’m not sure I did “Sorry for delaying, it’s my first time deploying a custom kernel. I’m not sure I did it right, but the issue is still present in this kernel branch” it right, but the issue is still present in this kernel branch” Kernel developer Kernel developer needs to reproduce the issue on their side, but needs to reproduce the issue on their side, but never used this never used this distribution distribution so also so also created almost the same script created by the reporter. created almost the same script created by the reporter. 8 8 / / 25 25
  • 10. The Problem: You keep creating new The Problem: You keep creating new scripts! scripts! Every time you: Every time you: Change distro Change distro Change architecture Change architecture Change hardware Change hardware Change project Change project You create You create another another script for your new kernel development workflow! script for your new kernel development workflow! 9 9 / / 25 25
  • 11. My precious script My precious script 10 10 / / 25 25
  • 12. The Repetitive Developer Cycle The Repetitive Developer Cycle Instead of creating and accumulating scripts, Instead of creating and accumulating scripts, save your life time save your life time with kworkflow! with kworkflow! # Your script # Your script $ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $DEFCONFIG $ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $DEFCONFIG $ make -j$(nproc) ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $ make -j$(nproc) ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 $ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 INSTALL_MOD_PATH=$TMP modules_install $ make ARCH=$ARCH_64 CROSS_COMPILE=$CROSS_COMPILE_64 INSTALL_MOD_PATH=$TMP modules_install $ ssh $RPI4 mkdir -p /tmp/new_modules /tmp/new_kernel /tmp/new_kernel/overlays $ ssh $RPI4 mkdir -p /tmp/new_modules /tmp/new_kernel /tmp/new_kernel/overlays $ rsync -av $TMP/ $RPI4:/tmp/new_modules/ $ rsync -av $TMP/ $RPI4:/tmp/new_modules/ $ scp arch/$ARCH_64/boot/Image $RPI4:/tmp/new_kernel/Image-$KERNEL.img $ scp arch/$ARCH_64/boot/Image $RPI4:/tmp/new_kernel/Image-$KERNEL.img $ scp arch/$ARCH_64/boot/$DTB_PATH/*.dtb $RPI4:/tmp/new_kernel $ scp arch/$ARCH_64/boot/$DTB_PATH/*.dtb $RPI4:/tmp/new_kernel $ scp arch/$ARCH_64/boot/dts/overlays/*.dtb* $RPI4:/tmp/new_kernel/overlays $ scp arch/$ARCH_64/boot/dts/overlays/*.dtb* $RPI4:/tmp/new_kernel/overlays $ ssh $RPI4 sudo rsync -av /tmp/new_modules/lib/modules/ /lib/modules/ $ ssh $RPI4 sudo rsync -av /tmp/new_modules/lib/modules/ /lib/modules/ $ ssh $RPI4 sudo rsync -av /tmp/new_kernel/ /boot/ $ ssh $RPI4 sudo rsync -av /tmp/new_kernel/ /boot/ $ rm -rf $TMP $ rm -rf $TMP # With kworkflow # With kworkflow $ kw k --fetch --remote root@localhost:2222 $ kw k --fetch --remote root@localhost:2222 $ kw bd $ kw bd 11 11 / / 25 25
  • 13. What is kworkflow? (kw) What is kworkflow? (kw) A collection of tools and software combined to: A collection of tools and software combined to: Optimizes Linux kernel development workflow. Optimizes Linux kernel development workflow. Reduces time spent on repetitive tasks. Reduces time spent on repetitive tasks. Standardizes best practices. Standardizes best practices. Ensures reliable data exchange across kernel workflows. Ensures reliable data exchange across kernel workflows. 12 12 / / 25 25
  • 14. What is kworkflow? (kw) What is kworkflow? (kw) <Source: <Source: > > powerrangers.fandom.com powerrangers.fandom.com 13 13 / / 25 25
  • 15. Key Features of kworkflow Key Features of kworkflow Build & deploy custom kernels Build & deploy custom kernels across devices & distros across devices & distros. . Handle Handle cross-compilation seamlessly cross-compilation seamlessly. . Manage Manage multiple architecture, settings and target devices multiple architecture, settings and target devices in the same work tree. in the same work tree. Organize Organize kernel configuration files kernel configuration files. . Facilitate Facilitate remote debugging & code inspection remote debugging & code inspection. . Standardize Linux kernel patch submission guidelines Standardize Linux kernel patch submission guidelines. . Upcoming: Upcoming: Interface to bookmark, apply and “reviewed-by” patches from mailing lists ( Interface to bookmark, apply and “reviewed-by” patches from mailing lists ( ). ). lore.kernel.org lore.kernel.org 14 14 / / 25 25
  • 16. kworkflow Command Overview kworkflow Command Overview # Manage kw and kw configurations # Manage kw and kw configurations kw init - Initialize kw config file kw init - Initialize kw config file kw self-update (u) - Update kw kw self-update (u) - Update kw kw config (g) - Manage kernel .config files kw config (g) - Manage kernel .config files [...] [...] # Build & Deploy custom kernels # Build & Deploy custom kernels kw kernel-config-manager (k) - Manage kernel .config files kw kernel-config-manager (k) - Manage kernel .config files kw build (b) - Build kernel kw build (b) - Build kernel kw deploy (d) - Deploy kernel image (local/remote) kw deploy (d) - Deploy kernel image (local/remote) kw bd - Build and deploy kernel kw bd - Build and deploy kernel # Manage and interact with target machines # Manage and interact with target machines kw ssh (s) - SSH support kw ssh (s) - SSH support kw remote (r) - Manage machines available via ssh kw remote (r) - Manage machines available via ssh kw vm - QEMU support kw vm - QEMU support # Inspect and debug # Inspect and debug kw device - Show basic hardware information kw device - Show basic hardware information kw explore (e) - Explore string patterns in the work tree and git logs kw explore (e) - Explore string patterns in the work tree and git logs kw debug - Linux kernel debug utilities kw debug - Linux kernel debug utilities kw drm - Set of commands to work with DRM drivers kw drm - Set of commands to work with DRM drivers # Automatize best practices for patch submission # Automatize best practices for patch submission kw codestyle (c) - Check code style kw codestyle (c) - Check code style kw maintainers (m) - Get maintainers/mailing list kw maintainers (m) - Get maintainers/mailing list kw send-patch - Send patches via email kw send-patch - Send patches via email # Upcoming # Upcoming kw patch-hub - Interact with patches (lore.kernel.org) kw patch-hub - Interact with patches (lore.kernel.org) 15 15 / / 25 25
  • 17. Save time on: building and deploying Save time on: building and deploying custom kernels custom kernels Before: Before: Manually extract and manage .config files from different targets Manually extract and manage .config files from different targets Sometimes renaming .config files with some descriptive suffix Sometimes renaming .config files with some descriptive suffix copy&paste (ofc) copy&paste (ofc) After: After: kw kernel-config-manager (k) kw kernel-config-manager (k) - Fetch and manage kernel - Fetch and manage kernel .config .config files easily. files easily. # Extract and copy .config file from a given device # Extract and copy .config file from a given device kw k --fetch (--remote root@localhost:2222 | --local) kw k --fetch (--remote root@localhost:2222 | --local) # Store and manage .config files # Store and manage .config files kw k --save <my_current_config_name> --description <perfect_for_device1> kw k --save <my_current_config_name> --description <perfect_for_device1> kw k --list kw k --list kw k --get <my_current_config_name> kw k --get <my_current_config_name> 16 16 / / 25 25
  • 18. Save time on: building and deploying Save time on: building and deploying custom kernels custom kernels Before: Before: Memorize combinations of make commands and options Memorize combinations of make commands and options After: After: kw build (b) kw build (b) - Build the kernel - Build the kernel kw b # Build kernel with settings for cross-compilation, cflags, llvm, ccache, cpu scaling factor kw b # Build kernel with settings for cross-compilation, cflags, llvm, ccache, cpu scaling factor kw b --menu # Open menuconfig kw b --menu # Open menuconfig kw b -i # Show name/version and module count kw b -i # Show name/version and module count kw b -w # Enable compilation warnings kw b -w # Enable compilation warnings 17 17 / / 25 25
  • 19. Save time on: building and deploying Save time on: building and deploying custom kernels custom kernels Before: Before: SSH SSH Copy or remove files according to distro and architecture Copy or remove files according to distro and architecture Manually update bootloader by distro. Manually update bootloader by distro. After: After: kw deploy (d) kw deploy (d) - Deploy the custom kernel in a target machine - Deploy the custom kernel in a target machine kw d # Deploy kernel kw d # Deploy kernel kw d --setup # Prepare target machine kw d --setup # Prepare target machine kw d --list # List available kernels kw d --list # List available kernels kw d --uninstall # Remove kernel(s) kw d --uninstall # Remove kernel(s) kw d --create-package # Create sharable kw package kw d --create-package # Create sharable kw package kw d --reboot # Reboot after deploy kw d --reboot # Reboot after deploy kw bd # Build and deploy kernel kw bd # Build and deploy kernel 18 18 / / 25 25
  • 20. Save time on: debugging kernels locally Save time on: debugging kernels locally or remotely or remotely Before: Before: SSH SSH Manually setup and enable traces Manually setup and enable traces Copy&Paste (again) Copy&Paste (again) After: After: kw debug kw debug - simplify kernel debug utilities: events, ftrace, dmesg. - simplify kernel debug utilities: events, ftrace, dmesg. kw debug # Debug utilities kw debug # Debug utilities kw debug -c "cmd" # Trace log for a command kw debug -c "cmd" # Trace log for a command kw debug -k # Store trace logs kw debug -k # Store trace logs kw debug -f # Follow traces in real-time kw debug -f # Follow traces in real-time Supports local & remote debugging. Supports local & remote debugging. 19 19 / / 25 25
  • 21. Save time on: managing multiple kernel Save time on: managing multiple kernel images in the same work tree images in the same work tree Before: Before: Clone multiple times the same branch(?) Clone multiple times the same branch(?) Lose compiled files when changing kernel config or compilation options Lose compiled files when changing kernel config or compilation options Manually manage deployment scripts. Manually manage deployment scripts. After: After: kw env kw env - isolating multiple contexts in the same work tree as environments - isolating multiple contexts in the same work tree as environments kw config # Manage kernel environment settings kw config # Manage kernel environment settings kw env # Create isolated kernel environments kw env # Create isolated kernel environments Maintain different setups in the Maintain different setups in the same work tree same work tree. . 20 20 / / 25 25
  • 22. Save time on: submitting patches to Save time on: submitting patches to mailing lists mailing lists kw code-style # Check kernel coding style kw code-style # Check kernel coding style kw maintainer # Get maintainers & mailing lists kw maintainer # Get maintainers & mailing lists kw send-patch # Automatically create the list of recipients and send patches via email kw send-patch # Automatically create the list of recipients and send patches via email kw patch-hub # Terminal UI for interacting with patches in lore mailing lists kw patch-hub # Terminal UI for interacting with patches in lore mailing lists Automate patch submission rules on sending patches Automate patch submission rules on sending patches, via , via git send-email git send-email . . Ensure patches Ensure patches reach the right people (maintainers and ML) reach the right people (maintainers and ML). . 21 21 / / 25 25
  • 24. Call to Action Call to Action Stop writing redundant scripts! Stop writing redundant scripts! Save everybody’s time and effort with kworkflow. Save everybody’s time and effort with kworkflow. Try kworkflow today: Try kworkflow today: Contribute to kworkflow: it’s 100% volunteering work. Contribute to kworkflow: it’s 100% volunteering work. Challenge: Challenge: Replace one of your scripts with kworkflow this week! Replace one of your scripts with kworkflow this week! Make a new kworkflow feature with one of your scripts. Make a new kworkflow feature with one of your scripts. https://kworkflow.org https://kworkflow.org 23 23 / / 25 25
  • 25. Demo setup: Demo setup: Setup: Three devices: Setup: Three devices: laptop (debian|x86|intel|local) laptop (debian|x86|intel|local) SteamDeck (steamos|x86|amd|remote) SteamDeck (steamos|x86|amd|remote) RaspberryPi 4 (raspbian|arm64|broadcomm|remote) RaspberryPi 4 (raspbian|arm64|broadcomm|remote) Goal: To validate a change on DRM/VKMS using a single kernel tree. Goal: To validate a change on DRM/VKMS using a single kernel tree. Kworkflow commands: Kworkflow commands: kw env kw env kw d kw d kw bd kw bd kw device kw device kw debug kw debug kw drm kw drm 24 24 / / 25 25