From 9e3799ea90780e459c66cc52be26b8570ec263bb Mon Sep 17 00:00:00 2001 From: bxySo <76208607+bdqllW@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:51:33 +0800 Subject: [PATCH] CI/patches: Optimize (#121) * patches: Optimize scripts * Better compatibility and conditional judgment statements * CI: Fix error in Make AnyKernel3 One divides into two --- .github/workflows/build-kernel.yml | 41 +++++++++++++++++------------- patches/patches.sh | 37 +++++++++++++-------------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/.github/workflows/build-kernel.yml b/.github/workflows/build-kernel.yml index 44089b7835..d5f13dd5f4 100644 --- a/.github/workflows/build-kernel.yml +++ b/.github/workflows/build-kernel.yml @@ -255,28 +255,35 @@ jobs: fi - name: Make Anykernel3 - if: env.CHECK_FILE_IS_OK == 'true' + if: env.CHECK_FILE_IS_OK == 'true' && env.USE_CUSTOM_ANYKERNEL3 != 'true' run: | cd $GITHUB_WORKSPACE/kernel_workspace - if [ ${{ env.USE_CUSTOM_ANYKERNEL3 }} = true ]; then - if [[ ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} =~ git ]]; then - if [[ ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} == *'.tar.gz' ]]; then - wget -O AnyKernel3.tar.gz ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} - mkdir AnyKernel3 - tar -C AnyKernel3/ -zxvf AnyKernel3.tar.gz - else - git clone ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} -b ${{ env.CUSTOM_ANYKERNEL3_BRANCH }} --depth=1 AnyKernel3 - fi - else - wget -O AnyKernel3.zip ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} + git clone https://github.com/osm0sis/AnyKernel3 --depth=1 AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make Custom-Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' && env.USE_CUSTOM_ANYKERNEL3 == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} == *'.tar.gz' ]]; then + wget -O AnyKernel3.tar.gz ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} mkdir AnyKernel3 - unzip AnyKernel3.zip -d AnyKernel3/ + tar -C AnyKernel3/ -zxvf AnyKernel3.tar.gz + else + git clone ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} -b ${{ env.CUSTOM_ANYKERNEL3_BRANCH }} --depth=1 AnyKernel3 fi else - git clone https://github.com/osm0sis/AnyKernel3 --depth=1 AnyKernel3 - sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh - sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh - sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + wget -O AnyKernel3.zip ${{ env.CUSTOM_ANYKERNEL3_SOURCE }} + mkdir AnyKernel3 + unzip AnyKernel3.zip -d AnyKernel3/ fi cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then diff --git a/patches/patches.sh b/patches/patches.sh index ca53172076..433541bf5b 100644 --- a/patches/patches.sh +++ b/patches/patches.sh @@ -1,51 +1,50 @@ # Patches author: weishu # Shell authon: xiaoleGun <1592501605@qq.com> -# 20240106 +# 20240107 # fs/ changes ## exec.c -if [ -z "$(grep "/\* exec.c is ok" fs/exec.c)" ]; then +if [ -z "$(grep "ksu" fs/exec.c)" ]; then sed -i '/static int do_execveat_common/i\extern bool ksu_execveat_hook __read_mostly;\nextern int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv,\n void *envp, int *flags);\nextern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr,\n void *argv, void *envp, int *flags);' fs/exec.c - sed -i '/if (IS_ERR(filename))/i\ if (unlikely(ksu_execveat_hook))\n ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);\n else\n ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags);\n' fs/exec.c - echo "/* exec.c is ok" >> fs/exec.c + if grep -q "return __do_execve_file(fd, filename, argv, envp, flags, NULL);" fs/exec.c; then + sed -i '/return __do_execve_file(fd, filename, argv, envp, flags, NULL);/i\ if (unlikely(ksu_execveat_hook))\n ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);\n else\n ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags);' fs/exec.c + else + sed -i '/if (IS_ERR(filename))/i\ if (unlikely(ksu_execveat_hook))\n ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);\n else\n ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags);\n' fs/exec.c + fi fi ## open.c -if [ -z "$(grep "/* open.c is ok" fs/open.c)" ]; then - if grep -q "SYSCALL_DEFINE3(faccessat, int, dfd, const char __user \*, filename, int, mode)" fs/open.c; then - sed -i '/SYSCALL_DEFINE3(faccessat, int, dfd, const char __user \*, filename, int, mode)/i\extern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,\n int *flags);' fs/open.c - sed -i '/if (mode & ~S_IRWXO)/i\\n ksu_handle_faccessat(&dfd, &filename, &mode, NULL);\n' fs/open.c - else +if [ -z "$(grep "ksu" fs/open.c)" ]; then + if grep -q "long do_faccessat(int dfd, const char __user \*filename, int mode)" fs/open.c; then sed -i '/long do_faccessat(int dfd, const char __user \*filename, int mode)/i\extern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,\n int *flags);' fs/open.c - sed -i '/if (mode & ~S_IRWXO)/i\\n ksu_handle_faccessat(&dfd, &filename, &mode, NULL);\n' fs/open.c + else + sed -i '/SYSCALL_DEFINE3(faccessat, int, dfd, const char __user \*, filename, int, mode)/i\extern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,\n int *flags);' fs/open.c fi - echo "/* open.c is ok" >> fs/open.c + sed -i '/if (mode & ~S_IRWXO)/i\ ksu_handle_faccessat(&dfd, &filename, &mode, NULL);\n' fs/open.c fi ## read_write.c -if [ -z "$(grep "/* read_write.c is ok" fs/read_write.c)" ]; then +if [ -z "$(grep "ksu" fs/read_write.c)" ]; then sed -i '/ssize_t vfs_read(struct file/i\extern bool ksu_vfs_read_hook __read_mostly;\nextern int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr,\n size_t *count_ptr, loff_t **pos);' fs/read_write.c sed -i '/if (unlikely(!access_ok(VERIFY_WRITE, buf, count)))/i\ if (unlikely(ksu_vfs_read_hook))\n ksu_handle_vfs_read(&file, &buf, &count, &pos);' fs/read_write.c - echo "/* read_write.c is ok" >> fs/read_write.c fi ## stat.c -if [ -z "$(grep "/* stat.c is ok" fs/stat.c)" ]; then +if [ -z "$(grep "ksu" fs/stat.c)" ]; then if grep -q "int vfs_statx(int dfd, const char __user \*filename, int flags," fs/stat.c; then sed -i '/int vfs_statx(int dfd, const char __user \*filename, int flags,/i\extern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags);' fs/stat.c - sed -i '/unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;/i\ ksu_handle_stat(&dfd, &filename, &flags);' fs/stat.c + sed -i '/unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;/a\\n ksu_handle_stat(&dfd, &filename, &flags);' fs/stat.c else sed -i '/int vfs_fstatat(int dfd, const char __user \*filename, struct kstat *stat,/i\extern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags);' fs/stat.c - sed -i '/if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |/i\ ksu_handle_stat(&dfd, &filename, &flag);\n' fs/stat.c + sed -i '/if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |/i\\n ksu_handle_stat(&dfd, &filename, &flag);\n' fs/stat.c fi - echo "/* stat.c is ok" >> fs/stat.c fi # drivers/input changes -if [ -z "$(grep "/* drivers/input is ok" drivers/input/input.c)" ]; then +## input.c +if [ -z "$(grep "ksu" drivers/input/input.c)" ]; then sed -i '/static void input_handle_event/i\extern bool ksu_input_hook __read_mostly;\nextern int ksu_handle_input_handle_event(unsigned int *type, unsigned int *code, int *value);' drivers/input/input.c sed -i '/if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN)/i\ if (unlikely(ksu_input_hook))\n ksu_handle_input_handle_event(&type, &code, &value);' drivers/input/input.c - echo "/* drivers/input is ok" >> drivers/input/input.c fi echo "Patch kernel is ok"