เคอร์เนลลินุกซ์ล่าสุด การสร้างเคอร์เนลใน Ubuntu คำแนะนำทีละขั้นตอน จะดาวน์โหลดเคอร์เนล Linux ได้ที่ไหน

ฉันต้องการเขียนบทความเกี่ยวกับวิธีสร้างเคอร์เนลลินุกซ์มานานแล้ว และตอนนี้ช่วงเวลานี้ได้มาถึงแล้ว

ที่จริงแล้วทำไมต้องสร้างเคอร์เนลหากการแจกจ่ายมีเคอร์เนลที่ใช้งานได้อย่างสมบูรณ์

ตัวอย่างเช่น เพื่อใช้ไดรเวอร์และโซลูชันล่าสุดที่มีให้ในเคอร์เนลใหม่ เมื่อเฉพาะสาขาเก่าเท่านั้นที่พร้อมใช้งานจากการแจกจ่าย ตัวอย่างเช่น เพื่อปรับแต่งให้เหมาะกับฮาร์ดแวร์ของคุณและเพิ่มความเร็วในการทำงานอีกเล็กน้อย ฉันสร้าง 3.11 สำหรับตัวเอง เพราะมันประกอบด้วยชุดของแพตช์ที่ช่วยปรับปรุงการทำงานร่วมกับการ์ดวิดีโอ ATI และฉันเป็นเจ้าของหนึ่งในนั้น

มีบทความมากมายที่เขียนเกี่ยวกับการประกอบเคอร์เนล ดังนั้นฉันจะไม่ลงรายละเอียด แต่จะเขียนเฉพาะวิธีที่ฉันประกอบเคอร์เนลสำหรับตัวเองเท่านั้น

ก่อนอื่น คุณต้องรับไฟล์เก็บถาวรด้วยซอร์สโค้ดของเคอร์เนล Linux เวอร์ชันที่ต้องการ

บนเว็บไซต์ https://www.kernel.org/ คุณสามารถดาวน์โหลดเวอร์ชันที่ต้องการได้ ฉันจะอธิบายกระบวนการสร้างและติดตั้งโดยใช้เวอร์ชัน 3.11.0 เป็นตัวอย่าง

ขอแนะนำให้สร้างเคอร์เนลในไดเร็กทอรีที่สร้างขึ้นเป็นพิเศษเพื่อจุดประสงค์นี้ภายใต้ผู้ใช้ที่ไม่มีสิทธิพิเศษ ฉันรวบรวมในโฟลเดอร์ ~src/linux/linux-version

ก่อนคอมไพล์ คุณควรตรวจสอบให้แน่ใจว่าได้ติดตั้งการพึ่งพาทั้งหมดที่จำเป็นสำหรับการสร้างและมีพื้นที่ว่างประมาณ 3GB ในไดเร็กทอรีการคอมไพล์

นี่คือรายการแพ็คเกจที่จะคอมไพล์สำเร็จ (สำหรับ Debian/Ubuntu):

gcc, ทำ- เครื่องมือประกอบและเชื่อมโยงที่จำเป็น ควรใช้ gcc เวอร์ชันล่าสุดเวอร์ชันใดเวอร์ชันหนึ่ง

libncurses5-dev- จำเป็นสำหรับ menuconfig ในการทำงาน

ccache- ช่วยให้คุณเร่งการประกอบใหม่

หากคุณต้องการใช้ตัวกำหนดค่าเคอร์เนลแบบกราฟิก คุณควรติดตั้งแพ็คเกจสำหรับการพัฒนา QT ด้วย เช่น libqt4-dev, g++, pkg-config.

Lzop, lz4c- หากคุณสนใจเคอร์เนลอื่นและกลไกการบีบอัด initramfs

ไดเร็กทอรีปัจจุบันจะถือว่าเป็นไดเร็กทอรีของเคอร์เนลที่คลายการแพ็ก

หลังจากเตรียมสภาพแวดล้อมสำหรับบิลด์แล้ว คอนฟิกูเรชันเคอร์เนลจะต้องถูกสร้างขึ้น การกำหนดค่าปัจจุบันสามารถดูได้ดังนี้:

Cat /boot/config-`uname -r`

Zcat /proc/config.gz

โดยหลักการแล้ว คุณสามารถใช้การกำหนดค่าปัจจุบันโดยแก้ไขในหนึ่งในโปรแกรมกำหนดค่า คัดลอกไปยังไดเร็กทอรีที่แตกไฟล์เก็บถาวรด้วยเคอร์เนลและเปลี่ยนชื่อเป็น .config

cp /boot/config-`uname -r` .config

ฉันชอบ xconfig ฉันคิดว่ามันสะดวกที่สุด

ทำ xconfig

คัดลอกก่อนหน้านี้โหลดโดยอัตโนมัติ .configซึ่งทำหน้าที่เป็นฐานของเราสำหรับการกำหนดค่า มีเคล็ดลับมากมายในการตั้งค่าเคอร์เนล ฉันแค่แนะนำให้เลือกเวอร์ชันโปรเซสเซอร์ ปิดการใช้งานไดรเวอร์ฮาร์ดแวร์ที่ไม่มีอยู่ คุณยังสามารถเลือกโมดูลเพิ่มเติม เช่น zram และอัลกอริธึมการบีบอัด ฉันเลือก lz4 ให้เร็วที่สุด

หลังจากบันทึกการกำหนดค่าแล้ว คุณสามารถเริ่มการคอมไพล์ได้

หากคุณขี้เกียจเกินกว่าจะกำหนดค่าเคอร์เนลด้วยตนเอง เป็นไปได้ที่จะกำหนดค่าอัตโนมัติโดยใช้ข้อมูลเกี่ยวกับโมดูลที่โหลด: make localmodconfig

ตอนนี้ขั้นตอนหลักที่สองคือการคอมไพล์เคอร์เนลและโมดูล ดำเนินการในคำสั่งเดียว:

สร้าง -j4 CC="ccache gcc" bzImage โมดูล

ที่ไหน -j4สอดคล้องกับจำนวนคอร์โปรเซสเซอร์ในการกำหนดค่าของคุณ

การรวบรวมจะใช้เวลาไม่นานหากฮาร์ดแวร์มีประสิทธิภาพเพียงพอและไม่ได้ใช้การกำหนดค่าเคอร์เนลการแจกจ่าย บนแล็ปท็อปของฉันที่มีโปรเซสเซอร์ AMD Phenom P820 และ RAM หกกิกะไบต์ การรวบรวมใช้เวลาประมาณครึ่งชั่วโมง

ขั้นตอนสุดท้ายคือการติดตั้งเคอร์เนลและโมดูล

Sudo sed -i.bak "s/MODULES=most/MODULES=dep/" /etc/initramfs-tools/initramfs.conf

นี่เป็นสิ่งจำเป็นเพื่อลดขนาดของไฟล์ initrd โดยรวมเฉพาะโมดูลที่จำเป็นสำหรับการโหลดเท่านั้น

การติดตั้งสามารถทำได้ด้วยคำสั่งเดียว:

sudo สร้าง modules_install ติดตั้ง

หรือติดตั้งทุกอย่างด้วยตนเอง โมดูลก่อน

sudo สร้าง modules_install

แล้วแกนหลัก

Version=`awk "NR<=3 {printf "%s.",$NF}" < Makefile | sed "s/\.$//"`

นี่คือวิธีที่เราได้รับเวอร์ชันเคอร์เนลจาก Makefile

sudo cp arch/`uname -m`/boot/bzImage /boot/vmlinuz-$version sudo cp .config /boot/config-$version sudo cp System.map /boot/System.map-$version sudo update-initramfs - c -k $ version sudo update-grub

สุดท้ายนี้ ฉันกำลังแนบสคริปต์เพื่อทำให้กระบวนการเป็นไปโดยอัตโนมัติ

ในระหว่างการกำหนดค่า config เขาสามารถถามคำถามสองสามข้อ หากต้องการตอบโดยค่าเริ่มต้น คุณเพียงแค่กด Enter

รวบรวมความสุข

ทำไมบางคนถึงต้องการคอมไพล์เคอร์เนลใหม่? มักไม่จำเป็นเนื่องจากเคอร์เนลเริ่มต้นที่มาพร้อมกับ Debian จะจัดการกับการกำหนดค่าส่วนใหญ่ นอกจากนี้ Debian มักเสนอเมล็ดทางเลือกหลายอย่าง ดังนั้น คุณอาจต้องตรวจสอบก่อนว่ามีแพ็คเกจอิมเมจเคอร์เนลอื่นที่สอดคล้องกับฮาร์ดแวร์ของคุณหรือไม่ อย่างไรก็ตาม การคอมไพล์เคอร์เนลใหม่อาจมีประโยชน์เพื่อ:

อย่ากลัวที่จะลองรวบรวมเคอร์เนล มันสนุกและได้กำไร

ในการคอมไพล์เคอร์เนลด้วยวิธี Debian คุณต้องมีแพ็คเกจบางตัว: และบางตัวที่น่าจะติดตั้งไว้แล้ว (ดูรายการทั้งหมด)

เมธอดนี้จะสร้าง .deb ของแหล่งเคอร์เนลของคุณ และถ้าคุณมีโมดูลที่ไม่ได้มาตรฐาน ให้สร้าง .deb ที่ขึ้นต่อกันที่ซิงโครไนซ์ด้วย เป็นวิธีที่ดีกว่าในการจัดการภาพเคอร์เนล จะเก็บเคอร์เนล System.map และบันทึกของไฟล์กำหนดค่าที่ใช้งานอยู่สำหรับบิลด์

โปรดทราบว่าคุณไม่ มีเพื่อรวบรวมเคอร์เนลของคุณ "วิธีเดเบียน"; แต่เราพบว่าการใช้ระบบบรรจุภัณฑ์เพื่อจัดการเคอร์เนลของคุณนั้นปลอดภัยและง่ายกว่าจริง ๆ ที่จริงแล้ว คุณสามารถรับแหล่งที่มาของเคอร์เนลได้จาก Linus แทน แต่ยังคงใช้วิธีการรวบรวม

โปรดทราบว่าคุณจะพบเอกสารทั้งหมดเกี่ยวกับการใช้ภายใต้ . ส่วนนี้ประกอบด้วยบทช่วยสอนสั้น ๆ

ต่อจากนี้ไป เราจะถือว่าคุณมีบังเหียนบนเครื่องของคุณและจะแยกแหล่งเคอร์เนลของคุณไปที่ใดที่หนึ่งในโฮมไดเร็กตอรี่ของคุณ เราจะถือว่าเวอร์ชันเคอร์เนลของคุณคือ 3.16 ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเร็กทอรีที่คุณต้องการแตกไฟล์ที่มาเคอร์เนล แตกไฟล์โดยใช้และเปลี่ยนเป็นไดเร็กทอรีที่จะสร้างขึ้น

ตอนนี้คุณสามารถกำหนดค่าเคอร์เนลของคุณได้ เรียกใช้หากมีการติดตั้ง กำหนดค่า และรัน X11 เรียกใช้อย่างอื่น (คุณจะต้องติดตั้ง) ใช้เวลาในการอ่านความช่วยเหลือออนไลน์และเลือกอย่างระมัดระวัง หากไม่แน่ใจ โดยทั่วไปแล้วจะดีกว่าที่จะรวมไดรเวอร์อุปกรณ์ (ซอฟต์แวร์ที่จัดการอุปกรณ์ต่อพ่วงฮาร์ดแวร์ เช่น การ์ดอีเทอร์เน็ต ตัวควบคุม SCSI และอื่นๆ) ที่คุณไม่แน่ใจ ระวัง: ตัวเลือกอื่นๆ ที่ไม่เกี่ยวข้องกับฮาร์ดแวร์เฉพาะ ควรปล่อยให้เป็นค่าเริ่มต้นหากคุณไม่เข้าใจ อย่าลืมเลือก "ตัวโหลดโมดูลเคอร์เนล" ใน "การสนับสนุนโมดูลที่โหลดได้" (ไม่ได้เลือกไว้โดยค่าเริ่มต้น) หากไม่รวมอยู่ในนี้ การติดตั้ง Debian ของคุณจะประสบปัญหา

ทำความสะอาดแผนผังต้นทางและรีเซ็ตพารามิเตอร์ ที่จะทำอย่างนั้น

ตอนนี้รวบรวมเคอร์เนล: . หมายเลขเวอร์ชันของ "1.0" สามารถเปลี่ยนแปลงได้ตามต้องการ นี่เป็นเพียงหมายเลขเวอร์ชันที่คุณจะใช้เพื่อติดตามการสร้างเคอร์เนลของคุณ ในทำนองเดียวกัน คุณสามารถใส่คำใดก็ได้ที่คุณชอบแทน "กำหนดเอง" (เช่น ชื่อโฮสต์) การคอมไพล์เคอร์เนลอาจใช้เวลานาน ขึ้นอยู่กับพลังของเครื่องของคุณ

