Linux
更新Linux版本有两种,一种是更新大版本(4.4->4.9),另一种是更新小版本(4.4.217->4.4.218)
更新大版本能够带来较多的内核特性变化,因此可能造成严重的dt/驱动不兼容,非常难以操作
更新小版本可以为你的设备带来漏洞修复、性能提升(也许)以及新的特性(偶尔),并且基本不会造成内核api的变化,无需担心驱动兼容性

查看最新版本

  • 前往此处可以看到Linux各个还在维护的版本的更新发布情况

获取代码

一般来说,你可以从三个地方获取新的Linux代码

kernel.org

这是最官方的渠道,原汁原味的Linux上游更新
以4.4.218为例
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git v4.4.218

优点:

  • 速度快,第一时间发布

缺点:

  • 可能与安卓的修改发生冲突
  • 可能与高通的修改发生冲突
  • 可能与设备特有的修改发生冲突
  • 没有安卓特有补丁的更新

kernel/common

这是谷歌的安卓common内核,也会将最新Linux版本合并在内

以4.4为例
git fetch https://android.googlesource.com/kernel/common android-4.4-p
一般来说,fetch对应内核版本+安卓版本的分支(4.4没有独立Q的分支,因此只能用P)

优点:

  • 速度第二块
  • 免去解决与安卓特有修改相关的冲突
  • 有时能带来安卓特有的修改与补丁

缺点:

  • 可能与高通的修改冲突
  • 可能与设备特有的修改冲突

Android Linux Stable

这就是传说中的ALS
它是由nathanchance维护的,针对高通设备的Linux上游
以4.4为例
首先你要明确你当前的CAF TAG是基于哪个分支的
如图,找到你的当前tag,点击蓝色处
5e4f0c49c213e77cb76cce30dec4021b.png

此时,你将可以看到当前TAG的对应分支
398c39d3482fcd51d128500cd5c39b31.png

然后我们去获取ALS中的对应分支即可
git fetch https://github.com/android-linux-stable/msm-4.4 kernel.lnx.4.4.r39-rel

优点:

  • 方便,基本上只会和设备厂商的修改发生冲突,而这种冲突的概率是极小的
  • 会定期合并最新caf tag

缺点:

  • 更新时间不确定,可能是在linux发布新版本后的几小时,也有可能是在新版本后的几天
  • 没有合并kernel/common,没有来自谷歌的安卓特有修改/补丁

合并代码

获取代码后
git merge FETCH_HEAD即可

