更新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,点击蓝色处
然后我们去获取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) (你只要解决一大堆冲突就行了)
这里有两年半之后的总结,作为补充:
https://blog.xzr.moe/archives/313/#comment-146