เมื่อคอมไพล์เสร็จแล้ว คุณสามารถติดตั้งเคอร์เนลแบบกำหนดเองได้เหมือนกับแพ็คเกจอื่นๆ ในฐานะที่เป็น root ให้ทำ . ส่วนนี้เป็นสถาปัตยกรรมย่อยที่เป็นทางเลือก ขึ้นอยู่กับตัวเลือกเคอร์เนลที่คุณตั้งค่า จะติดตั้งเคอร์เนลพร้อมกับไฟล์สนับสนุนที่ดีอื่น ๆ ตัวอย่างเช่น จะถูกติดตั้งอย่างถูกต้อง (มีประโยชน์สำหรับการดีบักปัญหาเคอร์เนล) และจะถูกติดตั้งโดยมีชุดการกำหนดค่าปัจจุบันของคุณ แพ็คเกจเคอร์เนลใหม่ของคุณยังฉลาดพอที่จะอัปเดตตัวโหลดการบูตของคุณโดยอัตโนมัติเพื่อใช้เคอร์เนลใหม่ หากคุณสร้างแพ็คเกจโมดูล คุณจะต้องติดตั้งแพ็คเกจนั้นด้วย

ถึงเวลาที่จะรีบูตระบบ: อ่านคำเตือนที่ขั้นตอนด้านบนนี้อาจเกิดขึ้นอย่างระมัดระวัง จากนั้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Debian kernels และการรวบรวมเคอร์เนล โปรดดูที่ Debian Linux Kernel Handbook สำหรับข้อมูลเพิ่มเติม โปรดอ่านเอกสารประกอบอย่างละเอียดใน

หากคุณจำได้ ไม่นานมานี้เราได้เรียนรู้วิธีการสร้างเคอร์เนล FreeBSD จากแหล่งที่มา คำถามคือ ทำไมไม่เรียนรู้ที่จะทำเช่นเดียวกันกับเคอร์เนล Linux? สาเหตุของการสร้างเคอร์เนลลินุกซ์จากแหล่งที่มาโดยทั่วไปก็เช่นเดียวกัน - รับเคอร์เนลเวอร์ชันล่าสุด, ใช้แพตช์ความปลอดภัยอย่างเร่งด่วน, เพิ่มประสิทธิภาพสำหรับงานเฉพาะและฮาร์ดแวร์เฉพาะ และความปรารถนาที่จะมีส่วนร่วมในการพัฒนาเคอร์เนลด้วย ในบทบาทของ QA

สิ่งสำคัญ!การปฏิบัติตามคำแนะนำในโพสต์นี้อาจส่งผลให้ข้อมูลของคุณสูญหาย สำรองข้อมูลและจำไว้ว่าคุณต้องทำทุกอย่างด้วยความเสี่ยงและอันตรายของคุณเอง ทุกอย่างที่อธิบายไว้ด้านล่างได้รับการทดสอบบน Ubuntu 14.04 LTS แล้ว แต่สำหรับ Ubuntu เวอร์ชันอื่น เช่นเดียวกับลีนุกซ์รุ่นอื่นๆ ความแตกต่างควรน้อยที่สุด

การตั้งค่า bootloader

แก้ไข /etc/default/grub ดังนี้:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=จริง
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i-s2>/dev/null ||echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="สาดน้ำเงียบ"
GRUB_CMDLINE_LINUX=""

หลังจากแก้ไขเราพูดว่า:

sudo update-grub

ดังนั้น ก่อนบูตระบบ คุณจะได้รับแจ้งเป็นเวลา 10 วินาทีเพื่อเลือกเคอร์เนลที่คุณต้องการบูต มีประโยชน์มากถ้าคุณทำผิดพลาดกับการกำหนดค่าเคอร์เนลของคุณและต้องการบูตด้วยเวอร์ชันก่อนหน้า!

ติดตั้งการพึ่งพา

เราจะต้องมีแพ็คเกจต่อไปนี้เป็นอย่างน้อย:

sudoapt-get installgitgccmakebc fakeroot dpkg-dev\
libncurses5-dev libssl-dev

อย่างไรก็ตาม ในหลายระบบ ทุกระบบจะมีอยู่แล้ว

รับแหล่งที่มา

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar-xz-xvf linux-4.6.4.tar.xz
cd linux-4.6.4

หรือหากต้องการข้อมูลล่าสุด คุณสามารถคว้าแหล่งที่มาได้โดยตรงจาก Git:

# มิเรอร์: https://github.com/torvalds/linux
git clone'git://git.kernel.org/pub/scm/linux/kernel/git/'\
'torvalds/linux.git'
cd linux

เมื่อพิจารณาจากข้อเท็จจริงที่ว่าฉันหาแท็ก v4.6.4 ใน Git ไม่พบ ลินุกซ์เคอร์เนลรีลีสนั้นถูกสร้างขึ้นมาในรูปแบบของไฟล์บีบอัด tar archives เท่านั้น

หากคุณต้องการสร้างเคอร์เนลที่มีแพตช์จาก Canonical แทนที่จะเป็นเคอร์เนลวานิลลา:

โคลน git git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-trusty
แท็ก git|less
git checkout Ubuntu-lts-4.4.0-31.50_14.04.1

จากประสบการณ์ของฉันเอง ถ้าคุณใช้ Ubuntu คุณสามารถใช้วานิลลาเคอร์เนลได้อย่างปลอดภัย ไม่น่าเป็นไปได้ที่คุณจะมีปัญหากับมัน

บันทึก:ที่น่าสนใจสำหรับลีนุกซ์รุ่นยอดนิยมที่มีอยู่ มีเพียง Gentoo, Slackware และ Arch Linux เท่านั้นที่ดูเหมือนจะใช้เคอร์เนลโดยไม่มีแพตช์ของตัวเอง

อย่างไรก็ตาม ตอนนี้คุณมีซอร์สโค้ดแล้ว

การคอมไพล์และติดตั้งเคอร์เนล

เลือกตัวเลือกที่จะสร้างเคอร์เนล:

หากจำเป็น ให้เปลี่ยนการตั้งค่า คลิกบันทึก จากนั้นออก เป็นผลให้ไฟล์ที่มีพารามิเตอร์ที่เราเลือกจะถูกสร้างขึ้น

ที่ อัปเดตเคอร์เนล (คุณใช้เคอร์เนลบางประเภทอยู่แล้วหรือไม่) สะดวกในการกำหนดค่าเคอร์เนลปัจจุบันและตั้งค่าตัวเลือกใหม่เป็นค่าเริ่มต้น:

zcat/proc/config.gz > ./.config
ทำให้ olddefconfig

ในที่สุด เรารวบรวม:

make-j4 bindeb-pkg LOCALVERSION=-กำหนดเอง

แกนถูกประกอบขึ้นเป็นเวลานาน บนแล็ปท็อปของฉัน การประกอบใช้เวลา 1 ชั่วโมง 15 นาที อย่างไรก็ตาม จากนี้ไป เกี่ยวกับส่วนที่เหลือใช้ในการสร้างแพ็คเกจเคอร์เนลขนาดยักษ์พร้อมสัญลักษณ์การดีบัก

การสร้างและกำหนดค่าเคอร์เนลลินุกซ์ด้วยตนเอง

แอสเซมบลีของแพ็คเกจนี้สามารถปิดใช้งานได้โดยการแสดงความคิดเห็นพารามิเตอร์ CONFIG_DEBUG_INFO ในการกำหนดค่า โปรดทราบว่า SystemTap และเครื่องมือที่มีประโยชน์อื่นๆ จำเป็นต้องใช้แพ็คเกจนี้

นอกจากตัวเคอร์เนลเองแล้ว คุณยังสามารถรวบรวมเอกสารประกอบ:

# นอกจากนี้ยังมี `make pdfdocs` และอื่น ๆ โปรดดูที่ `make help`
ทำ htmldocs
เอกสารคู่มือเบราว์เซอร์โครเมียม/DocBook/index.html

เมื่อประกอบเสร็จ บริษัท ย่อยไดเรกทอรีที่เราเห็นบางอย่างเช่น:

ลินุกซ์-เฟิร์มแวร์-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

เราใส่แพ็คเกจ deb ทั้งหมดยกเว้นเคอร์เนลเวอร์ชัน dbg กับเคอร์เนลปกติและรีบูต หลังจากรีบูต เราจะดูผลลัพธ์ของคำสั่ง เราตรวจสอบให้แน่ใจว่าเราทำการบูทด้วยเคอร์เนลใหม่จริงๆ หากมีบางอย่างผิดปกติกับเคอร์เนลใหม่ ใน bootloader เราเพียงแค่เลือกอันที่ระบบเคยบูทมาก่อน หลังจากบูทด้วยเคอร์เนลเก่า เราจะลบแพ็คเกจของเคอร์เนลใหม่อย่างรวดเร็ว และ voila - ระบบกลับสู่สถานะก่อนหน้า

นอกจากนี้ หลังจากโหลดเคอร์เนลใหม่แล้ว คุณสามารถรันการทดสอบได้:

sudomake kselftest
sudomake kselftest-clean

ขอแสดงความยินดี ตอนนี้คุณรู้วิธีสร้างเคอร์เนล Linux แล้ว!

บทสรุป

วัสดุภายในของเคอร์เนล Linux:

  • KernelNewbies.org ซึ่งเป็นไซต์สำหรับมือใหม่ในเคอร์เนล Linux ที่มีรายชื่อส่งเมล ช่อง IRC ฟอรัม วิกิ และอีกมากมาย
  • LKML.org ไซต์สำหรับอ่านรายชื่อส่งเมลของนักพัฒนาเคอร์เนล Linux ผ่านเบราว์เซอร์ได้อย่างสะดวกสบาย ระวัง มันมักจะเสียการจัดรูปแบบของตัวอักษร! ในแง่นี้ การเก็บถาวรรายชื่อผู้รับจดหมายที่ marc.info จะดีกว่ามาก
  • การอ้างอิงโยงลินุกซ์ ไซต์สำหรับการอ่านโค้ดเคอร์เนลของลินุกซ์อย่างสะดวกสบายผ่านเบราว์เซอร์
  • หนังสือการพัฒนาเคอร์เนลลินุกซ์ ฉบับที่ 3 เป็นหนังสือเล่มล่าสุดบนเคอร์เนลลินุกซ์ในภาษาอังกฤษ (2010, เคอร์เนล 2.6.x) มีการแปลเป็นภาษารัสเซีย;
  • หนังสือ Linux-Treiber entwickeln รุ่นที่ 4 เป็นหนังสือที่ใหม่กว่า (2015, kernel 4.x) แต่เขียนเป็นภาษาเยอรมันและไม่มีการแปล
  • หนังสือ Linux Insides ฟรีโดย Alexander Kuleshov a.k.a @0xAX ดูเหมือนจะเข้าถึงได้ง่ายและเป็นปัจจุบันที่สุด แต่ยังอยู่ระหว่างการเขียน
  • บางครั้งคุณสามารถค้นหาสิ่งที่มีประโยชน์ในเอกสารคู่มือ Linux Kernel HTML ซึ่งเป็นเอกสารอย่างเป็นทางการจากแหล่งเคอร์เนลของ Linux
  • ตัวอย่างหนังสือ Linux Device Drivers รุ่นที่ 3 ที่พยายามอัพเดทให้ทันสมัย ​​รวมถึงแหล่งข้อมูลสำหรับฉบับที่ 4 ซึ่งกำลังเขียนอยู่

คุณสร้างเคอร์เนลจากแหล่งที่มาหรือไม่ และถ้าเป็นเช่นนั้น เพราะอะไร 🙂

ส่วนที่เพิ่มเข้าไป:คุณอาจสนใจบทความ The Scandalous Truth About Debugging Kernel Code บน Linux

แท็ก: ลินุกซ์, Ring0.

รวบรวมเคอร์เนล linux