$ git merge FETCH_HEAD 
正在进行非精确的重命名探测: 100% (214170/214170), 完成.
自动合并 kernel/irq/manage.c
自动合并 Makefile
Merge made by the 'recursive' strategy.
 .../devicetree/bindings/powerpc/fsl/fman.txt       |  7 ++
 Makefile                                           |  2 +-
 arch/arm/boot/dts/dra7.dtsi                        |  2 +
 arch/arm64/kernel/smp.c                            | 19 ++++-
 arch/powerpc/kernel/vmlinux.lds.S                  |  6 ++
 arch/x86/kvm/vmx.c                                 |  4 +-
 arch/x86/mm/fault.c                                | 26 +++++-
 drivers/acpi/apei/ghes.c                           |  2 +-
 drivers/gpu/drm/drm_dp_mst_topology.c              | 15 +---
 drivers/gpu/drm/exynos/exynos_drm_dsi.c            | 12 +--
 drivers/hwspinlock/hwspinlock_core.c               |  2 +-
 drivers/hwtracing/intel_th/msu.c                   |  6 +-
 drivers/i2c/busses/i2c-hix5hd2.c                   |  1 +
 drivers/infiniband/ulp/ipoib/ipoib_fs.c            |  2 -
 drivers/media/usb/b2c2/flexcop-usb.c               |  6 +-
 drivers/media/usb/dvb-usb/dib0700_core.c           |  4 +-
 drivers/media/usb/gspca/ov519.c                    | 10 +++
 drivers/media/usb/gspca/stv06xx/stv06xx.c          | 19 ++++-
 drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.c   |  4 +
 drivers/media/usb/gspca/xirlink_cit.c              | 18 ++++-
 drivers/media/usb/usbtv/usbtv-core.c               |  2 +-
 drivers/misc/altera-stapl/altera.c                 | 12 +--
 drivers/net/can/slcan.c                            |  3 +
 drivers/net/ethernet/micrel/ks8851_mll.c           | 56 ++++++++++++-
 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c    |  2 +-
 drivers/net/vxlan.c                                | 11 ++-
 drivers/nfc/fdp/fdp.c                              |  5 +-
 drivers/rtc/Kconfig                                |  1 +
 drivers/scsi/ipr.c                                 |  3 +-
 drivers/scsi/ipr.h                                 |  1 +
 drivers/spi/spi-qup.c                              |  5 ++
 drivers/spi/spi-zynqmp-gqspi.c                     |  3 -
 drivers/staging/rtl8188eu/os_dep/usb_intf.c        |  2 +
 drivers/staging/speakup/main.c                     |  3 +-
 drivers/staging/wlan-ng/hfa384x_usb.c              |  2 +
 drivers/tty/vt/selection.c                         |  5 ++
 drivers/tty/vt/vt.c                                | 30 ++++++-
 drivers/tty/vt/vt_ioctl.c                          | 80 ++++++++++---------
 drivers/usb/class/cdc-acm.c                        | 20 +++--
 drivers/usb/core/quirks.c                          |  6 ++
 drivers/usb/host/xhci-plat.c                       |  1 +
 drivers/usb/musb/musb_host.c                       | 17 ++--
 drivers/usb/serial/io_edgeport.c                   |  2 +-
 drivers/usb/serial/option.c                        |  8 ++
 drivers/usb/serial/pl2303.c                        |  1 +
 drivers/usb/serial/pl2303.h                        |  1 +
 drivers/vhost/net.c                                | 13 +--
 fs/inode.c                                         |  1 +
 fs/libfs.c                                         |  8 +-
 include/linux/fs.h                                 |  1 +
 include/linux/futex.h                              | 17 ++--
 include/linux/kref.h                               |  5 ++
 include/linux/selection.h                          |  4 +-
 include/linux/vmalloc.h                            |  5 +-
 include/linux/vt_kern.h                            |  2 +-
 include/uapi/linux/if.h                            |  4 +-
 kernel/bpf/syscall.c                               |  3 +-
 kernel/futex.c                                     | 93 +++++++++++++---------
 kernel/irq/manage.c                                | 11 ++-
 kernel/notifier.c                                  |  2 +-
 mm/memcontrol.c                                    | 10 ++-
 mm/nommu.c                                         | 10 ++-
 mm/slub.c                                          | 32 +++++---
 mm/vmalloc.c                                       | 11 ++-
 net/dsa/tag_brcm.c                                 |  2 +
 net/hsr/hsr_framereg.c                             | 10 +--
 net/hsr/hsr_netlink.c                              | 74 +++++++++--------
 net/hsr/hsr_slave.c                                |  8 +-
 net/ipv4/Kconfig                                   |  1 +
 net/ipv4/ip_vti.c                                  | 38 +++++++--
 net/ipv4/route.c                                   |  7 +-
 net/ipv6/ip6_vti.c                                 | 34 ++++++--
 net/mac80211/mesh_hwmp.c                           |  3 +-
 net/mac80211/sta_info.c                            |  6 ++
 net/sched/cls_route.c                              |  4 +-
 net/sched/cls_tcindex.c                            |  1 +
 net/xfrm/xfrm_policy.c                             |  2 +
 net/xfrm/xfrm_user.c                               |  6 +-
 scripts/Makefile.extrawarn                         |  1 +
 scripts/dtc/dtc-lexer.l                            |  1 -
 scripts/dtc/dtc-lexer.lex.c_shipped                |  1 -
 sound/core/oss/pcm_plugin.c                        | 12 ++-
 sound/core/seq/oss/seq_oss_midi.c                  |  1 +
 sound/core/seq/seq_virmidi.c                       |  1 +
 sound/pci/hda/patch_realtek.c                      |  2 +
 sound/usb/line6/driver.c                           |  2 +-
 sound/usb/line6/midibuf.c                          |  2 +-
 tools/perf/Makefile                                |  2 +-
 tools/perf/util/map.c                              |  2 +-
 tools/perf/util/probe-finder.c                     | 11 ++-
 .../cpupower/utils/idle_monitor/amd_fam14h_idle.c  |  2 +-
 .../cpupower/utils/idle_monitor/cpuidle_sysfs.c    |  2 +-
 .../cpupower/utils/idle_monitor/cpupower-monitor.c |  2 +
 .../cpupower/utils/idle_monitor/cpupower-monitor.h |  2 +-
 tools/scripts/Makefile.include                     |  4 +-
 95 files changed, 629 insertions(+), 298 deletions(-)

合als没冲突我也没法演示冲突的解决,冲突自己解决

进阶玩法

  • 同时合并kernel/common & CAF(ALS) (你只要解决一大堆冲突就行了)