Skip to content

在RK3588开发板上编译Linux内核

板子是香橙派5Plus

拉代码

bash
git clone https://github.com/armbian/linux-rockchip.git --depth 1

打Patch

先把.开头的文件全忽略:

diff
diff --git a/.gitignore b/.gitignore
index d0c2b1f2d..4cd49cc17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,7 +10,6 @@
 #
 # Normal rules (sorted alphabetically)
 #
-.*
 *.a
 *.asn1.[ch]
 *.bin

禁用掉遇到warning就会退出的代码:

diff
diff --git a/scripts/gcc-wrapper.py b/scripts/gcc-wrapper.py
index 5a9f873dd..ad9d6a215 100755
--- a/scripts/gcc-wrapper.py
+++ b/scripts/gcc-wrapper.py
@@ -37,51 +37,43 @@ import os
 import sys
 import subprocess
 
-allowed_warnings = set(
-    [
-        "cgroup.h:35",  # include/trace/hooks/cgroup.h:35:18: warning: 'struct cgroup_subsys' declared inside parameter list will not be visible outside of this definition or declaration
-        "vfs.c:1259",  # fs/incfs/vfs.c:1259:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
-        "pseudo_files.c:655",  # fs/incfs/pseudo_files.c:655:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
-        "km_apphint.c:230",  # drivers/staging/imgtec/rogue/km_apphint.c:230:48: warning: division 'sizeof (void *) / sizeof (void)' does not compute the number of array elements [-Wsizeof-pointer-div]
-        "file.c:3010",  # fs/f2fs/file.c:3010:12: warning: 'f2fs_ioctl_check_project' defined but not used
-        "configfs.c:1488",  # drivers/usb/gadget/configfs.c:1488:12: warning: 'configfs_composite_setup' defined but not used
-        "configfs.c:1513",  # drivers/usb/gadget/configfs.c:1513:13: warning: 'configfs_composite_disconnect' defined but not used
-        "posix-cpu-timers.c:1268",  # kernel/time/posix-cpu-timers.c:1268:13: warning: 'now' may be used uninitialized in this function
-        "af_unix.c:1036",  # net/unix/af_unix.c:1036:20: warning: 'hash' may be used uninitialized in this function
-        "sunxi_sram.c:214",  # drivers/soc/sunxi/sunxi_sram.c:214:24: warning: 'device' may be used uninitialized in this function
-        "ks8851.c:298",  # drivers/net/ethernet/micrel/ks8851.c:298:2: warning: 'rxb[0]' may be used uninitialized in this function
-        "ks8851.c:421",  # drivers/net/ethernet/micrel/ks8851.c:421:20: warning: 'rxb[0]' may be used uninitialized in this function
-        "compat_binfmt_elf.c:58",  # fs/compat_binfmt_elf.c:58:13: warning: 'cputime_to_compat_timeval' defined but not used
-        "memcontrol.c:5337",  # mm/memcontrol.c:5337:12: warning: initialization from incompatible pointer type
-        "atags_to_fdt.c:101",  # arch/arm/boot/compressed/atags_to_fdt.c:101:1: warning: the frame size of 2056 bytes is larger than 1280 bytes [-Wframe-larger-than=]
-        "drm_edid.c:3506",  # drivers/gpu/drm/drm_edid.c:3506:13: warning: 'cea_db_is_hdmi_forum_vsdb' defined but not used
-        # W=1
-        "bounds.c:15",  # kernel/bounds.c:15:6: warning: no previous prototype for ‘foo’
-        "cpufeature.h:157",  # arch/arm64/include/asm/cpufeature.h:157:68: warning: signed and unsigned type in conditional expression
-        "sched.h:1211",  # include/linux/sched.h:1211:1: warning: type qualifiers ignored on function return type
-        "halphyrf_8188e_ce.c:2208",  # drivers/net/wireless/rockchip_wlan/rtl8189es/hal/phydm/rtl8188e/halphyrf_8188e_ce.c:2208:1: warning: the frame size of 1056 bytes is larger than 1024 bytes
-        "halphyrf_8723b_ce.c:2879",  # drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/phydm/rtl8723b/halphyrf_8723b_ce.c:2879:1: warning: the frame size of 1056 bytes is larger than 1024 bytes
-        "pnvm.c:174",  # drivers/net/wireless/intel/iwlwifi/fw/pnvm.c:174:12: warning: 'iwl_pnvm_parse' defined but not used [-Wunused-function]
-        "xfs_attr_remote.c:140", # fs/xfs/libxfs/xfs_attr_remote.c:140:35: warning: storing the address of local variable '__here' in '*failaddr'
-        "rtw_sta_mgt.c:385", # drivers/net/wireless/rockchip_wlan/rtl8188fu/core/rtw_sta_mgt.c:385:25: warning: the comparison will always evaluate as 'true' for the address of 'lock' will never be NULL [-Waddress]
-
-    ]
-)
+allowed_warnings = set([
+    "cgroup.h:35", # include/trace/hooks/cgroup.h:35:18: warning: 'struct cgroup_subsys' declared inside parameter list will not be visible outside of this definition or declaration
+    "vfs.c:1259", # fs/incfs/vfs.c:1259:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
+    "pseudo_files.c:655", # fs/incfs/pseudo_files.c:655:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
+    "km_apphint.c:230", # drivers/staging/imgtec/rogue/km_apphint.c:230:48: warning: division 'sizeof (void *) / sizeof (void)' does not compute the number of array elements [-Wsizeof-pointer-div]
+    "file.c:3010", # fs/f2fs/file.c:3010:12: warning: 'f2fs_ioctl_check_project' defined but not used
+    "configfs.c:1488", # drivers/usb/gadget/configfs.c:1488:12: warning: 'configfs_composite_setup' defined but not used
+    "configfs.c:1513", # drivers/usb/gadget/configfs.c:1513:13: warning: 'configfs_composite_disconnect' defined but not used
+    "posix-cpu-timers.c:1268", # kernel/time/posix-cpu-timers.c:1268:13: warning: 'now' may be used uninitialized in this function
+    "af_unix.c:1036", # net/unix/af_unix.c:1036:20: warning: 'hash' may be used uninitialized in this function
+    "sunxi_sram.c:214", # drivers/soc/sunxi/sunxi_sram.c:214:24: warning: 'device' may be used uninitialized in this function
+    "ks8851.c:298", # drivers/net/ethernet/micrel/ks8851.c:298:2: warning: 'rxb[0]' may be used uninitialized in this function
+    "ks8851.c:421", # drivers/net/ethernet/micrel/ks8851.c:421:20: warning: 'rxb[0]' may be used uninitialized in this function
+    "compat_binfmt_elf.c:58", # fs/compat_binfmt_elf.c:58:13: warning: 'cputime_to_compat_timeval' defined but not used
+    "memcontrol.c:5337", # mm/memcontrol.c:5337:12: warning: initialization from incompatible pointer type
+    "atags_to_fdt.c:101", # arch/arm/boot/compressed/atags_to_fdt.c:101:1: warning: the frame size of 2056 bytes is larger than 1280 bytes [-Wframe-larger-than=]
+    "drm_edid.c:3506", # drivers/gpu/drm/drm_edid.c:3506:13: warning: 'cea_db_is_hdmi_forum_vsdb' defined but not used
+    # W=1
+    "bounds.c:15", # kernel/bounds.c:15:6: warning: no previous prototype for ‘foo’
+    "cpufeature.h:157", # arch/arm64/include/asm/cpufeature.h:157:68: warning: signed and unsigned type in conditional expression
+    "sched.h:1211", # include/linux/sched.h:1211:1: warning: type qualifiers ignored on function return type
+    "halphyrf_8188e_ce.c:2208", # drivers/net/wireless/rockchip_wlan/rtl8189es/hal/phydm/rtl8188e/halphyrf_8188e_ce.c:2208:1: warning: the frame size of 1056 bytes is larger than 1024 bytes
+    "halphyrf_8723b_ce.c:2879", # drivers/net/wireless/rockchip_wlan/rtl8723bu/hal/phydm/rtl8723b/halphyrf_8723b_ce.c:2879:1: warning: the frame size of 1056 bytes is larger than 1024 bytes
+ ])
 
 # Capture the name of the object file, can find it.
 ofile = None
 