หลายคนคิดว่ามันเสียเวลาเปล่า ๆ เพื่อแสดงตัวเองว่าเป็น "Linuxoid" ที่ชาญฉลาดและล้ำสมัย อันที่จริง การคอมไพล์เคอร์เนลเป็นสิ่งสำคัญมาก สมมติว่าคุณซื้อแล็ปท็อปเครื่องใหม่ที่ไม่มีเว็บแคมที่ใช้งานได้ การกระทำของคุณ? คุณตรวจสอบเครื่องมือค้นหาและค้นหาวิธีแก้ไขปัญหาในปัญหานี้ บ่อยครั้งอาจกลายเป็นว่าเว็บแคมของคุณใช้เคอร์เนลเวอร์ชันใหม่กว่าที่คุณมี หากคุณไม่ทราบว่าคุณมีเวอร์ชันใด ให้พิมพ์ uname -r ในเทอร์มินัล คุณจะได้เวอร์ชันเคอร์เนล (เช่น linux-2.6.31-10) นอกจากนี้ การคอมไพล์เคอร์เนลยังใช้กันอย่างแพร่หลายเพื่อเพิ่มประสิทธิภาพ: ความจริงก็คือการแจกแจงเคอร์เนลถูกคอมไพล์ "สำหรับทุกคน" ตามค่าเริ่มต้น ด้วยเหตุนี้จึงมีไดรเวอร์จำนวนมากที่คุณอาจไม่ต้องการ ดังนั้น หากคุณรู้จักฮาร์ดแวร์ของคุณดี คุณสามารถปิดใช้งานไดรเวอร์ที่ไม่จำเป็นได้ในขั้นตอนการกำหนดค่า นอกจากนี้ยังสามารถเปิดใช้งานการรองรับ RAM มากกว่า 4 กิกะไบต์โดยไม่ต้องเปลี่ยนความลึกบิตของระบบ

จะสร้างเคอร์เนล linux ได้อย่างไร? การสร้างเคอร์เนลลินุกซ์

ดังนั้น หากคุณยังคงต้องมีเคอร์เนลเป็นของตัวเอง มาเริ่มการคอมไพล์กันเลย!


สิ่งแรกที่ต้องทำคือรับซอร์สโค้ดสำหรับเวอร์ชันเคอร์เนลที่ต้องการ โดยปกติคุณจะต้องได้รับเวอร์ชันเสถียรใหม่ล่าสุด เวอร์ชันเคอร์เนลอย่างเป็นทางการทั้งหมดมีอยู่ที่ kernel.org

หากคุณมีเซิร์ฟเวอร์ X (คอมพิวเตอร์ที่บ้าน) ติดตั้งอยู่แล้ว คุณสามารถไปที่ไซต์ในเบราว์เซอร์ที่คุณชื่นชอบและดาวน์โหลดเวอร์ชันที่ต้องการในไฟล์ tar.gz (บีบอัด gzip) หากคุณกำลังทำงานในคอนโซล (เช่น คุณยังไม่ได้ติดตั้งเซิร์ฟเวอร์ X หรือกำลังกำหนดค่าเซิร์ฟเวอร์) คุณสามารถใช้เบราว์เซอร์ข้อความ (เช่น elinks)

คุณยังสามารถใช้ตัวจัดการการดาวน์โหลด wget มาตรฐาน:


tar -zxvf path_to_archive

การกำหนดค่าเคอร์เนล

การรวบรวม
ทำ && ทำการติดตั้ง
เรารอจาก 20 นาทีถึงหลายชั่วโมง (ขึ้นอยู่กับพลังของคอมพิวเตอร์) ติดตั้งเคอร์เนลแล้ว หากต้องการให้ปรากฏในรายการด้วง (2) ให้พิมพ์ (ในฐานะรูท)
update-grub


ที่เก็บบทความ:
พฤษภาคม 2017
มีนาคม 2017
เมษายน 2016
มีนาคม 2559
ตุลาคม 2013
กันยายน 2556
พฤษภาคม 2013
มีนาคม 2556
พฤศจิกายน 2555
กรกฎาคม 2555
มิถุนายน 2555
เมษายน 2555
มีนาคม 2555
กุมภาพันธ์ 2555
เมษายน 2011
มีนาคม 2554
กุมภาพันธ์ 2011
มกราคม 2011
ธันวาคม 2010
พฤศจิกายน 2010
ตุลาคม 2010
กันยายน 2010
สิงหาคม 2010
กรกฎาคม 2010
มิถุนายน 2010
พฤษภาคม 2010
เมษายน 2010
มีนาคม 2010

สุ่ม:

ท้องฟ้าจำลอง Stellarium: ภาพรวมของคุณสมบัติใหม่

BOINC: การคำนวณเพื่อวิทยาศาสตร์

Gambas: การพัฒนาพื้นฐานบน linux

ไดอะแกรมอนุกรม SSH 2.0

Linuxnow.ru: แผนสำหรับอนาคต

ทันใดนั้นเนื้อที่ว่างบนดิสก์หมด? บางทีปัญหาอาจอยู่ในบันทึก

เพื่อนร่วมงาน: ทั้งหมด
ลินุกซ์สำหรับทุกคน

แบนเนอร์ของเรา:


ตั้งแบนเนอร์

การกำหนดค่าเคอร์เนลลินุกซ์

กำลังตรวจสอบแพ็คเกจต้นทาง

การคอมไพล์เคอร์เนลใหม่ต้องมีแหล่งที่มา

บล็อกเกี่ยวกับการดูแลระบบ บทความเกี่ยวกับ Linux, Windows, NetApp storage และ virtualization

Red Hat วางแหล่งเคอร์เนลไว้ในแพ็คเกจ rpm เดียว แต่ไม่ได้ติดตั้งตามค่าเริ่มต้น ชื่อของแพ็คเกจนี้:

kernel-source-2.4.2-2.1386.rpm

นอกจากซอร์สโค้ดแล้ว ในการคอมไพล์เคอร์เนลใหม่ คุณต้องมีคอมไพเลอร์ที่ประกอบด้วยสององค์ประกอบ:

ทำประโยชน์;

คอมไพเลอร์ของภาษา C เองคือ gcc หรือ egcs

การสร้างสำเนาสำรองของเคอร์เนลปัจจุบันดำเนินการในสามขั้นตอน:

1. การสร้างสำเนาสำรองของแหล่งเคอร์เนล ซึ่งช่วยให้คุณสามารถกู้คืนได้หากการกำหนดค่าเสียหาย

2. การสร้างสำเนาสำรองของเคอร์เนลเองซึ่งเป็นวิธีการเรียกใช้งานระบบที่รู้จัก

3. การสร้างรายการใหม่สำหรับตัวโหลดระบบปฏิบัติการ ซึ่งสามารถใช้เพื่อบูตจากการสำรองข้อมูลเคอร์เนล

การสร้างการสำรองข้อมูลต้นทางทำได้โดยการคัดลอกไดเร็กทอรีต้นทางเคอร์เนลไปยังดิสก์ การกู้คืนทำได้โดยการคัดลอกไปในทิศทางตรงกันข้าม

เมื่อเคอร์เนลถูกคอมไพล์ใหม่ เคอร์เนลเก่าจะถูกเขียนไปยังไฟล์ที่มีนามสกุล .old อย่างไรก็ตาม สำเนาของเคอร์เนลนี้ยังไม่สามารถนำมาใช้ในการบูตระบบได้ สิ่งนี้อธิบายความจำเป็นในการดำเนินการข้างต้น

ตัวโหลดระบบปฏิบัติการประเภท LILO ซึ่งใช้กันทั่วไปในการบูต Linux ได้รับการกำหนดค่าโดยการตั้งค่าลิงก์ไปยังไฟล์เคอร์เนลในระบบไฟล์รูท

หลังจากสำรองข้อมูลเคอร์เนลแล้ว คุณต้องเพิ่มรายการอื่นในไฟล์ /etc/lilo.conf เพื่อให้คุณสามารถเริ่ม Linux ด้วยเคอร์เนลเก่าได้:

เปิดไฟล์ /etc/lilo. conf ในโปรแกรมแก้ไขข้อความ

สร้างสำเนาของพาร์ติชันทั้งหมด

เปลี่ยนสองตำแหน่งในสำเนา:

แทนที่ชื่อไฟล์เคอร์เนลด้วยชื่อของสำเนาสำรอง (พร้อมกับนามสกุล)

แทนที่ป้ายกำกับพาร์ติชั่นด้วยบางอย่างเช่น linux ดั้งเดิม (Linux ดั้งเดิม) หรือ linux-previous (Linux เก่า)

บรรทัดที่ขึ้นต้นด้วย initrd ควรแทนที่ด้วยทางเลือกที่เหมาะสม เช่น initrd-2 .4.2-2 ต้นทาง อิมเมจ;

เขียนการเปลี่ยนแปลงใน /etc/lilo.js คอนเฟิร์ม

ป้อนคำสั่ง /sbin/lilo เพื่อป้อนรายการใหม่ใน bootloader เมื่อคุณรันคำสั่ง lilo ป้ายกำกับของอิมเมจที่ป้อนลงในบูตโหลดเดอร์ของระบบปฏิบัติการจะแสดงบนหน้าจอ

ในครั้งถัดไปที่ระบบถูกรีบูต ID เคอร์เนลใหม่จะแสดงในคำแนะนำเครื่องมือตัวโหลดการบูต LILO

การกำหนดค่าเคอร์เนลใหม่

การกำหนดค่าจะกำหนดคุณลักษณะที่จะรวมไว้ในเคอร์เนล ซึ่งจะไม่รวม และอื่นๆ คุณสามารถเลือกระหว่างการกำหนดค่าเคอร์เนลเก่าและการติดตั้ง/การกำหนดค่าใหม่ ตัวอย่างเช่น การใช้ Red Hat Linux 7.1 คุณสามารถกำหนดค่าเคอร์เนล 2.4.2 ที่มีอยู่ใหม่ด้วยตัวเลือกใหม่ คุณยังสามารถดาวน์โหลดและติดตั้งเคอร์เนล 2.4.4 ใหม่ได้ แม้ว่ารายละเอียดการกำหนดค่าจะแตกต่างกันในทั้งสองกรณี แต่ยูทิลิตี้ที่ใช้และวิธีการกำหนดค่าเองก็เหมือนกัน

Linux มียูทิลิตีคอนฟิกูเรชันสามแบบแยกกัน แต่ละยูทิลิตีมีลักษณะเฉพาะของตัวเอง

ยูทิลิตี้ที่มีอินเตอร์เฟสบรรทัดคำสั่ง ผู้ใช้จะตอบคำถามเกี่ยวกับคุณลักษณะที่ต้องรวมอยู่ในเคอร์เนลอย่างสม่ำเสมอ ยูทิลิตีนี้มีประโยชน์สำหรับผู้ที่รู้วิธีทำงานกับเคอร์เนล และสำหรับผู้ที่มีสคริปต์การกำหนดค่าสำหรับยูทิลิตีนี้

ยูทิลิตี้พร้อมเมนูโหมดข้อความ เมนูหลายระดับของยูทิลิตี้นี้ช่วยให้คุณตั้งค่าและติดตั้งพารามิเตอร์เคอร์เนลใหม่ตามลำดับใดก็ได้

ยูทิลิตี้ GUI นี่เป็นยูทิลิตี้ที่น่าดึงดูดที่สุด แต่มันทำงานบนระบบ X Window แบบกราฟิกเท่านั้น

ยูทิลิตีที่แสดงรายการจะสร้างไฟล์คอนฟิกูเรชันเดียวกับที่ใช้โดยยูทิลิตี make เมื่อคอมไพล์เคอร์เนลทั้งหมดหรือบางส่วน

ตัวเลือกเคอร์เนล

เมื่อตรวจสอบการตั้งค่าในโปรแกรมกำหนดค่าใดๆ (บรรทัดคำสั่ง แบบข้อความ หรือ GUI) คุณต้องมีความชัดเจนเกี่ยวกับผลกระทบที่การตั้งค่าเหล่านี้มีต่อการทำงานของเคอร์เนล

การระบุพารามิเตอร์ในแต่ละโปรแกรมจะแตกต่างกัน แต่ในทั้งสามชุดจะมีการนำเสนอชุดเดียวกัน พารามิเตอร์แบ่งออกเป็นสองกลุ่มหลัก:

โมดูลาร์;

ไม่ใช่โมดูลาร์

หากบล็อกโปรแกรมที่สอดคล้องกับพารามิเตอร์นี้ไม่ได้โหลดเป็นโมดูลเคอร์เนล อาจเป็นหนึ่งในสองสิ่งต่อไปนี้:

[*] ส่วนสำคัญของเคอร์เนล;

ส่วนสำคัญของเคอร์เนล

อักขระในวงเล็บเหลี่ยม (พร้อมวงเล็บ) สอดคล้องกับป้ายกำกับตัวเลือกในเมนูโปรแกรมการกำหนดค่า (ยกเว้นยูทิลิตี้บรรทัดคำสั่ง)

สำหรับพารามิเตอร์โมดูลาร์ มีสามตัวเลือกสำหรับการตั้งค่า (ตามการแสดงในเมนูยูทิลิตี้การกำหนดค่า):

<>ไม่รวมอยู่ในเคอร์เนลและไม่ได้สร้างเป็นโมดูลที่สามารถโหลดได้ในภายหลัง:

