所謂的 mainline kernels 就是在 The Linux Kernel Archives 上面由 Linus Torvalds 本人釋出的版本, 而 Ubuntu 本來有一個 Ubuntu Kernel PPA 專門用來編譯這些 mainline kernels, 只是後來不曉得為何就不再使用 PPA 改用手動編譯的方式,可能是因為 Linux kernel 的釋出方式有了許多變化,除了原本的 stable 跟 mainline 還另加入了 longterm 的支援, 而 Ubuntu 的 Kernel team 本來就有準備一個 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 上面備份了所有的 mainline kernels, 所以就繼續沿用這樣的名稱,但其實這上面還包括了 stable 跟 longterm 後來所有的版本。
總之 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 上面放的是沒有 Ubuntu 額外加料的原始 kernel 版本,只是都編譯成了 Debian package, 所以想要使用的人可以直接下載來安裝就可以使用了,而這些 kernel 如果在安裝使用上會有什麼問題,當然也不會在 Ubuntu 的支援之中,這些 kernel 的存在只是用來測試的,藉由安裝不同的版本來找出問題是在哪兩個版本之間發生的,或是在哪兩個版本之間解決的,進而幫助開發者縮小問題發生的地方,來找出相關合適的修補檔。
但是這樣不斷地手動下載安裝,也是很麻煩的,所以我寫了一個小工具來幫忙,它就叫做 mainline-kernels.sh,下載後像下面這樣執行就可以看到使用說明:
$ ./mainline-kernels.sh --help Usage ./mainline-kernels.sh: -h|--help The manual of this script -f|--from NUM Lower bound of kernel version -t|--to NUM Upper bound of kernel version -l|--list List available kernel versions -r|--remove Remove mainline kernels
可以先使用 ./mainline-kernels.sh --list 來找出現在有哪些 kernel 可以使用。
$ ./mainline-kernels.sh --list 2.6.15 2.6.24.7 2.6.24 2.6.25 2.6.26 2.6.27.47-intrepid 2.6.27.58-intrepid 2.6.27.59-intrepid 2.6.27.60-intrepid 2.6.27.61-intrepid 2.6.27.62-intrepid 2.6.27 2.6.28.10 2.6.28 2.6.29.6 2.6.29 2.6.30.10 2.6.30 ... 3.15~rc3-utopic 3.15~rc4-utopic 3.15~rc5-utopic 3.15~rc6-utopic 3.15~rc7-utopic 3.15~rc8-utopic 3.15-utopic 3.15.1-utopic 3.15.2-utopic 3.15.3-utopic 3.15.4-utopic 3.15.5-utopic 3.16~rc1-utopic 3.16~rc2-utopic 3.16~rc3-utopic 3.16~rc4-utopic 3.16~rc5-utopic
然後直接安裝想要的 Linux kernel
$ ./mainline-kernels.sh 3.16~rc4-utopic 3.16~rc5-utopic
或是指定一個範圍來安裝
./mainline-kernels.sh --from 3.15~ --to 3.16
或是什麼都不指定直接執行,之後再慢慢從選單上面挑選。
./mainline-kernels.sh
最後再將安裝的 Linux kernel 移除掉。
./mainline-kernels.sh --remove
要提醒的一點是,這邊的版本號碼是遵循 Debian version 的規則,所以波浪符號有特別的意義,可以參考我以前的文章。
最後分享一下 Ubuntu to Mainline kernel version mapping,結束這一回合。