2012年6月9日 星期六

GNU/Linux 作業系統核心(kernel) 3.4.2版本自訂Debian軟體包裹(新增套用了-ck Patch、BFQ Patch、UKSM Patch的版本)




智慧財產授權條款 | Intellectual Property License

《GNU/Linux 作業系統核心(O.S. kernel) 3.4.1 版本自訂Debian軟體套件》採用
創用CC(Creative Commons)(http://creativecommons.org)組織 所規範的
創用CC姓名標示授權條款(CC BY) 3.0版本
或更新的版本。以下使用簡單易懂的文句向您說明此授權條款的內容:
您可以自由
分享(Share)
以任何方式散布及傳輸此智慧財產。
重製(Revise)
修改此智慧財產(「智慧財產授權條款」以外的部份)之任何內容。
商業性使用(Commercial usage)
使用此智慧財產營利行為中。
但是您需遵守下列限制
姓名標示(Attribution)
您必須按照授權人所指定的方式,標示授權人的名稱「……使用了「V字龍的網路日誌 | Vdragon's Internet Log」的智慧財產《GNU/Linux 作業系統核心(O.S. kernel) 3.4.2 版本自訂Debian軟體套件》」及其網路地址(http://vdragonlog.blogspot.com/2012/06/gnulinux-kernel-342debian.html),但不得以任何方式暗示此智慧財產為您或您使用此智慧財產的方式背書。
聲明(Notice)
為了再使用或散布之目的,您必須向他人清楚說明本著作所適用的授權條款。提供上方所列之創用CC的網路位址是最好的方式。
另外於下列情形下您不會受到此條款影響
免除(Waiver)
若您獲得授權人的同意,上述任何限制條件都可獲得免除。
公共領域(Public Domain)
如果當此智慧財產或其任何要素在相關法律下屬於公共領域(Public Domain),該範圍內的使用不會受到本授權條款的限制。
其他權利(Other Rights)
任何下列的權利絕不會受到本授權條款的影響:
  • 合理使用的權利
  • 作者的著作人格權
  • 其他人可能對該著作本身或該著作如何被使用所擁有的權利,例如形象權或隱私權

內容 | Content

本作品仰賴make-kpkg工具製作
This package is powered by make-kpkg tool

kernel版本 | Kernel Version

3.4.2 (穩定版本(stable version))

kernel設定選項 | Kernel Configurations

  • 基於Ubuntu 12.04LTS 當前版本的kernel配置
    based on configuration of the current Ubuntu 12.04LTS kernel
  • clock頻率改為1000Hz
    clock frequency changed to 1000Hz
  • preempt設定改為low latency
    preempt setting changed to low latency
  • CPU頻率政策改為ondemand
    CPU frequency policy changed to "on demand"
  • 沒有特別用意的加入了某些硬體的驅動程式
    added some hardware driver module in no special reason
  • 還有一些有的沒的我忘了
    some other changes forgotten by me
  • 理論上會比預設的kernel還要來得耗電,可能不適用於使用電池供電的電腦
    May consume more power than the original kernel, not suitable to computer using battery power supply
  • 預設套用了AppArmor v2.4 Capability Patch
    Default applied AppArmor v2.4 Capability Patch

已知問題 | Known Issues

  1. 如果您的開機載入程式為 burg 則安裝此kernel不會更新其開機項目清單
    解決方法:手動執行 update-burg 更新開機入程式的開機項目列表
  2. 開機時出現AppArmor Capability Patch的警告(已於+03版本修復)。
  3. make xconfig似乎會造成產生出來的header package依賴libQt(已於+05版本修復)。

目前釋出的最新軟體包裹版本 | Currently Released Latest Software Package Version

3.4.2+05

變更紀錄 | ChangeLog

  • 3.4.1+05
    • 修正了headers軟體包裹會依賴libQt的問題
  • 3.3.7+03
    • 預設套用了AppArmor Capability Patch(尚未釋出)、新增套用了-ck Patch、BFQ Patch、UKSM Patch的版本
  • 3.3.7+02
    • 新增了套用UKSM patch的版本(不釋出)
  • 3.3.7+01
    • 理論解決 VirtualBox 作業系統核心模組無法編譯的問題(目前無AMD64版本)

下載連結 | Download Links

所有版本均存放於Mediafire共享資料夾

x86 CPU架構(32位元)(包括i386、i686、x86_64的CPU裝有32位元版本作業系統的電腦)

  • 對應的CPU架構:intel Pentium Pro 以上 (相容於大部份intel Pentium Pro以後的CPU,亦包括大部份AMD CPU)
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本
  • 對應的CPU架構:Intel Core 2
    最近的intel CPU可以考慮裝裝看這個版本,效能會比較好一點
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本
  • 對應的CPU架構:AMD K8
    最近的AMD CPU可以考慮裝裝看這個版本,效能會比較好一點
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本

x86_64 CPU架構(64位元)(包括AMD64、EM64T等架構的CPU)

  • 對應的CPU架構:所有x86_64 CPU架構皆適用
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本

  • 對應的CPU架構:Intel Core 2
    最近的intel CPU可以考慮裝裝看這個版本,效能會比較好一點
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本

  • 對應的CPU架構:AMD K8
    最近的AMD CPU可以考慮裝裝看這個版本,效能會比較好一點
    • 套用了-ck Patch、BFQ Patch、UKSM Patch的版本

安裝方式 | Installation Method

  1. 下載以取得 linux-header 跟 linux-image 開頭的兩個 Debian 軟體包裹檔案。
  2. (非必要但建議的步驟)安裝 linux-header 開頭的 Debian 軟體包裹
  3. 安裝 linux-image 開頭的 Debian 軟體包裹
  4. 重新開機,正常的話開機載入程式應該會多出安裝上去的作業系統核心的開機選項
  5. (安裝linux-header開頭軟體包裹需套用的修正)重新開機以安裝好的kernel版本的開機選項開機,下載我做的自訂kernel header安裝後修復symbolic link用script然後在終端機(模擬器)中切換到script的根目錄中以管理員(root)權限執行
  6. bash Shell_scripts/Fix_link.sh
    script本身做的只是把「/lib/modules/「kernel版本」/build」這個symbolic link從我建構kernel時的Linux Kernel原始程式碼根目錄移到實際上「linux-headers開頭的Debian 軟體包裹」安裝kernel header的目錄「/usr/src/「kernel版本」/」。
  7. (安裝linux-header開頭軟體包裹需套用的修正)重新安裝先前因為symbolic link指向的Linux Kernel Header目錄不正確而無法成功建構的kernel module(如果有的話)。
    例如VirtualBox的kernel modules
    以系統管理員(root)權限執行
    /etc/init.d/vboxdrv setup

問題排除方式 | Troubleshooting

  • 使用安裝上去的作業系統核心的開機選項無法開機
    原因:該作業系統核心所對應的CPU架構與電腦的CPU不相容。
    解決方式:安裝合適的版本的作業系統核心
  • 第三方kernel module於此作業系統核心無法建構
    原因:沒有安裝linux-headers開頭的軟體包裹、沒有修正/lib/modules/「作業系統核心版本」/build symbolic link
    解決方式:請參考上方安裝方式

2012年6月3日 星期日

我的 GNU/Linux 作業系統核心自製 Debian 軟體包裹製作程序(The Debian way)

我的 GNU/Linux 作業系統核心自製 Debian 軟體包裹製作程序(The Debian way)

智慧財產授權條款 | Intellectual Property License

本文章以創用CC BY 3.0 台灣版本授權所有人使用。
如果有其他需求歡迎來信詢問

文章版本 | Article Version

+09

文章修改紀錄 | Article ChangeLog

  • +09
    • 增加 ZRAM 的選項
  • +08
  • +07
    • 預計要新增 ureadahead 的 kernel patch (在開發者未提供可成功套用差異檔的情況下還是繼續等吧= =)
    •  測試官方 Linux Bootup logo 選項
  • +06
    • 修正了更換CPU架構會造成編譯出來的作業系統核心不支援 Physical Address Extension 的問題。
    • 文章正式釋出。
  • +05
    • 解決 make xconfig 之後建構的 linux-headers Debian 軟體包裹依賴 Qt 函式庫的問題
  • +04
    • 增加了啟用 Intel、AMD IOMMU 的選項
  • +03
    • 第一次撰寫

文章適用範圍

  • 實際測試於 Ubuntu 12.04LTS、12.10 版本
  • 理論上適用於 Debian 跟基於 Debian 的 Linux 散佈版本(如 Ubuntu、Linux Mint 等)

文章內容 | Article Content

因為 VirtualBox 作業系統核心模組太容易不小心建構不出來了所以…Orz...
總之這是我做出 Linux 作業系統核心 Debian 軟體包裹的標準程序。
這裡用的是所謂 The Debian way 的建構方法,可以直接建構並打包成可輕易安裝及移除的 Debian 軟體包

確認建構 Linux 作業系統核心所需要的軟體是否已安裝

  • 必要條件
    • kernel-package 軟體包
      • make-kpkg 命令等
    • 待補充
  • 選用條件
    • Qt 函式庫開發用軟體包
      • make xconfig 命令需要用到
    • Gtk 函式庫開發用軟體包
      • make gconfig 命令需要用到
    • 待補充

獲取並建構 Linux 作業系統核心

  1. www.kernel.org 下載最新穩定版本的 Linux 作業系統核心原始程式碼壓縮封裝檔。
  2. 在一個 UNIX 檔案系統的磁碟分割區中解壓縮壓縮封裝檔
    • 其他類型的檔案系統我還沒試過…
    • 如果可用記憶體空間夠大(6~8GiB)的話可以直接建立跟 RAM 磁碟差不多的 tmpfs 檔案系統並在其中建構 
      • mount --types tmpfs --options size=8G tmpfs 「要掛載的目錄」
        • 掛載選項
          • size
            • tmpfs 檔案系統最大允許的大小(似乎預設值挺小的)
  3. 執行終端機(模擬器),變更目前工作目錄(current working directory)至kernel 原始程式碼根目錄內(有 arch、block、kernel、net、drivers 等資料夾的那一層目錄)。
  4. 執行「make mrproper」。
  5. 下載並套用合適的版本的 AppArmor 2.4 Capability Patchureadahead trace patch (現在暫時用這個)。
    patch --strip 1 < 「patch檔案的位址」
  6. 確定「make gconfig」或「make xconfig」所需的軟體相依性有沒有俱備。
  7. 執行「make gconfig」或「make xconfig」以建構並執行kernel的設定工具。
  8. 載入/boot/中Ubuntu官方linux kernel的config開頭的檔案。
  9. Processor type and features分類中選擇需要的設定
    • Processor family
      • 說明:編譯器要針對做最佳化的的CPU種類(較新的CPU family效能較好但其他機器相容性較低)
      • 影響範圍:效能 或 硬體相容性
    • Preemption Model(Preemptible Kernel (Low-Latency Desktop))
      • 影響範圍效能 或 電力消耗
    • Timer frequency(1000HZ)
      • 影響範圍效能 或 電力消耗
    • 勾選Tickless System (Dynamic Ticks)。
      • 影響範圍效能 或 電力消耗
    •  High Memory Support勾選64GB
      • 影響範圍:可使用可用記憶體空間 或 效能
  10. Power management and ACPI options分類中選擇需要的設定
    • CPU Frequency scaling中選擇需要的Default CPUFreq governor(ondemand)。
      • 影響範圍效能 或 電力消耗
  11. 選擇自己感興趣的自訂項目(胡搞亂搞模式啟動!)
    • /Security options/Enable Intel(R) Trusted Executaion Technology (Intel(R) TXT)
    • /Security options/Integrity Measurement Architecture(IMA)
    • /Device Drivers/Staging drivers/Android/
    • Enable Intel DMA Remapping Devices by default(INTEL_IOMMU_DEFAULT_ON)
    • AMD IOMMU support
    • /Processor type and features/Toshiba laptop support 
    • x32 ABI for 64-bit mode 
    • EFI stub support 
    • Enable verbose x86 bootup info messages
    • Opportunistic sleep
    • User space wakeup sources interface
    • Enable frontswap to cache swap pages if them is present
    • OTG support
    • Enable RCU priority boosting 
    • Forced module loading/unloading
      • 用途 | Usage
        主要是用來協助Linux作業系統核心模組(kernel module)開發
    •  ZSMALLOC & ZRAM支持
  12. 儲存 kernel 設定之後關閉 kernel設定工具。
  13. 執行「make clean」(為了要排除掉無用的設定工具的軟體相依性)跟「make-kpkg clean」移除先前可能存在的建構產物
  14. 編輯「家目錄/.kernel-pkg.conf」的 maintainer、email 選項(可以複製 /etc/kernel-pkg.conf 當作範本)。
  15. 執行「make-kpkg clean」。
  16. 執行make-kpkg程式建構Linux Kernel並包成Debian軟體包裹。
    執行範例(注意:這只是範例!):
    make-kpkg --initrd --rootcmd=fakeroot --jobs 6 --revision=3.4.6+08 --append-to-version=-intelceleronm
    optimized-vdragon-mod kernel_headers kernel_image

    make-kpkg --initrd --rootcmd=fakeroot --jobs 6 --revision=3.4.5+08 --append-to-version=-intelcore2optimized-uksm-ck-bfq-patched-vdragon-mod
    kernel_headers kernel_image
    執行成功的話目前工作目錄的上一層目錄會出現Debian軟體包裹檔案。
  17. 如果要建構別的版本
    1. 執行「make gconfig」或「make xconfig」以建構並執行kernel的設定工具。
    2. 回到9,如果要更換CPU架構的話回到8。
      ----第一階段結束 | First Phase Ended----
  18. 下載並套用合適的版本的UKSM PatchBrain Fuck Scheduler(B.F.S.) Patch-ck PatchBudget Fair Queuing IO Scheduler Patch
    patch -p1 < 「patch檔案的位址」
  19. 執行「make gconfig」或「make xconfig」以建構並執行 kernel 的設定工具(Budget Fair Queuing IO Scheduler不會自動啟用要手動勾選)。
  20. 執行9~17。
    ----釋出 | Release----

安裝建構好的Debian軟體包裹

  1. 重要重要重要重要!解除掛載Linux Kernel原始程式碼位址所在的磁碟分割區(disk partition)或是移動原始程式碼的目錄,要不然header軟體包裹會白目的在原始碼中新增指向它的symbolic link,然後編譯VirtualBox kernel modules時會GG。
    ※更新:我大概知道這一段要怎麼處理了,先跳過。
    • 暫時的排解問題方法 | Workarounds
      • 安裝 kernel-package 軟體包
      • 以系統管理身份複製 /usr/share/kernel-package/examples/ 目錄底下的「etc/kernel/*/link」或「etc/kernel/*/force-build-link」shell script 程式至 /etc/kernel/ 底下的對應位置
  2. 安裝「linux-image」跟「linux-header」開頭的兩個Debian軟體包裹。
  3. 如果還是有問題請見 4. 以後的說明
  4. 重新開機以安裝好的kernel版本的開機選項開機,下載我做的自訂kernel header安裝後修復symbolic link用script然後在終端機(模擬器)中切換到script的根目錄中以管理員(root)權限執行
    bash Shell_scripts/Fix_link.sh
    script本身做的只是把「/lib/modules/「kernel版本」/build」、「/lib/modules/「kernel版本」/source」這兩個symbolic link從我建構kernel時的Linux Kernel原始程式碼根目錄移到實際上「linux-headers開頭的Debian 軟體包裹」安裝kernel header的目錄「/usr/src/
    「kernel版本」/」。
  5. 重新安裝先前因為symbolic link指向的 Linux Kernel Header目錄不正確而無法成功建構的 kernel module。

已知問題 | Known Issues

  • 理論上 make-kpkg 本身可以做到直接建立指向「/usr/src/「kernel版本」/」的symbolic link,但是礙於時間有限我現在只有做到自行修補。
    •  已有 workaround ,大概是 make-kpkg 的程式缺陷
  • linux-headers開頭的軟體包裹居然會莫名其妙的依賴libqtcore…造成某些比較舊的版本無法安裝(已於+5版本修復)。
  • Ubuntu 10.04LTS因為gcc版本不相容的問題即使安裝了 linux-headers 開頭的軟體包裹也無法安裝第3方kernel modules(不修復,升級系統比較快)。
  • 建構出來的kernel無法執行32位元可執行檔(+6版本應不需修改建構程序即可解決)。

參考資料 | Reference Data

  1. 自己。