<*>รวมอยู่ในเคอร์เนล ดังนั้นจึงไม่จำเป็นต้องโหลดในภายหลังเป็นโมดูล:

<М>รวมเป็นโมดูล แต่ไม่เป็นส่วนหนึ่งของเคอร์เนล บล็อกสามารถติดตั้งหรือลบออกจากเคอร์เนลได้ตลอดเวลา

บางครั้งค่าของพารามิเตอร์ไม่สามารถเปลี่ยนแปลงได้จนกว่าจะตั้งค่าพารามิเตอร์อื่น ตัวอย่างเช่น คุณสามารถติดตั้งการสนับสนุนสำหรับอุปกรณ์ SCSI เฉพาะหลังจากเปิดใช้งานการสนับสนุนสำหรับอุปกรณ์เหล่านั้นโดยทั่วไปแล้วเท่านั้น

เมื่อมีการติดตั้งเครื่องมือที่จำเป็น (ยูทิลิตี make และคอมไพเลอร์ gcc) และข้อความต้นทางบนระบบ คุณสามารถเรียกใช้ยูทิลิตี้การกำหนดค่าตัวใดตัวหนึ่งและเริ่มกำหนดค่าเคอร์เนลได้

GUI Configurator

การเปิดใช้ยูทิลิตีการกำหนดค่าด้วยอินเทอร์เฟซแบบกราฟิกจะดำเนินการตามลำดับต่อไปนี้

เปิดใช้ระบบ X Windows (พร้อมสภาพแวดล้อมแบบกราฟิกและเดสก์ท็อป)

เปิดหน้าต่างเทอร์มินัลอีมูเลเตอร์ (หน้าต่างบรรทัดคำสั่ง)

เช่นเดียวกับการเปิดตัวยูทิลิตี้ก่อนหน้านี้ ข้อความหลายข้อความเกี่ยวกับการคอมไพล์ยูทิลิตี้จะกะพริบบนหน้าจอ และหลังจากนั้นไม่กี่นาที หน้าต่างหลักจะเปิดขึ้น

ข้าว. 8. ยูทิลิตี้การกำหนดค่าเคอร์เนลพร้อมอินเทอร์เฟซแบบกราฟิก: ปุ่มเมนูสำหรับการตั้งค่าพารามิเตอร์

ยูทิลิตี้กราฟิกไม่แตกต่างจากยูทิลิตี้ menuconf ig มากเกินไป ที่นี่ ตัวเลือกต่างๆ จะถูกจัดหมวดหมู่ด้วย การคลิกที่หมวดหมู่ใดประเภทหนึ่งจะเป็นการเปิดกล่องโต้ตอบพร้อมรายการตัวเลือก ซึ่งแต่ละรายการสามารถตั้งค่าเป็นค่าที่กำหนดว่าควรใช้เครื่องมือที่เกี่ยวข้องเป็นส่วนหนึ่งของเคอร์เนล เป็นโมดูลที่โหลดได้ หรือไม่ใช้เลย

กล่องโต้ตอบดังกล่าวจะแสดงในรูปที่

ข้าว. 9. กล่องโต้ตอบเช่นตัวเลือกการกำหนดค่าเคอร์เนลชุดนี้

เคอร์เนล 2.4.2 ใน Red Hat Linux รองรับสถาปัตยกรรมมัลติโปรเซสเซอร์แบบสมมาตรตามค่าเริ่มต้น คุณต้องตั้งค่าตัวเลือกที่เกี่ยวข้องเป็น n หากคอมพิวเตอร์ของคุณมีโปรเซสเซอร์เพียงตัวเดียว

ทางด้านขวาของแต่ละตัวเลือกคือปุ่มวิธีใช้

ข้อได้เปรียบที่สำคัญของยูทิลิตี้การกำหนดค่าแบบกราฟิก (โดยเฉพาะอย่างยิ่งสำหรับตัวกำหนดค่าเคอร์เนลในครั้งแรก) คือเมนูแสดงการพึ่งพาระหว่างตัวเลือกต่างๆ ตัวอย่างเช่น ในส่วน Block Devices คุณไม่สามารถติดตั้งการสนับสนุน RAID ที่มีอยู่ในเคอร์เนลได้จนกว่าจะเปิดใช้งานตัวเลือก Multiple Device Driver Support

หากในยูทิลิตี้ menuconfig การพึ่งพาพารามิเตอร์ซึ่งกันและกันนั้นแสดงโดยการเยื้องของชื่อพารามิเตอร์ในเมนู จากนั้นในยูทิลิตี้แบบกราฟิก เป็นไปไม่ได้เลยที่จะตั้งค่าชุดค่าผสมของพารามิเตอร์ที่ไม่ได้รับอนุญาต การทำงานกับยูทิลิตี้กราฟิกช่วยให้เข้าใจถึงการขึ้นต่อกันระหว่างโมดูลต่างๆ

ที่ส่วนท้ายของเมนูหลักของยูทิลิตี้กราฟิก จะมีคำสั่งคล้ายกับคำสั่งยูทิลิตี้ที่เกี่ยวข้องจากเมนูโหมดข้อความ

บันทึกและออก (ออกด้วยการบันทึก) การสร้างไฟล์คอนฟิกูเรชันเคอร์เนลและการปิดยูทิลิตี

เลิกโดยไม่ต้องบันทึก การปิดยูทิลิตีโดยไม่สร้างไฟล์คอนฟิกูเรชันเคอร์เนล

หากไม่มีการสร้างไฟล์คอนฟิกูเรชันของเคอร์เนลโดยใช้หนึ่งในยูทิลิตีที่อยู่ในรายการ จะไม่สามารถคอมไพล์เคอร์เนลใหม่ได้

โหลดการกำหนดค่าจากไฟล์ กำลังโหลดไฟล์การกำหนดค่าที่สร้างไว้ก่อนหน้านี้

จัดเก็บการกำหนดค่าไปยังไฟล์ การเขียนข้อมูลการกำหนดค่าไปยังไฟล์ที่มีชื่อที่ระบุ (สำหรับใช้เพิ่มเติมหรือโอนไปยังเพื่อนร่วมงาน) สิ่งนี้ไม่กระทบต่อความจำเป็นในการรันคำสั่ง Save and Exit ซึ่งสร้างไฟล์คอนฟิกูเรชันสำหรับการคอมไพล์เคอร์เนลใหม่

รวบรวมและเรียกใช้เคอร์เนลใหม่

หลังจากการกำหนดค่าเสร็จสิ้น คุณต้องตรวจสอบไฟล์การกำหนดค่าใหม่ (.config) ที่อยู่ในไดเร็กทอรี /usr/src/linux-2 .4.2 (ขึ้นอยู่กับหมายเลขเวอร์ชัน) หากมีไฟล์การกำหนดค่า .config คุณสามารถใช้คำสั่ง make เพื่อคอมไพล์เคอร์เนลใหม่ได้

โดยปกติ การคอมไพล์เคอร์เนลใหม่จะใช้เวลาตั้งแต่ 15 นาทีถึงหลายชั่วโมง ขึ้นอยู่กับความเร็วของโปรเซสเซอร์ ปริมาณ RAM และปัจจัยอื่นๆ ดังนั้นจึงสะดวกที่จะรวมคำสั่งทั้งหมดที่ป้อนระหว่างการคอมไพล์เป็นคำสั่งเดียว โดยคั่นด้วยเครื่องหมายอัฒภาค เพื่อให้คำสั่งทำงานตามลำดับ

เริ่มกระบวนการคอมไพล์ใหม่

คำสั่งด้านล่างนี้ออกแบบมาเพื่อสร้างเคอร์เนลใหม่โดยคอมไพล์โมดูลทั้งหมดใหม่และเขียนลงในไดเร็กทอรีระบบที่เหมาะสม (จะมีให้สำหรับคำสั่งเคอร์เนล)

ในการคอมไพล์ระบบใหม่ คำสั่งต่อไปนี้จะถูกป้อน

# ให้เดป; ทำความสะอาด; ทำ bzlmage; สร้างโมดูล ทำ modules_install

คุณสามารถป้อนคำสั่ง make แต่ละคำสั่งแยกกันได้ หลังจากที่คำสั่งก่อนหน้านี้เสร็จสิ้น

หลังจากป้อนคำสั่งเหล่านี้ เส้นจะกะพริบบนหน้าจอโดยอธิบายไดเร็กทอรีที่เข้าถึงโดยโปรแกรม make ซึ่งเป็นการเปิดคอมไพเลอร์ gcc เพื่อรวบรวมไฟล์ต้นฉบับต่างๆ และเชื่อมโยงบล็อคต่างๆ แต่ละคำสั่งเหล่านี้จะใช้เวลาหลายนาทีจึงจะเสร็จสมบูรณ์

ตอนนี้คุณสามารถสร้างดิสก์สำหรับบูตสำหรับเคอร์เนลใหม่ด้วยคำสั่ง

ก่อนดำเนินการคำสั่งนี้ คุณต้องใส่ฟลอปปีดิสก์ที่ฟอร์แมตแล้วลงในไดรฟ์ ต้องทดสอบดิสก์สำหรับบูตที่เสร็จสิ้น รีสตาร์ทคอมพิวเตอร์โดยไม่ต้องถอดฟลอปปีออกจากไดรฟ์

หลังจากรันคำสั่งการคอมไพล์เคอร์เนลและกลับสู่บรรทัดคำสั่ง เคอร์เนลใหม่จะถูกสร้างขึ้น ในการบูตระบบด้วยเคอร์เนลใหม่ จะต้องย้ายระบบไปยังไดเร็กทอรีมาตรฐานที่จะรันระบบ ทำได้โดยการป้อนคำสั่ง

# cf /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2

สุดท้าย ในการอัปเดตแมปบูต ให้รันคำสั่ง lilo:

คุณสามารถระบุหมายเลขเวอร์ชันในชื่อของเคอร์เนลอิมเมจที่จะคัดลอก เป็นสิ่งสำคัญที่ชื่อของไฟล์นี้จะต้องตรงกับชื่อที่ระบุในไฟล์ /etc/lilo.conf

การทดสอบเคอร์เนลใหม่

หลังจากย้ายไฟล์เคอร์เนลใหม่ไปยังไดเร็กทอรีดีฟอลต์ (ระบุไว้ในไฟล์ lilo.conf) ระบบสามารถรีบูตได้ด้วยเคอร์เนลนี้

ทันทีหลังจากรีบูต ให้ตรวจสอบการทำงานของเครื่องมือใหม่ที่เริ่มการคอมไพล์ซ้ำ คุณสามารถทำสิ่งต่อไปนี้

เปรียบเทียบปริมาณแกนเก่าและแกนใหม่ คุณควรตรวจสอบจำนวนหน่วยความจำที่ระบบปฏิบัติการใช้งานโดยออกคำสั่งฟรี

การติดตั้งระบบไฟล์หรือพยายามเข้าถึงอุปกรณ์โดยไม่ต้องโหลดโมดูลเคอร์เนลเพื่อรองรับ (หากรองรับอุปกรณ์นั้นอยู่ในเคอร์เนล)

การใช้ทรัพยากรเครือข่าย (เช่น นามแฝง IP) ที่ไม่มีอยู่ในเคอร์เนลเก่า

อาจจำเป็นต้องตรวจสอบการประทับเวลาของไฟล์เคอร์เนลปัจจุบัน เมื่อต้องการทำเช่นนี้ ให้ป้อนคำสั่ง uname ซึ่งช่วยให้แน่ใจได้ว่าระบบกำลังทำงานด้วยเคอร์เนลที่คอมไพล์ใหม่ เวลาประทับและวันที่ของเคอร์เนลต้องตรงกับเวลาที่คอมไพล์ใหม่

หากการตอบสนองจากคำสั่ง uname ระบุว่าระบบไม่ได้บู๊ตด้วยเคอร์เนลใหม่ ให้ดูที่ LILO bootloader ตรวจสอบว่าชื่อของเคอร์เนลที่สามารถบู๊ตได้ถูกต้องในไฟล์ /etc/lilo.conf

ดูเพิ่มเติม:

การคอมไพล์และติดตั้งเคอร์เนล Linux จากซอร์สใน Debian

เนื้อหาจากกลุ่มผู้ใช้ Bryansk Linux และ www.rm.pp.ru

