1. install ubuntu 21.10 2. apt-get install build-essential flex libncurses-dev linux-headers-generic linux-source libssl-dev ...... and so on 3. cp /lib/modules/5.13.0-23-generic/build/Module.symvers ./ 4. /boot/config-5.13.0-23-generic as .config make oldconfig 5. make menuconfig 1. close CONFIG_STACKPROTECTOR 2. close CONFIG_RETPOLINE 6. modify ./scripts/mod/modpost.c 1. skip add_srcversion (just return) 2. force add_retpoline (#ifdef --> #ifndef) 3. force add_intree_flag 7. make modules_prepare LOCALVERSION=-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 8. Append padding at the end of struct module struct module { enum module_state state; /* Member of list of modules */ struct list_head list; /* Unique handle for this module */ char name[MODULE_NAME_LEN]; .... char padding[1024]; }; This is because struct module size is different in different kernel versions or with different CONFIG item. 9. make modules M=/home/dmpatch 10. strip --strip-debug /home/dmpatch/dm_patch.ko