-do_exit = False
-
-warning_re = re.compile(r"""(.*/|)([^/]+\.[a-z]+:\d+):(\d+:)? warning:""")
-
+do_exit = False;
 
+warning_re = re.compile(r'''(.*/|)([^/]+\.[a-z]+:\d+):(\d+:)? warning:''')
 def interpret_warning(line):
     """Decode the message from gcc.  The messages we care about have a filename, and a warning"""
-    line = line.rstrip("\n")
+    line = line.rstrip('\n')
     m = warning_re.match(line)
     if m and m.group(2) not in allowed_warnings:
-        print("error, forbidden warning:" + m.group(2))
+        print ("error, forbidden warning:" + m.group(2))
 
         # If there is a warning, remove any object if it exists.
         if ofile:
@@ -90,16 +82,15 @@ def interpret_warning(line):
             except OSError:
                 pass
         global do_exit
-        do_exit = True
-
+        do_exit = True;
 
 def run_gcc():
     args = sys.argv[1:]
     # Look for -o
     try:
-        i = args.index("-o")
+        i = args.index('-o')
         global ofile
-        ofile = args[i + 1]
+        ofile = args[i+1]
     except (ValueError, IndexError):
         pass
 
@@ -107,12 +98,11 @@ def run_gcc():
 
     try:
         env = os.environ.copy()
-        env["LC_ALL"] = "C"
+        env['LC_ALL'] = 'C'
         proc = subprocess.Popen(args, stderr=subprocess.PIPE, env=env)
         for line in proc.stderr:
-            print(line.decode("utf-8"), end="")
-            # ignore warnings
-            # interpret_warning(line.decode("utf-8"))
+            print (line.decode("utf-8"), end="")
+            interpret_warning(line.decode("utf-8"))
         if do_exit:
             sys.exit(1)
 
@@ -120,14 +110,13 @@ def run_gcc():
     except OSError as e:
         result = e.errno
         if result == errno.ENOENT:
-            print(args[0] + ":" + e.strerror)
-            print("Is your PATH set correctly?")
+            print (args[0] + ':' + e.strerror)
+            print ('Is your PATH set correctly?')
         else:
-            print(" ".join(args) + str(e))
+            print (' '.join(args) + str(e))
 
     return result
 
-
-if __name__ == "__main__":
+if __name__ == '__main__':
     status = run_gcc()
     sys.exit(status)

把镜像名也改掉:

diff
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
index b3a57c510..7e2f0c346 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -155,7 +155,7 @@ libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
 
 # Default target when executing plain make
 boot           := arch/arm64/boot
-KBUILD_IMAGE   := $(boot)/Image
+KBUILD_IMAGE   := $(boot)/Image.gz
 
 # Don't compile Image in mixed build with "all" target
 ifndef KBUILD_MIXED_TREE

配置

略,自己调吧,网上教程一堆

编译

直接编译出deb包:

bash
make -j16 BRANCH=5.10.160 LOCALVERSION=-rockchip-rk3588 bindeb-pkg

编译完之后会出几个deb包,装上重启ok。