การแจกจ่ายแต่ละรายการมีการสร้างเคอร์เนลเฉพาะ และบทความนี้เน้นที่วิธีการทำสิ่งนี้ใน Debian Etch นอกจากนี้ยังเปิดเผยคำถามเกี่ยวกับวิธีการใช้แพทช์นี้หรือแพตช์นั้นกับเคอร์เนลเมื่อจำเป็นต้องสนับสนุนการทำงานบางอย่างหรือฮาร์ดแวร์ใหม่ในระบบของคุณ บทความนี้จัดทำขึ้นสำหรับผู้ใช้ขั้นสูงเป็นหลัก และไม่มีการรับประกันว่าวิธีการนี้จะใช้งานได้ตามที่ควรจะเป็น และการดำเนินการและความรับผิดชอบที่อธิบายไว้ทั้งหมดตกอยู่กับคุณ

  1. บันทึก
  2. วิธีที่หนึ่ง การสร้างเคอร์เนลลงในแพ็คเกจ .deb
  3. การใช้แพทช์
  4. การกำหนดค่าเคอร์เนล
  5. รวบรวมเคอร์เนล
  6. การติดตั้งเคอร์เนลใหม่
  7. วิธีที่สอง วิธี "ดั้งเดิม"
  8. ปัญหา
  9. ลิงค์

บันทึก

จะอธิบายวิธีการสร้างเคอร์เนลสองวิธี ตัวแปรบิวด์ของแพ็คเกจ .deb ที่อาจติดตั้งบนระบบของคุณหรือระบบอื่นจะได้รับการอธิบายก่อน

วิธีที่สองเป็นวิธีที่เรียกว่า "ดั้งเดิม"

วิธีที่หนึ่ง การสร้างเคอร์เนลลงในแพ็คเกจ .deb

การติดตั้งแพ็คเกจที่จำเป็นสำหรับการคอมไพล์เคอร์เนล

ขั้นแรก มาอัปเดตรายการแพ็คเกจกัน:

# apt-get update

ติดตั้งแพ็คเกจที่เราต้องการ:

# apt-get ติดตั้งเคอร์เนลแพ็คเกจ libncurses5-dev fakeroot wget bzip2 build-essential

กำลังดาวน์โหลดแหล่งเคอร์เนล

ไปที่ไดเร็กทอรี /usr/src ไปที่ www.kernel.org และเลือกเวอร์ชันเคอร์เนลที่ต้องการ ในกรณีนี้ เวอร์ชัน linux-2.6.23.1.tar.bz2 จะได้รับการพิจารณา กำลังดาวน์โหลด:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

แกะแหล่งที่มาและสร้างลิงก์สัญลักษณ์:

# tar xjf linux-2.6.23.1.tar.bz2 # rm linux (ลบ symlink ก่อนหน้า) # ln -s linux-2.6.23.1 linux # cd /usr/src/linux

การใช้แพทช์

ไม่บังคับและไม่จำเป็นอย่าทำเช่นนี้!

บางครั้งจำเป็นต้องมีไดรเวอร์หรือคุณสมบัติที่ไม่ได้รับการสนับสนุนในเคอร์เนลปัจจุบัน เช่น เทคโนโลยีการจำลองเสมือนหรือข้อมูลเฉพาะอื่นๆ ที่ไม่ได้อยู่ในรีลีสปัจจุบัน ไม่ว่าในกรณีใด สิ่งนี้จะได้รับการแก้ไขโดยใช้แพตช์ที่เรียกว่าแพตช์ (ถ้ามี)

สมมติว่าคุณได้ดาวน์โหลดโปรแกรมแก้ไขที่จำเป็น (เช่น เรียกมันว่า patch.bz2) ไปที่ /usr/src ใช้โปรแกรมแก้ไขที่ดาวน์โหลดมากับแหล่งที่มาของเรา (คุณยังควรอยู่ในไดเร็กทอรี /usr/src/linux):

# bzip2 -dc /usr/src/patch.bz2 | แพทช์ -p1 --dry-run # bzip2 -dc /usr/src/patch.bz2 | patch-p1

คำสั่งแรกเป็นเพียงการทดสอบและจะไม่มีการเปลี่ยนแปลงใดๆ กับแหล่งที่มา หากไม่มีการส่งคืนข้อผิดพลาดหลังจากคำสั่งแรก คุณสามารถเรียกใช้คำสั่งที่สองเพื่อใช้โปรแกรมแก้ไข ไม่ว่าในกรณีใดอย่ารันคำสั่งที่สองหากมีข้อผิดพลาดเกิดขึ้นหลังจากคำสั่งแรก!

วิธีนี้คุณสามารถใช้แพตช์กับแหล่งเคอร์เนลได้ ตัวอย่างเช่น มีคุณลักษณะบางอย่างที่มีเฉพาะในเคอร์เนล 2.6.23.8 และแหล่งที่มาไม่มีฟังก์ชันที่จำเป็น แต่มีการเผยแพร่ patch-2.6.23.8.bz2 คุณสามารถใช้โปรแกรมแก้ไขนี้กับแหล่งเคอร์เนล 2.6.23 ได้ แต่ไม่ใช่ 2.6.23.1 หรือ 2.6.23.3 เป็นต้น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่:

คำนำหน้า (prepatches) - เทียบเท่ากับรุ่นอัลฟ่า; ต้องใช้แพตช์กับแหล่งที่มาของเวอร์ชันเต็มก่อนหน้าที่มีเวอร์ชัน 3 หลัก (เช่น แพตช์ 2.6.12-rc4 สามารถใช้กับซอร์สของเวอร์ชัน 2.6.11 ได้ แต่ใช้กับเวอร์ชัน 2.6.11.10 ไม่ได้)

ซึ่งหมายความว่าหากเราต้องการสร้างเคอร์เนล 2.6.23.8 เราจำเป็นต้องดาวน์โหลดซอร์สสำหรับเวอร์ชัน 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6 23.tar.gz) ใช้ในวิธีที่สอง วิธี "ดั้งเดิม"!

ใช้ patch-2.6.23.8.bz2 กับเคอร์เนล 2.6.23:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2 # cd /usr/src/linux # bzip2 -dc /usr/ src/patch-2.6.23.8.bz2 | แพทช์ -p1 --dry-run # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch-p1

การกำหนดค่าเคอร์เนล

เป็นความคิดที่ดีที่จะใช้ไฟล์การกำหนดค่าที่มีอยู่ของเคอร์เนลที่ทำงานอยู่สำหรับไฟล์ใหม่เช่นกัน ดังนั้นเราจึงคัดลอกการกำหนดค่าที่มีอยู่ไปยัง /usr/src/linux:

# ทำความสะอาด && ทำ mrproper # cp /boot/config-`uname -r` ./.config

# ทำ menuconfig

หลังจากนั้นจะโหลดเมนูการกำหนดค่าเคอร์เนลแบบกราฟิก เลือก "โหลดไฟล์การกำหนดค่าสำรอง" ในเมนูตัวกำหนดค่าแล้วคลิก "ตกลง" จากนั้น (หากจำเป็น) ทำการเปลี่ยนแปลงที่จำเป็นในการกำหนดค่าเคอร์เนลโดยไปที่เมนูต่างๆ (ดูรายละเอียดการกำหนดค่าเคอร์เนลได้ที่ www.google.com ) เมื่อคุณทำเสร็จแล้วกด "ออก" คำถาม "คุณต้องการบันทึกการกำหนดค่าเคอร์เนลใหม่ของคุณหรือไม่" จะถูกถาม เราตอบในการยืนยัน "ใช่"

การสร้างเคอร์เนลลินุกซ์

รวบรวมเคอร์เนล

การสร้างเคอร์เนลทำได้เพียงสองคำสั่ง:

# make-kpkg สะอาด # fakeroot make-kpkg --initrd --append-to-version=-cybermind kernel_image kernel_headers

หลังจาก --append-to-version= คุณสามารถเขียนชื่ออะไรก็ได้ตามต้องการ แต่ต้องขึ้นต้นด้วยเครื่องหมายลบ (-) และไม่มีช่องว่าง

ขั้นตอนการรวบรวมและสร้างแพ็คเกจ .deb อาจใช้เวลานาน ทุกอย่างจะขึ้นอยู่กับการกำหนดค่าของเคอร์เนลและความสามารถของโปรเซสเซอร์ของคุณ

การแก้ปัญหาด้วยการสร้าง initrd.img

เมื่อเร็ว ๆ นี้ มีข้อบกพร่องปรากฏขึ้นใน Debian ซึ่งประกอบด้วยข้อเท็จจริงที่ว่าหลังจากติดตั้งแพ็คเกจด้วยเคอร์เนลที่สร้างขึ้นในลักษณะที่อธิบายไว้ที่นี่ ไฟล์ /boot/initrd.img ที่สอดคล้องกับไฟล์เหล่านั้นจะไม่ถูกสร้างขึ้น ในการแก้ไขเคอร์เนลที่ติดตั้งไว้แล้ว คุณจะต้องสร้าง initrd.img ด้วยตนเอง:

update-initramfs -c -k<полная-версия-ядра>

เพื่อแก้ปัญหา "สำหรับอนาคต" - แสดงความคิดเห็นดังที่แสดงในบรรทัดที่สองที่ยกมาด้านล่างในไฟล์ /etc/kernel/postinst.d/initramfs-tools:

# แพ็คเกจเคอร์เนลส่ง arg พิเศษ แฮ็คไม่ให้ทำงานภายใต้เคอร์เนลแพ็คเกจ #[ -z "$2" ] || ทางออก 0

การติดตั้งเคอร์เนลใหม่

เมื่อการสร้างเคอร์เนลเสร็จสมบูรณ์ สองแพ็คเกจ .deb จะถูกสร้างขึ้นในไดเร็กทอรี /usr/src:

# cd /usr/src # ls -l

linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - เคอร์เนลจริงและ linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - ส่วนหัว จำเป็นในการสร้างโมดูลอื่นๆ (เช่น เมื่อสร้างโมดูลไดรเวอร์ nVidia) การติดตั้ง:

# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb # dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb

(แพ็คเกจเหล่านี้สามารถติดตั้งบนระบบอื่นได้โดยไม่ต้องสร้างใหม่อีก)

ทุกอย่างการติดตั้งเสร็จสมบูรณ์ เมนู bootloader การติดตั้งดิสก์ RAM ใหม่และเคอร์เนลจะทำโดยอัตโนมัติ มันยังคงเป็นเพียงการรีบูต:

วิธีที่สอง วิธี "ดั้งเดิม"

เราดำเนินการตามจุดทั้งหมดที่อธิบายไว้ข้างต้นก่อนถึงจุด "รวบรวมเคอร์เนล"

# ทำทั้งหมด # ทำโมดูล _ ติดตั้ง # ทำการติดตั้ง

ตามปกติ บิลด์อาจใช้เวลานาน ขึ้นอยู่กับการกำหนดค่าเคอร์เนลและความสามารถของโปรเซสเซอร์

ข้อเสียเปรียบหลักของวิธีนี้คือ หากคุณอัปเดตเมล็ดบ่อยๆ หลังจากนั้นไม่นาน เมล็ดจำนวนมากจะสะสมและคุณต้องการลบเมล็ดที่ไม่ได้ใช้ออก เพื่อให้ง่ายขึ้น คุณสามารถสร้างเคอร์เนลและไฟล์อื่น ๆ ที่ติดตั้งในระบบโดยใช้คำสั่ง "make modules_install" และ "make install" ลงในแพ็คเกจ deb (หรือมากกว่านั้น สองไฟล์เริ่มต้นจากเคอร์เนล 2.6.27) เช่นเดียวกับตัวแรก เมธอด แต่เราจะใช้ที่นี่กับสคริปต์เคอร์เนล:

#ทำทั้งหมด #ทำ deb-pkg

ไฟล์ .deb สองไฟล์จะปรากฏในไดเร็กทอรีหนึ่งระดับเหนือไดเร็กทอรีต้นทาง ฉันรวบรวมเคอร์เนลในไดเร็กทอรี /usr/src/linux-2.6.27.10 และฉันได้รับไฟล์ในไดเร็กทอรี /usr/src/

# linux-2.6.27.10_2.6.27.10-1_amd64.deb # linux-เฟิร์มแวร์-image_2.6.27.10-1_all.deb

ติดตั้งเคอร์เนลด้วยคำสั่ง

# dpkg -i ลินุกซ์-2.6.27.10_2.6.27.10-1_amd64.deb

เมล็ดเก่าสามารถลบออกได้เช่นจาก synaptic

ขั้นตอนถัดไป

เคอร์เนลถูกสร้างและติดตั้ง แต่ถึงตอนนี้ คุณจำเป็นต้องสร้างดิสก์ RAM (โดยที่เคอร์เนลไม่สามารถบู๊ตได้) และคุณจำเป็นต้องอัปเดต GRUB bootloader เมื่อต้องการทำเช่นนี้ ให้ทำดังต่อไปนี้:

# depmod 2.6.23.1 # apt-get ติดตั้ง yaird

ติดตั้งดิสก์ RAM:

# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1

มาอัปเดต bootloader อย่างง่ายดายและไม่ลำบาก:

