一個Linux愛好者的2.6.11核心編譯過程(轉)

worldblog發表於2007-08-10
一個Linux愛好者的2.6.11核心編譯過程(轉)[@more@]

  星期天呀,呵呵,10:30起床,好像有一點早,昨天晚上玩遊戲玩到3點鐘,好累呀。開啟電腦,先玩一會遊戲在說。11:00,不玩了,開始幹正事了。先換到linux下去。本來想用虛擬機器的,但是我做的ftp不能用,而且還可能好慢的。我的電腦是沒有上網的,在我的2003下架了個ftp,想讓虛擬機器來訪問,可是虛擬機器和我的電腦連不上,好鬱悶。

  (1)安裝module-init-tools-3.0.tar.gz:

  # tar -zxvf module-init-tools-3.0.tar.gz

  # cd module-init-tools-3.0

  # ./configure --prefix=/sbin

  # make

  # make install

  # ./generate-modprobe.conf /etc/modprobe.conf

  不知道為什麼,我用module-init-tools-3.1時make出錯。如果改用3.0的就沒事了。

  (2)安裝modutils-2.4.25-8.9.i386.rpm:

  # rpm -Uvih modutils-2.4.25-8.9.i386.rpm

  對modutils進行升級。

  (3)安裝新核心:

  將新核心copy到/usr/src下,

  #tar xzvf linux-2.6.11.tar.gz -----解壓縮.

  II. 將名為linux的符號連結刪掉,這時舊版本核心的符號連結.

  #ln -s linux-2.6.11 linux ------建立linux-2.6.11的符號連結linux.

  設定核心.

  # cd /usr/src/linux

  # make mrproper -----刪除不必要的檔案和目錄.

  #make config(基於文字的最為傳統的配置介面,不推薦使用)

  #make menuconfig(基於文字選單的配置介面,字元終端下推薦使用)

  #make xconfig(基於圖形視窗模式的配置介面,Xwindow下推薦使用)

  #make oldconfig(如果只想在原來核心配置的基礎上修改一些小地方,會省去不少麻煩)

  它們的目的是一樣的,那就是生成一個.config檔案

  這三個命令中,make xconfig的介面最為友好,如果你可以使用Xwindow,你就用這個好了,這個比較方便,也好設定。如果你不能使用Xwindow,那麼就使用make menuconfig好了。介面雖然比上面一個差點,總比make config的要好多了。

  選擇相應的配置時,有三種選擇,它們分別代表的含義如下:

  Y--將該功能編譯進核心

  N--不將該功能編譯進核心

  M--將該功能編譯成可以在需要時動態插入到核心中的模組

  face=Verdana>  如果使用的是make xconfig,使用滑鼠就可以選擇對應的選項。如果使用的是 make menuconfig,則需要使用空格鍵進行選取。你會發現在每一個選項前都有個括號, 但有的是中括號有的是尖括號,還有一種圓括號。用空格鍵選擇時可以發現,中括號裡要麼是空,要麼是"*",而尖括號裡可以是空,"*"和"M"。這表示前者對應的項要麼不要,要麼編譯到核心裡;後者則多一樣選擇,可以編譯成模組。而圓括號的內容是要你在所提供的幾個選項中選擇一項。

  附核心配置選項說明(這是我在網上找到的,還可以,有些也是不一樣的,給你一個參考)

  程式碼成熟度選項:

  Code maturity level options ---&gt

  [*] Prompt for development and/or incomplete code/drivers

  [*] Select only drivers expected to compile cleanly

  開啟使用開發中、不完全的程式碼/驅動會讓核心配置多出很多選項,由於我們需要使用一些正在開發中的功能,因此必需開啟這一選項。

  通用設定選項,

  General setup ---&gt

  () Local version - append to kernel release

  這裡填入的是64字元以內的字串,你在這裡填上的字元口串可以用uname -a命令看到。

  [*] Support for paging of anonymous memory (swap)

  這是使用交換分割槽或者交換檔案來做為虛擬記憶體的,當然要選上了。

  [*] System V IPC

  表示系統5的Inter Process Communication,它用於處理器在程式之間同步和交換資訊,如果不選這項,很多程式執行不起來

  [*] POSIX Message Queues

  這是POSIX的訊息佇列,它同樣是一種IPC。建議你最好將它選上

  [*] BSD Process Accounting

  這是充許使用者程式訪問核心將賬戶資訊寫入檔案中的。這通常被認為是個好主意,建議你最好將它選上。

  [*] BSD Process Accounting version 3 file format

  [*] Sysctl support

  這個選項能不重新編譯核心修改核心的某些引數和變數,如果你也選擇了支援/proc,將能從/proc/sys存取可以影響核心的引數或變數。建議你最好將它選上

  [ ] Auditing support

  審記支援,用於和核心的某些子模組同時工作,例如SELinux。只有選擇此項及它的子項,才能呼叫有關審記的系統呼叫

  (15) Kernel log buffer size (16 => 64KB, 17 => 128KB)

  核心日誌快取的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB單處理器,15 => 32 KB多處理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390

  [*] Support for hot-pluggable devices

  是否支援熱插拔的選項,肯定要選上

  [*] Kernel Userspace Events

  核心中分為系統區和使用者區,這裡系統區和使用者區進行通訊的一種方式,選上。

  [*] Kernel .config support

  將.config配置資訊儲存在核心中,選上它及它的子項使得其它使用者能從/proc中得到核心的配置

  [*] Enable access to .config through /proc/config.gz

  [ ] Configure standard kernel features (for small systems) ---&gt

  這是為了編譯某些特殊的核心使用的,通常你可以不選擇這一選項,你也不用對它下面的子項操心了。

  --- Configure standard kernel features (for small systems)

  [ ] Load all symbols for debugging/kksymoops

  是否裝載所有的除錯符號表資訊,如果你不需要對核心除錯,不需要選擇此項。

  [*] Enable futex support

  不選這個核心不一定能正確的執行使用glibc的程式,當然要選上

  [*] Enable eventpoll support

  不選這個核心將不支援事件輪循的系統呼叫,最好選上

  [*] Optimize for size

  這個選項使gcc使用-Os的引數而不是-O2的引數來最佳化編譯,以獲得更小尺寸的核心,建議選上。

  [*] Use full shmem filesystem

  除非你在很少的記憶體且不使用交換記憶體時,才不要選擇這項

  (0) Function alignment

  (0) Label alignment

  (0) Loop alignment

  (0) Jump alignment

  可載入模組:

  Loadable module support ---&gt

  [*] Enable loadable module support

  [*] Module unloading

  不選這個功能,載入的模組就不能解除安裝

  [ ] Forced module unloading

  [ ] Module versioning support (EXPERIMENTAL)

  [ ] Source checksum for all modules

  [*] Automatic kernel module loading

  處理器型別及特性:

  Processor type and features ---&gt

  Subarchitecture Type (PC-compatible) ---&gt

  Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) ---&gt

  [ ] Generic x86 support

  這一選項針對x86系列的CPU使用更多的常規最佳化。如果你在上面一項選的是i386、i586之類的才選這個

  [*] HPET Timer Support

  HPET是替代8254晶片的下一代時鐘處理器。這裡你可以安全的選上這一選項。如果硬體不支援的話,將仍使用8254時鐘處理器

  [*] Symmetric multi-processing support

  對稱多處理器支援,在單CPU的機器上,不選這個選項會更快一些。由於超執行緒技術,看起來是兩顆CPU,因些要選上這個選項

  (1) Maximum number of CPUs (2-255) 支援的最大CPU數

  [ ] SMT (Hyperthreading) scheduler support

  [*] Preemptible Kernel

  這個選項能使應用程式即使核心在高負載時也很可靠,建議最好選上

  [*] Machine Check Exception

  這個選項能讓CPU檢測到系統故障時通知核心,一般我用組裝的桌上型電腦會選這項。

  < > Toshiba Laptop support

  < > Dell laptop support

  < > /dev/cpu/microcode - Intel IA32 CPU microcode support

  < > /dev/cpu/*/msr - Model-specific register support

  < > /dev/cpu/*/cpuid - CPU information support

  Firmware Drivers ---&gt

  < > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)

  High Memory Support (4GB) ---&gt

  [ ] Allocate 3rd-level pagetables from highmem

  [ ] Math emulation

  [*] MTRR (Memory Type Range Register) support

  [ ] Boot from EFI support (EXPERIMENTAL)

  [*] Enable kernel irq balancing

  [ ] Use register arguments (EXPERIMENTAL)

  電源管理:

  Power management options (ACPI, APM) ---&gt

  [*] Power Management support

  [ ] Power Management Debug Support

  [ ] Software Suspend (EXPERIMENTAL)

  ACPI (Advanced Configuration and Power Interface) Support ---&gt

  APM (Advanced Power Management) BIOS Support ---&gt

  CPU Frequency scaling ---&gt

  ACPI (Advanced Configuration and Power Interface) Support ---&gt

  [*] ACPI Support

  這是一種電源管理方式,你可以看看你的BIOS是否支援。如果支援的話建議你選上這項

  [ ] Sleep States (EXPERIMENTAL)

  < > AC Adapter

  < > Battery

   Button 捕獲Power、Sleep、Lid(我也不知道這是什麼按鈕)等按鈕是否按下,並做相應的動作

   Video 整合在板上的顯示卡的ACPI支援,對有些板卡可能不起作用

  < > Fan

   Processor

   Thermal Zone

  < > ASUS/Medion Laptop Extras

  < > IBM ThinkPad Laptop Extras

  < > Toshiba Laptop Extras

  (0) Disable ACPI for systems before Jan 1st this year

  [ ] Debug Statements

  [*] Power Management Timer Support

  APM (Advanced Power Management) BIOS Support ---&gt

  < > APM (Advanced Power Management) BIOS support

  高階電源管理的支援,一般來說筆記本應該選上,桌上型電腦可以不選。

  [ ] Ignore USER SUSPEND

  [*] Enable PM at boot time

  [ ] Make CPU Idle calls when idle

  [ ] Enable console blanking using APM

  [ ] RTC stores time in GMT 按Unix的標準,硬體的時鐘應該設為格林威治時間

  [ ] Allow interrupts during APM BIOS calls

  [*] Use real mode APM BIOS call to power off

  [*] CPU Frequency scaling

  這一選項允許改變CPU的主頻,使CPU在低負荷或使用電池時降低主頻,達到省電的目的。

  [ ] Enable CPUfreq debugging

  < > /proc/cpufreq interface (deprecated)

  Default CPUFreq governor (performance) ---&gt

  --- 'performance' governor

   'powersave' governor

   'userspace' governor for userspace frequency scaling

  [ ] /proc/sys/cpu/ interface (2.4. / OLD)

   'ondemand' cpufreq policy governor自動調節主頻

   CPU frequency table helpers 多數的CPU需要這一項來調節主頻

   ACPI Processor P-States driver 報告處理器的狀態

  < > AMD Mobile K6-2/K6-3 PowerNow!

  < > AMD Mobile Athlon/Duron PowerNow!

  < > AMD Opteron/Athlon64 PowerNow!

  < > Cyrix MediaGX/NatSemi Geode Suspend Modulation

   Intel Enhanced SpeedStep Intel的變頻技術支援

  [ ] Use ACPI tables to decode valid frequency/voltage pairs

  --- Built-in tables for Banias CPUs

  < > Intel Speedstep on ICH-M chipsets (ioport interface)

  < > Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)

  < > Intel Pentium 4 clock modulation

  < > nVidia nForce2 FSB changing

  < > Transmeta LongRun

  < > VIA Cyrix III Longhaul

  --- shared options

  [ ] /proc/acpi/processor/../performance interface (deprecated)

  [ ] Relaxed speedstep capability checks

  匯流排型別:

  [*] PCI support

  PCI access mode (Any) ---&gt強列建議選Any,系統將優先使用MMConfig,然後使用BIOS,最後使用Direct檢測PCI裝置。

  [ ] Message Signaled Interrupts (MSI and MSI-X)

  [ ] Legacy /proc/pci interface

  [ ] PCI device name database

  [ ] ISA support

  [*] EISA support

  [*] Vesa Local Bus priming

  [*] Generic PCI/EISA bridge

  [*] EISA virtual root device

  [ ] EISA device name database

  [ ] MCA support

  < > NatSemi SCx200 support

  PCCARD (PCMCIA/CardBus) support ---&gt

  PCI Hotplug Support ---&gt

  PCCARD (PCMCIA/CardBus) support ---&gt一般只有膝上型電腦上才會有PCMCIA插槽,如果你是桌上型電腦的話,可以不選這一項,然後跳過這一部份。

  PCI Hotplug Support ---&gt

  < > Support for PCI Hotplug (EXPERIMENTAL)

  一般來講只有伺服器上會有熱插拔的裝置,如果你使用的是桌上型電腦,你可以不選擇此項並跳過這一部份。

  可執行檔案格式,

  [*] Kernel support for ELF binaries

  ELF是開放平臺下最常用的二進位制檔案,它支援不同的硬體平臺

  < > Kernel support for a.out and ECOFF binaries

   Kernel support for MISC binaries

  此選項允許插入二進位制的封裝層到核心中,當使用Java、.NET、Python、Lisp等語言編寫的程式時非常有用

  硬體裝置相當複雜,看得偶頭暈,大家針對自己的裝置慎重選擇(手邊最好準備一本漢英字典:)如果想使用adsl,記得網路部分除了TCP/IP協議還得把ppp部分編譯進核心,想當初偶就是把這個給忘了,鬱悶了許久。

  檔案系統,

   Second extended fs support

  [*] Ext2 extended attributes

  [*] Ext2 POSIX Access Control Lists

  [*] Ext2 Security Labels

   Ext3 journalling file system support

  [*] Ext3 extended attributes

  [*] Ext3 POSIX Access Control Lists

  [*] Ext3 Security Labels

  [ ] JBD (ext3) debugging support

   Reiserfs support

  [ ] Enable reiserfs debug mode

  [ ] Stats in /proc/fs/reiserfs

  [*] ReiserFS extended attributes

  [*] ReiserFS POSIX Access Control Lists

  [*] ReiserFS Security Labels

  JFS filesystem support

  [*] JFS POSIX Access Control Lists

  [ ] JFS debugging

  [ ] JFS statistics

  XFS filesystem support

  [*] Realtime support (EXPERIMENTAL)

  [*] Quota support

  [*] Security Label support

  [*] POSIX ACL support

  < > Minix fs support

  < > ROM file system support

  [*] Quota support

  < > Old quota format support

  Quota format v2 support

  [*] Dnotify support

  < > Kernel automounter support

  < > Kernel automounter version 4 support (also supports v3)

  CD-ROM/DVD Filesystems ---&gt

  DOS/FAT/NT Filesystems ---&gt

  Pseudo filesystems ---&gt

  Miscellaneous filesystems ---&gt

  Network File Systems ---&gt

  Partition Types ---&gt

  Native Language Support ---&gt

  Profiling support ---&gt

  Kernel hacking ---&gt

  Security options ---&gt

  Cryptographic options ---&gt

  Library routines ---&gt

  這個東東你要是搞不來就不要搞,預設的也可以的。先學習一下怎麼樣編譯核心,等成功了,有了經驗了在改也沒有事的!

  編譯核心:

  # cd /usr/src/linux

  # make dep -----連結程式程式碼與函式庫.

  # make clean -----刪除不必要的模組和檔案.

  # make bzImage -----開始編譯系統核心.

  # make modules -----開始編譯外掛模組.

  # make modules_install -----安裝編譯完成的模組.

  要好常時間的,我洗了一件衣服,抽了N根白沙之後,總算完成了,好激動呀!

  # su -

  # /sbin/depmod -a -----建立模組的連結.

  更換核心:

  # cd /boot -----切換到引導分割槽/boot.

  # rm System.map vmlinuz -----刪除舊的符號連結.

  # mv /usr/src/linux/System.map System.map

  # mv /usr/src/linux/arch/i386/boot/bzImage vmlinuz

  如果你用GRUB來管理開機,簡單點就是你裝了win還裝了linux就要修改/boot/grub下的menu.1st檔案:

  # vi /boot/grub/menu.1st

  鍵入i進入編輯模式:

  # grub.conf generated by anaconda

  #

  # Note that you do not have to rerun grub after making changes to this file

  # NOTICE: You do not have a /boot partition. This means that

  # all kernel and initrd paths are relative to /, eg.

  # root (hd0,1)

  # kernel /boot/vmlinuz-version ro root=/dev/hda2

  # initrd /boot/initrd-version.img

  #boot=/dev/hda

  default=1

  timeout=10

  splashimage=(hd0,1)/boot/grub/splash.xpm.gz

  title Fedora Core(2.6.11)

  root (hd0,1)

  kernel /boot/vmlinuz ro root=/dev/hda2 ---你的linux所在的分割槽

  title DOS

  rootnoverify (hd0,0)

  chainloader +1

  title Fedora Core(2.4.22)

  root (hd0,1)

  kernel /boot/vmlinuz-2.4.22-1.2115.nptl ro root=LABEL=/ hdd=ide-scsi rhgb

  initrd /boot/initrd-2.4.22-1.2115.nptl.img

  這樣還可以保留舊版本的核心以防編譯新核心失敗進不了系統

  重啟電腦,好了,進去了。網上說新核心速度好快的,我怎麼感覺快不了多少呢。無所謂了,反正是成功了。呵呵,我可是失敗了很多次才成功的。好高興,2點了,穿衣服去吃東西了。

  rpm沒法用了,怎麼辦?

  在/usr/lib/rpm/macros裡面尋找程式碼:

  %__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb

  修改成程式碼:

  %__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-940262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章