ทุกอย่าง bootloader และเคอร์เนลใหม่พร้อมแล้วเหลือเพียงการรีบูต:

ปัญหา

หากหลังจากรีบูตเคอร์เนลใหม่ที่คุณเลือกไม่บู๊ต ให้รีบูตและเลือกเคอร์เนลก่อนหน้าของคุณ และคุณสามารถลองดำเนินการตามกระบวนการทั้งหมดอีกครั้งเพื่อสร้างเคอร์เนลที่ใช้งานได้ ในกรณีนี้ อย่าลืมลบบรรทัดของเคอร์เนลที่ไม่ทำงานใน /boot/grub/menu.lst

รวบรวมเคอร์เนล linux

ทำไมต้องคอมไพล์เคอร์เนลด้วยตัวเอง?
บางทีคำถามหลักที่ถามเกี่ยวกับการคอมไพล์เคอร์เนลคือ: “ทำไมฉันจึงควรทำเช่นนี้?”
หลายคนคิดว่ามันเสียเวลาเปล่า ๆ เพื่อแสดงตัวเองว่าเป็น "Linuxoid" ที่ชาญฉลาดและล้ำสมัย อันที่จริง การคอมไพล์เคอร์เนลเป็นสิ่งสำคัญมาก สมมติว่าคุณซื้อแล็ปท็อปเครื่องใหม่ที่ไม่มีเว็บแคมที่ใช้งานได้ การกระทำของคุณ? คุณตรวจสอบเครื่องมือค้นหาและค้นหาวิธีแก้ไขปัญหาในปัญหานี้ บ่อยครั้งอาจกลายเป็นว่าเว็บแคมของคุณใช้เคอร์เนลเวอร์ชันใหม่กว่าที่คุณมี หากคุณไม่ทราบว่าคุณมีเวอร์ชันใด ให้พิมพ์ uname -r ในเทอร์มินัล คุณจะได้เวอร์ชันเคอร์เนล (เช่น linux-2.6.31-10) นอกจากนี้ การคอมไพล์เคอร์เนลยังใช้กันอย่างแพร่หลายเพื่อเพิ่มประสิทธิภาพ: ความจริงก็คือการแจกแจงเคอร์เนลถูกคอมไพล์ "สำหรับทุกคน" ตามค่าเริ่มต้น ด้วยเหตุนี้จึงมีไดรเวอร์จำนวนมากที่คุณอาจไม่ต้องการ ดังนั้น หากคุณรู้จักฮาร์ดแวร์ของคุณดี คุณสามารถปิดใช้งานไดรเวอร์ที่ไม่จำเป็นได้ในขั้นตอนการกำหนดค่า

นอกจากนี้ยังสามารถเปิดใช้งานการรองรับ RAM มากกว่า 4 กิกะไบต์โดยไม่ต้องเปลี่ยนความลึกบิตของระบบ ดังนั้น หากคุณยังคงต้องมีเคอร์เนลเป็นของตัวเอง มาเริ่มการคอมไพล์กันเลย!

รับซอร์สโค้ดเคอร์เนล
สิ่งแรกที่ต้องทำคือรับซอร์สโค้ดสำหรับเวอร์ชันเคอร์เนลที่ต้องการ โดยปกติคุณจะต้องได้รับเวอร์ชันเสถียรใหม่ล่าสุด เวอร์ชันเคอร์เนลอย่างเป็นทางการทั้งหมดมีอยู่ที่ kernel.org หากคุณมีเซิร์ฟเวอร์ X (คอมพิวเตอร์ที่บ้าน) ติดตั้งอยู่แล้ว คุณสามารถไปที่ไซต์ในเบราว์เซอร์ที่คุณชื่นชอบและดาวน์โหลดเวอร์ชันที่ต้องการในไฟล์ tar.gz (บีบอัด gzip) หากคุณกำลังทำงานในคอนโซล (เช่น คุณยังไม่ได้ติดตั้งเซิร์ฟเวอร์ X หรือกำลังกำหนดค่าเซิร์ฟเวอร์) คุณสามารถใช้เบราว์เซอร์ข้อความ (เช่น elinks) คุณยังสามารถใช้ตัวจัดการการดาวน์โหลด wget มาตรฐาน:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
แต่โปรดทราบว่าคุณต้องทราบหมายเลขเวอร์ชันที่แน่นอนที่คุณต้องการ

การเปิดไฟล์เก็บถาวรซอร์สโค้ด
หลังจากที่คุณได้รับไฟล์เก็บถาวรที่มีซอร์สโค้ดแล้ว คุณจะต้องแตกไฟล์เก็บถาวรลงในโฟลเดอร์ ซึ่งสามารถทำได้จากตัวจัดการไฟล์แบบกราฟิก (dolphin, nautilus เป็นต้น) หรือผ่าน mc หรือใช้คำสั่ง tar แบบดั้งเดิม:
tar -zxvf path_to_archive
ตอนนี้คุณมีโฟลเดอร์ต้นทางแล้ว ไปที่โฟลเดอร์นั้นโดยใช้ cd kernel_source_code_dir (หากต้องการแสดงรายการไดเรกทอรีในโฟลเดอร์ ให้ใช้คำสั่ง ls)

การกำหนดค่าเคอร์เนล
เมื่อคุณเปลี่ยนเป็นไดเร็กทอรีต้นทางเคอร์เนลแล้ว คุณต้องกำหนดค่าเคอร์เนล "20 นาที" จุดประสงค์คือปล่อยให้ไดรเวอร์และฟังก์ชั่นที่จำเป็นเท่านั้น คำสั่งทั้งหมดจะต้องดำเนินการในนามของ superuser

make config - โหมดคอนโซลของตัวกำหนดค่า

ทำ menuconfig - โหมดคอนโซลเป็นรายการ

ทำ xconfig - โหมดกราฟิก

หลังจากทำการเปลี่ยนแปลงที่จำเป็นแล้ว ให้บันทึกการตั้งค่าและออกจากตัวกำหนดค่า

การรวบรวม
ถึงเวลาสำหรับขั้นตอนสุดท้ายของการประกอบ - การรวบรวม ทำได้ด้วยสองคำสั่ง:
ทำ && ทำการติดตั้ง
คำสั่งแรกจะรวบรวมไฟล์ทั้งหมดเป็นรหัสเครื่อง และคำสั่งที่สองจะติดตั้งเคอร์เนลใหม่บนระบบของคุณ
เรารอจาก 20 นาทีถึงหลายชั่วโมง (ขึ้นอยู่กับพลังของคอมพิวเตอร์)

การกำหนดค่าและคอมไพล์เคอร์เนลลินุกซ์

ติดตั้งเคอร์เนลแล้ว หากต้องการให้ปรากฏในรายการด้วง (2) ให้พิมพ์ (ในฐานะรูท)
update-grub
หลังจากรีบูตให้กด "Escape" แล้วคุณจะเห็นเคอร์เนลใหม่ในรายการ หากเคอร์เนลไม่เปิดขึ้น ให้บูตด้วยเคอร์เนลเก่าและกำหนดค่าอย่างระมัดระวังมากขึ้น

KernelCheck - การรวบรวมเคอร์เนลโดยไม่ต้องเข้าสู่คอนโซล
KernelCheck ช่วยให้คุณสร้างเคอร์เนลในโหมดกราฟิกที่สมบูรณ์ สำหรับ Debian และการแจกแจงตาม. เมื่อเปิดตัว KernelCheck จะเสนอเคอร์เนลเวอร์ชันล่าสุดและแพตช์ และหลังจากที่คุณยินยอมแล้ว ให้ดาวน์โหลดซอร์สโค้ด เรียกใช้ตัวกำหนดค่ากราฟิก โปรแกรมจะสร้างเคอร์เนลลงในแพ็คเกจ .deb และติดตั้ง คุณเพียงแค่ต้องรีบูต

ที่เก็บบทความ:
พฤษภาคม 2017
มีนาคม 2017
เมษายน 2016
มีนาคม 2559
ตุลาคม 2013
กันยายน 2556
พฤษภาคม 2013
มีนาคม 2556
พฤศจิกายน 2555
กรกฎาคม 2555
มิถุนายน 2555
เมษายน 2555
มีนาคม 2555
กุมภาพันธ์ 2555
เมษายน 2011
มีนาคม 2554
กุมภาพันธ์ 2011
มกราคม 2011
ธันวาคม 2010
พฤศจิกายน 2010
ตุลาคม 2010
กันยายน 2010
สิงหาคม 2010
กรกฎาคม 2010
มิถุนายน 2010
พฤษภาคม 2010
เมษายน 2010
มีนาคม 2010

สุ่ม:

Aurorae: เครื่องมือตกแต่งหน้าต่างสำหรับ KDE

Sblog จะถูกเขียนใหม่ใน .NET

Linuxnow.ru: แผนสำหรับอนาคต

โบลเจนอส การหักล้างของเทเลคอน

ด้วง 2 การกู้คืนอย่างรวดเร็ว

มูลนิธิซอฟต์แวร์ฟรีและ copyleft

เพื่อนร่วมงาน: ทั้งหมด
ลินุกซ์สำหรับทุกคน

แบนเนอร์ของเรา:


ตั้งแบนเนอร์

คำถามคือ ทำไมไม่เรียนรู้ที่จะทำเช่นเดียวกันกับเคอร์เนล Linux? สาเหตุของการสร้างเคอร์เนลลินุกซ์จากแหล่งที่มาโดยทั่วไปก็เช่นเดียวกัน - รับเคอร์เนลเวอร์ชันล่าสุด, ใช้แพตช์ความปลอดภัยอย่างเร่งด่วน, เพิ่มประสิทธิภาพสำหรับงานเฉพาะและฮาร์ดแวร์เฉพาะ และความปรารถนาที่จะมีส่วนร่วมในการพัฒนาเคอร์เนลด้วย ในบทบาทของ QA

สิ่งสำคัญ!การปฏิบัติตามคำแนะนำในโพสต์นี้อาจส่งผลให้ข้อมูลของคุณสูญหาย สำรองข้อมูลและจำไว้ว่าคุณต้องทำทุกอย่างด้วยความเสี่ยงและอันตรายของคุณเอง ทุกอย่างที่อธิบายไว้ด้านล่างได้รับการทดสอบบน Ubuntu 14.04 LTS แล้ว แต่สำหรับ Ubuntu เวอร์ชันอื่น เช่นเดียวกับลีนุกซ์รุ่นอื่นๆ ความแตกต่างควรน้อยที่สุด

การตั้งค่า bootloader

แก้ไข /etc/default/grub ดังนี้:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=จริง
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR =` lsb_release -i -s 2 > /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="สาดน้ำเงียบ"
GRUB_CMDLINE_LINUX=""

หลังจากแก้ไขเราพูดว่า:

sudo update-grub

ดังนั้น ก่อนบูตระบบ คุณจะได้รับแจ้งเป็นเวลา 10 วินาทีเพื่อเลือกเคอร์เนลที่คุณต้องการบูต มีประโยชน์มากถ้าคุณทำผิดพลาดกับการกำหนดค่าเคอร์เนลของคุณและต้องการบูตด้วยเวอร์ชันก่อนหน้า!

ติดตั้งการพึ่งพา

เราจะต้องมีแพ็คเกจต่อไปนี้เป็นอย่างน้อย:

sudo apt-get ติดตั้ง git gcc สร้าง bc fakeroot dpkg-dev \
libncurses5-dev libssl-dev

อย่างไรก็ตาม ในหลายระบบ ทุกระบบจะมีอยู่แล้ว

รับแหล่งที่มา

wget https:// www.kernel.org/ pub/ linux/ kernel/ v4.x/ linux-4.6.4.tar.xz
tar --xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4

หรือหากต้องการข้อมูลล่าสุด คุณสามารถคว้าแหล่งที่มาได้โดยตรงจาก Git :

# มิเรอร์: https://github.com/torvalds/linux
git โคลน "git://git.kernel.org/pub/scm/linux/kernel/git/"\
"torvalds/linux.git"
cd linux

เมื่อพิจารณาจากข้อเท็จจริงที่ว่าฉันหาแท็ก v4.6.4 ใน Git ไม่พบ ลินุกซ์เคอร์เนลรีลีสนั้นถูกสร้างขึ้นมาในรูปแบบของไฟล์บีบอัด tar archives เท่านั้น

หากคุณต้องการสร้างเคอร์เนลที่มีแพตช์จาก Canonical แทนที่จะเป็นเคอร์เนลวานิลลา:

โคลน git git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-trusty
git tag | น้อย
git checkout Ubuntu-lts-4.4.0-31.50_14.04.1

จากประสบการณ์ของฉันเอง ถ้าคุณใช้ Ubuntu คุณสามารถใช้วานิลลาเคอร์เนลได้อย่างปลอดภัย ไม่น่าเป็นไปได้ที่คุณจะมีปัญหากับมัน

บันทึก:ที่น่าสนใจสำหรับลีนุกซ์รุ่นยอดนิยมที่มีอยู่ มีเพียง Gentoo, Slackware และ Arch Linux เท่านั้นที่ดูเหมือนจะใช้เคอร์เนลโดยไม่มีแพตช์ของตัวเอง

อย่างไรก็ตาม ตอนนี้คุณมีซอร์สโค้ดแล้ว

การคอมไพล์และติดตั้งเคอร์เนล

เลือกตัวเลือกที่จะสร้างเคอร์เนล:

ทำ menuconfig

หากจำเป็น ให้เปลี่ยนการตั้งค่า คลิกบันทึก จากนั้นออก ซึ่งจะสร้างไฟล์ .config ที่มีตัวเลือกที่เราเลือกไว้

ที่ อัปเดตเคอร์เนล (คุณใช้เคอร์เนลบางประเภทอยู่แล้วหรือไม่) สะดวกในการกำหนดค่าเคอร์เนลปัจจุบันและตั้งค่าตัวเลือกใหม่เป็นค่าเริ่มต้น:

zcat /proc/config.gz > ./.config
ทำให้ olddefconfig

ในที่สุด เรารวบรวม:

ทำ -j4 bindeb-pkg LOCALVERSION=-custom

แกนถูกประกอบขึ้นเป็นเวลานาน บนแล็ปท็อปของฉัน การประกอบใช้เวลา 1 ชั่วโมง 15 นาที อย่างไรก็ตาม จากนี้ไป เกี่ยวกับส่วนที่เหลือใช้ในการสร้างแพ็คเกจเคอร์เนลขนาดยักษ์พร้อมสัญลักษณ์การดีบัก แอสเซมบลีของแพ็คเกจนี้สามารถปิดใช้งานได้โดยการแสดงความคิดเห็นพารามิเตอร์ CONFIG_DEBUG_INFO ในการกำหนดค่า โปรดทราบว่า SystemTap และเครื่องมือที่มีประโยชน์อื่นๆ จำเป็นต้องใช้แพ็คเกจนี้

นอกจากตัวเคอร์เนลเองแล้ว คุณยังสามารถรวบรวมเอกสารประกอบ:

# นอกจากนี้ยังมี `make pdfdocs` และอื่น ๆ โปรดดูที่ `make help`
ทำ htmldocs
เอกสารคู่มือเบราว์เซอร์โครเมียม/ DocBook/ index.html

เมื่อประกอบเสร็จ บริษัท ย่อยไดเรกทอรีที่เราเห็นบางอย่างเช่น:

ลินุกซ์-เฟิร์มแวร์-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

เราใส่แพ็คเกจ deb ทั้งหมดยกเว้นรุ่น dbg ของเคอร์เนลด้วยค่าปกติ sudo dpkg -iและรีบูต หลังจากรีบูต ดูผลลัพธ์ของคำสั่ง uname-a. เราตรวจสอบให้แน่ใจว่าเราทำการบูทด้วยเคอร์เนลใหม่จริงๆ หากมีบางอย่างผิดปกติกับเคอร์เนลใหม่ ใน bootloader เราเพียงแค่เลือกอันที่ระบบเคยบูทมาก่อน หลังจากบูทด้วยเคอร์เนลเก่า เราจะลบแพ็คเกจของเคอร์เนลใหม่อย่างรวดเร็ว และ voila - ระบบกลับสู่สถานะก่อนหน้า

ในช่วงกลางเดือนมีนาคม หลังจากเกือบสองเดือนของการพัฒนาและตัวเลือกการเปิดตัวเจ็ดรายการ Linus Torvalds ได้เปิดตัวเคอร์เนล 4.5 เวอร์ชันใหม่ นอกจากการแก้ไขแล้ว ยังมีสิ่งใหม่ๆ มากมายในการเปิดตัวอีกด้วย การเปลี่ยนแปลงส่งผลกระทบต่อระบบย่อยทั้งหมด - ดิสก์ หน่วยความจำ ระบบและบริการเครือข่าย ความปลอดภัย และแน่นอน เพิ่มไดรเวอร์สำหรับอุปกรณ์ใหม่ มาลองจัดการกับสิ่งที่น่าสนใจที่สุดกันดีกว่า

เกี่ยวกับการเปิดตัว

เคอร์เนล 4.4 ที่ปล่อยออกมาค่อนข้างเร็วในต้นเดือนมกราคม 2559 แต่มีการเพิ่มจำนวนมากในเวลาอันสั้นนี้ และแม้ว่า Linus จะเรียกเวอร์ชันใหม่นี้ว่า "ปกติ" คุณจะเห็นได้ว่าเมื่อเปรียบเทียบกับเวอร์ชัน 4.4 แล้ว ขนาดของแพตช์ก็เพิ่มขึ้นเกือบหนึ่งในสาม - 70 MB เทียบกับ 49 MB มีผู้เข้าร่วมการพัฒนาประมาณ 1,528 คน ซึ่งแก้ไขได้ประมาณ 13,000 ครั้ง ในไฟล์มากกว่า 11,000 ไฟล์ มีการเพิ่ม 1,146,727 รายการ ลบโค้ด 854,589 บรรทัด ใน 4.4 มี 714,106 และ 471,010 เส้น ตามลำดับ เกือบครึ่ง (45%) ของการเปลี่ยนแปลงทั้งหมดเกี่ยวข้องกับไดรเวอร์อุปกรณ์ 17% ส่งผลต่อโค้ดของสถาปัตยกรรมฮาร์ดแวร์ 14% เกี่ยวข้องกับสแต็กเครือข่าย 4% - ระบบไฟล์ และ 3% ส่งผลต่อระบบย่อยเคอร์เนลภายใน Doug Ledford จาก Red Hat มีส่วนสนับสนุนมากที่สุด ส่วนใหญ่ทำความสะอาดโค้ด (7.7%), Tomi Valkeinen จาก Texas Instruments ทำงานเกี่ยวกับการสนับสนุนสถาปัตยกรรมย่อย OMAP (5.3%), นักพัฒนาสามคนเน้นที่ไดรเวอร์กราฟิก AMD: Eric Huang - 3.3%, Alex Deucher - 2.4% และ yanyang1 - 1.6% ผู้นำชุดการเปลี่ยนแปลง - Linus Walleij แห่ง Linaro ผู้ดำเนินการการเปลี่ยนแปลงระดับต่ำหลายอย่างรวมถึง GPIO ที่เขาสนับสนุน (2.0%), Arnd Bergmann ที่ทำงานมากมายเพื่อรองรับ ARM (1.9%) และ Leo Kim ที่ทำงาน บนไดรเวอร์ wilc1000 (1.7%) ก่อนหน้านี้ หลายองค์กรให้ความสนใจในการพัฒนาแกนกลาง การทำงานในเวอร์ชัน 4.5 ได้รับการสนับสนุนโดยบริษัทมากกว่า 200 แห่ง รวมถึง Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google ส่วนใหญ่พัฒนาการสนับสนุนสำหรับอุปกรณ์และระบบย่อยและเครื่องมือที่เกี่ยวข้อง แต่ตัวอย่างเช่น Google มักจะทำการเปลี่ยนแปลงมากมายกับระบบย่อยเครือข่าย Linux

เคอร์เนลและไดรเวอร์

การย้ายรหัสที่ซับซ้อนและได้รับการดูแลไม่ดีซึ่งเขียนในแอสเซมเบลอร์ (x86/asm) ไปยัง C ดำเนินต่อไปใน 4.0 เคอร์เนลสามารถสร้างได้ด้วยตัวเลือก -fsanitize=undefined พารามิเตอร์ปรากฏขึ้นเมื่อสองปีที่แล้วใน GCC 4.9+ และเปิดใช้งานโหมดดีบัก UBSan (Undefined Behavior Sanitizer) ซึ่งตรวจจับพฤติกรรมที่ไม่ได้กำหนดซึ่งมีอยู่ในภาษา C และ C ++: การใช้ตัวแปรที่ไม่คงที่ก่อนการเริ่มต้น หารด้วยศูนย์ จำนวนเต็มล้น เป็นต้น คอมไพเลอร์มักจะสันนิษฐานว่าการดำเนินการดังกล่าวจะไม่เกิดขึ้น และหากเกิดขึ้น ผลลัพธ์จะเป็นอะไรก็ได้และขึ้นอยู่กับคอมไพเลอร์เอง ตอนนี้คอมไพเลอร์ตรวจพบสถานการณ์ดังกล่าว ออก "ข้อผิดพลาดรันไทม์:" (คุณสามารถปิดใช้งาน -fno-sanitize-recover ได้) และดำเนินการดำเนินการต่อไป ตามค่าเริ่มต้น ในแต่ละ OS Assembly ไลบรารีทั้งหมดจะถูกโหลดไปยังที่อยู่ที่แน่นอน ซึ่งทำให้ง่ายต่อการดำเนินการโจมตี เพื่อเพิ่มความปลอดภัย มีการใช้เทคโนโลยีจำนวนหนึ่ง หนึ่งในนั้นคือการสุ่มออฟเซ็ตเมื่อเรียกใช้ mmap () ซึ่งใช้งานในรูปแบบของ ASLR (Address Space Layout Randomization) เทคโนโลยี ASLR ปรากฏตัวครั้งแรกใน Linux ในปี 2548 ในเคอร์เนล 2.6 และให้ออฟเซ็ต 8 บิตสำหรับระบบ 32 บิต (นั่นคือ 256 ตัวเลือกที่อยู่ แม้ว่าจะน้อยกว่าจริง) และสำหรับ x64 - ออฟเซ็ตมีอยู่แล้ว 28 บิต สำหรับ x64 มีตัวเลือกค่อนข้างเพียงพอ แต่สำหรับระบบ 32 บิต รวมถึง Android นี่ยังไม่เพียงพอในวันนี้ มีช่องโหว่ที่ทราบอยู่แล้วที่สามารถรับที่อยู่ได้ จากการค้นหาวิธีแก้ปัญหา มีการเขียนแพตช์ที่ให้คุณตั้งค่าการสุ่มเพิ่มเติมสำหรับ ASLR ผ่าน /proc/sys/vm/mmap_rnd_bits และ /proc/sys/vm/mmap_rnd_compat_bits (บนระบบ x64 สำหรับกระบวนการ x86) สำหรับแต่ละสถาปัตยกรรม จะมีการระบุค่าต่ำสุดและสูงสุด โดยคำนึงถึงพื้นที่ที่อยู่ที่มีอยู่ สำหรับ x86 ค่าสามารถอยู่ในช่วงตั้งแต่ 8 ถึง 16 บิต หรือ 28 ถึง 32 (สำหรับเวอร์ชัน x64) สามารถตั้งค่าตัวเลือกเริ่มต้นได้เมื่อสร้างเคอร์เนล
การกำหนดค่า ASLR ในเคอร์เนลใหม่ ความสามารถที่เพิ่มขึ้นของไดรเวอร์ DRM สำหรับการ์ดวิดีโอ NVIDIA (Nouveau) และ Intel (รองรับชิป Kaby Lake รุ่นอนาคต) เพิ่มการรองรับการ์ดเสียงใหม่ คอนโทรลเลอร์ USB และตัวเร่งการเข้ารหัสลับ ผู้ผลิตกราฟิกการ์ด Intel และ NVIDIA เลิกใช้ UMS (Userspace Mode Setting) มานานแล้วในไดรเวอร์โอเพ่นซอร์สแทน KMS (การตั้งค่าโหมดเคอร์เนล) ตอนนี้ถึงคราวของไดรเวอร์ ATI Radeon ซึ่งลบรหัสโหมด UMS ตั้งแต่ 3.9 เป็นไปได้ที่จะเปิดใช้งานด้วยพารามิเตอร์ DRM_RADEON_UMS หรือโดยการตั้งค่า radeon.modeset=0 ใน GRUB ตอนนี้เหลือเพียง KMS (การตั้งค่าโหมดเคอร์เนล) สิ่งนี้ต้องนำมาพิจารณาด้วยหากคุณจำเป็นต้องใช้ไดรเวอร์รุ่นเก่าหรือโหมด UMS (บางครั้ง UMS จะแสดงประสิทธิภาพที่ดีกว่า) เพิ่มการรองรับรุ่นทดลองสำหรับเทคโนโลยีการจัดการพลังงานแบบไดนามิกของ PowerPlay ให้กับไดรเวอร์ AMDGPU เพื่อปรับปรุงประสิทธิภาพของ GPU สำหรับ GPU ของตองกาและฟิจิ และผสานรวม Carrizo และ Stoney ในโหมด PowerPlay GPU จะเริ่มทำงานในโหมดพลังงานต่ำ แต่ถ้าโหลดบนระบบย่อยกราฟิกเพิ่มขึ้น มันจะเพิ่มความถี่โดยอัตโนมัติ ตามค่าเริ่มต้น PowerPlay จะถูกปิดใช้งาน หากต้องการเปิดใช้งาน ให้ส่งพารามิเตอร์ amdgpu.powerplay=1 ไปยังเคอร์เนล Media controller API เวอร์ชันใหม่ขยายการรองรับอุปกรณ์ Video4Linux และอนุญาตให้คุณใช้ฟังก์ชันตัวควบคุมมัลติมีเดียในระบบย่อยอื่นๆ เช่น DVB, ALSA และ IIO KVM (Kernel-Based Virtual Machine) ได้ทำสิ่งต่างๆ มากมายเพื่อรองรับสถาปัตยกรรม s390 (ขณะนี้สามารถใช้งานได้ถึง 248 vCPU), ARM/ARM64 และปรับปรุงประสิทธิภาพ x86 ใน Hyper-V

การติดตั้ง Kernel 4.5 ใน Ubuntu

วิธีที่ง่ายที่สุดในการทำความคุ้นเคยกับเคอร์เนลใหม่คือการใช้บิลด์จากทีมเคอร์เนลของ Ubuntu หลังจากการทดสอบอย่างละเอียด เคอร์เนลใหม่จะลงเอยด้วย ppa:canonical-kernel-team/ppa แต่มักต้องใช้เวลา $ wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb http://kernel .ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500_4.5.0-040500.201603140130_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline /v4.5-wily/linux-image-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb $ sudo dpkg -i linux*.deb เราสามารถทำงานได้หลังจากรีบูต

รองรับ ARM

คอมพิวเตอร์ ARM ใช้เป็นเซิร์ฟเวอร์ขนาดเล็กสำหรับงานบางอย่างหรือเป็นตัวควบคุมอัตโนมัติ ซึ่งทำให้เป็นที่นิยมและเป็นที่ต้องการอย่างมาก ชุมชน Linux ARM ได้กลายเป็นชุมชนที่มีการใช้งานมากที่สุดกลุ่มหนึ่งในช่วงห้าปีที่ผ่านมา โดยทำงานเป็นจำนวนมากเพื่อรองรับแพลตฟอร์ม ARM แบบ 32 บิต ซึ่งมีส่วนแบ่งการตลาดเป็นจำนวนมาก และโดยทั่วไปแล้วงานนี้เสร็จสิ้นโดยการเปิดตัว 4.5 สาขา. ก่อนหน้านี้ สำหรับอุปกรณ์ ARM แต่ละเครื่อง จำเป็นต้องสร้างเคอร์เนลของตัวเอง โดยให้การสนับสนุนเฉพาะอุปกรณ์บางอย่างเท่านั้น แต่ปัญหาคืออุปกรณ์มีความซับซ้อนมากขึ้น จึงสามารถเปลี่ยนแปลงการกำหนดค่าได้ และผู้ใช้เองบนอุปกรณ์ ARM ต้องการใช้การแจกแจงแบบปกติโดยไม่ต้องใช้ท่าทางสัมผัสที่ไม่จำเป็น แต่ในท้ายที่สุด เรามีหลายร้อยตัวเลือกสำหรับการสร้างเคอร์เนล ซึ่งทำให้ใช้งาน Linux ได้ยากมาก ผลลัพธ์จากการทำความสะอาดและการปรับโครงสร้างโค้ดจำนวนมาก ทำให้สามารถรวมโค้ดสนับสนุน ARMv6 และ ARMv7 ไว้ในเคอร์เนลได้ นั่นคือตอนนี้ เราสามารถสร้างเคอร์เนลสากลที่สามารถบู๊ตได้ทั้งสองระบบ อาจเป็นไปได้ว่าเราต้องจำข้อกำหนด Device Tree ที่เพิ่งได้รับการโปรโมต ซึ่งถือเป็นส่วนหนึ่งของการพัฒนา Open Firmware Device Tree ช่วยให้คุณสามารถกำหนดค่าฮาร์ดแวร์ในเวลาบูตโดยใช้ไฟล์ dts พิเศษที่จัดเก็บไว้ใน /boot/dtbs และเปลี่ยนการตั้งค่าโดยไม่ต้องสร้างเคอร์เนลใหม่ การใช้แผนผังอุปกรณ์เป็นสิ่งจำเป็นสำหรับการพัฒนา ARM ใหม่ทั้งหมด ไม่ใช่แค่อุปกรณ์เท่านั้น ทั้งหมดนี้ช่วยให้มั่นใจว่าการแจกจ่าย Linux ในอนาคตสามารถทำงานได้อย่างปลอดภัยบนอุปกรณ์ ARM ในขณะเดียวกัน Greg Kroah-Hartman แห่ง Linux Foundation ได้ออกแพตช์ที่ใช้คุณลักษณะที่คล้ายคลึงกันสำหรับเคอร์เนลเวอร์ชันแรกๆ ใน arch/arm64 เราพบโค้ดที่สนับสนุนสถาปัตยกรรม ARM 64 บิตใหม่ (ARMv8) เพิ่มคุณสมบัติใหม่สำหรับสถาปัตยกรรม ARM ยอดนิยมทั้งหมด - Allwinner, Amlogic, Samsung, Qualcomm และรองรับบอร์ด ARM ใหม่จากนักพัฒนาหลายราย

บริการระบบ

ในการเข้าถึงข้อมูลเฟิร์มแวร์ UEFI (Unified Extensible Firmware Interface) ใน Linux จะใช้ระบบไฟล์เทียม efivars พิเศษ (กำหนดค่าโดย EFIVAR_FS) ซึ่งติดตั้งใน /sys/firmware/efi/efivars ในการใช้งานบางอย่าง เมื่อดำเนินการคำสั่ง rm -rf /* เนื้อหาของไดเร็กทอรีนี้จะถูกลบออกด้วย ซึ่งนำไปสู่การทำลายเฟิร์มแวร์ บริษัทต่างๆ - ผู้พัฒนาอุปกรณ์ไม่คิดว่านี่เป็นข้อเสียเปรียบที่ร้ายแรง เพราะแน่นอนว่าสถานการณ์ไม่ธรรมดาที่สุด และไม่น่าเป็นไปได้ที่ผู้ใช้จะคิดที่จะตรวจสอบสิ่งนี้ อย่างไรก็ตาม มีปัญหาเกิดขึ้น และผู้เขียนไวรัสสามารถใช้ประโยชน์จากโอกาสนี้อย่างแท้จริง ตอนนี้ Kernel 4.5 เพิ่มการป้องกันพิเศษให้กับไดเร็กทอรี /sys/firmware/efi/efivars เพื่อป้องกันการลบไฟล์ภายใน

มีต่อสำหรับสมาชิกเท่านั้น

ตัวเลือก 1. เข้าร่วมชุมชน "ไซต์" เพื่ออ่านเนื้อหาทั้งหมดบนไซต์

การเป็นสมาชิกในชุมชนในช่วงเวลาที่กำหนดจะทำให้คุณเข้าถึงเนื้อหาทั้งหมดของแฮ็กเกอร์ เพิ่มส่วนลดสะสมส่วนบุคคลของคุณ และช่วยให้คุณสะสมคะแนน Xakep Score แบบมืออาชีพได้!

แกน(ภาษาอังกฤษ) เคอร์เนล) คือสิ่งที่ทุกสิ่งทุกอย่างสร้างขึ้น นั่นคือสิ่งที่เรียกว่าลินุกซ์ ตอนนี้คำว่า Linux ในชีวิตประจำวันเรียกว่าระบบปฏิบัติการที่สร้างขึ้นแม้ว่าจะเรียกว่า GNU / Linux ในทางที่ดี (เคอร์เนลและซอฟต์แวร์ของ Linux จากโครงการ GNU ซึ่งได้รับการพัฒนามาหลายทศวรรษ)

อูบุนตูใช้เคอร์เนลที่มีแพตช์จำนวนมาก ซึ่งบางอันเพิ่มคุณสมบัติที่ไม่เสถียรและอยู่ในขั้นทดลอง

Ubuntu แต่ละรุ่นมีเคอร์เนลเวอร์ชันของตัวเอง รุ่น LTS ตั้งแต่ 10.04 สามารถอัปเกรดเคอร์เนลเป็นเวอร์ชันที่รวมอยู่ในรุ่นที่ใหม่กว่าได้

เวอร์ชัน Ubuntuเวอร์ชันเคอร์เนล
4.10 2.6.9
5.04 2.6.11
5.10 2.6.13
6.06LTS 2.6.15
6.10 2.6.18
7.04 2.6.19
7.10 2.6.20
8.04LTS 2.6.24
8.10 2.6.27
9.04 2.6.28
9.10 2.6.31
10.04LTS 2.6.32
10.10 2.6.35
11.04 2.6.38
11.10 3.0.4
12.04LTS 3.2
12.10 3.5
13.04 3.8
13.10 3.11
14.04LTS 3.13
14.10 3.16
15.04 3.19

ส้อม

หมายเลขเวอร์ชันของเคอร์เนล Ubuntu และบนเว็บไซต์ kernel.org ไม่ตรงกัน เนื่องจากนักพัฒนาจาก Canonical เพิ่มเวอร์ชันไมโครเพื่อระบุแพตช์ที่เพิ่มเข้ามา ตัวอย่างเช่น เวอร์ชัน 3.2.0-23 จะหมายความว่าเคอร์เนลอิงตามสาขา 3.2 ซึ่งมี 23 แพตช์

เคอร์เนลประเภทต่อไปนี้ได้รับการสนับสนุนในที่เก็บ Ubuntu:

เคอร์เนล generic-pae อนุญาตให้ระบบ 32 บิตใช้ RAM ทั้งหมดสูงสุด 64 GB โดยจัดสรรได้ไม่เกิน 4 GB สำหรับความต้องการของกระบวนการเฉพาะ ในขณะที่เคอร์เนลทั่วไปทั่วไปใช้งานได้กับ RAM ไม่เกิน 4 GB

เคอร์เนล 64 บิตช่วยให้สามารถระบุหน่วยความจำสูงสุด 1TB ที่ใช้โดยกระบวนการ

หากคุณต้องการอัปเดตเคอร์เนลเป็นเวอร์ชันหลักที่ใหม่กว่า (โดยปกติ เนื่องจากเวอร์ชันใหม่เพิ่มการรองรับสำหรับฮาร์ดแวร์ใหม่ แก้ไขการถดถอย) คุณสามารถใช้ไฟล์เก็บถาวรที่รองรับอย่างเป็นทางการได้ http://kernel.ubuntu.com/ ~kernel-ppa/mainline/ .

รวบรวมเคอร์เนล

การสร้างเคอร์เนลจากแหล่งที่มาต้องใช้ทักษะและความรู้เกี่ยวกับวิธีการทำงานของระบบปฏิบัติการ

ก่อนที่คุณจะเริ่มสร้างเคอร์เนล คุณต้องติดตั้งแพ็คเกจต่อไปนี้:

build-essential fakeroot ncurses-dev libssl-dev

การดำเนินการเพิ่มเติมทั้งหมดจะต้องดำเนินการในนามของ superuser:

ซูโด ซู

รับซอร์สโค้ด

ซอร์สโค้ดสำหรับเคอร์เนลที่ใช้โดย Ubuntu สามารถรับได้โดยการติดตั้งแพ็คเกจ linux-source:

apt-get ติดตั้ง linux source

หลังจากติดตั้งในไดเร็กทอรี /usr/srcจะมีไฟล์เก็บถาวรชื่อ linux-source-verify_kernels.tar.bz2.

คุณยังสามารถดาวน์โหลดไฟล์เก็บถาวรด้วยซอร์สโค้ดเคอร์เนลได้จากเว็บไซต์ kernel.org

เมื่อดาวน์โหลดเคอร์เนลจากไซต์ kernel.org คุณจะต้องใช้แพตช์กับเคอร์เนลนั้น

การกำหนดค่า

คลายไฟล์เก็บถาวรที่เป็นผลลัพธ์และสร้างลิงก์สัญลักษณ์ไปยังไดเร็กทอรีผลลัพธ์เพื่อความสะดวก:

cd / usr/ src tar xjf ./ linux-source-3.2.0.tar.bz2 ln -s ./ linux-source-3.2.0 ./ linux cd ./ linux

เพื่อให้ขั้นตอนการกำหนดค่าเคอร์เนลง่ายขึ้น คุณสามารถคัดลอกการตั้งค่าปัจจุบันได้

มีคำถามหรือไม่?

รายงานการพิมพ์ผิด

ข้อความที่จะส่งถึงบรรณาธิการของเรา: