ฉันจะไปตอบคำถามจริงของคุณ แต่ฉันจะใช้วิธีอ้อมเพื่อไปที่นั่นเพื่อให้คุณมีบริบทที่ดีขึ้น
tldr: แพ็คเกจที่คุณต้องการคือ ทำ
หรือ สิ่งจำเป็นในการสร้าง
. คุณต้องอยู่ในไดเร็กทอรีเดียวกันกับซอร์สโค้ด linux ของคุณ และมีไฟล์ .config ที่กำหนดค่าไว้ (ซึ่งดูเหมือนว่าคุณได้ดำเนินการไปแล้ว) จากนั้นเรียกใช้คำสั่งเหล่านั้น คำหลักของ Google ที่อาจช่วยได้คือ "compile linux kernel"
ดังนั้น ทำ
เป็นระบบการสร้าง อนุญาตให้คุณเรียกใช้ชุดคำสั่งคอมไพล์ (หรือคำสั่งใดๆ ก็ได้) ซ้ำๆ ผ่านโครงสร้างไดเร็กทอรี ใช้ระบบง่ายๆในการคอมไพล์โปรแกรมที่มีการเปลี่ยนแปลงเท่านั้น
Make อนุญาตให้มีการประกาศ "เป้าหมาย" ตามเนื้อผ้าเป้าหมายคือชื่อไฟล์และตามด้วยไฟล์ที่ขึ้นอยู่กับ
ตัวอย่างง่ายๆคือ:
เฮลโลเวิลด์: helloworld.c เฮลโลเวิร์ล.เอช
gcc helloworld.c -o สวัสดีโลก
สิ่งนี้จะถูกเก็บไว้ในการเรียกไฟล์ สร้างไฟล์
และมันบอกให้สร้างไฟล์ helloworld (คอมไพล์ไบนารี) คุณเรียกใช้ gcc helloworld.c -o สวัสดีโลก
และถ้ามี Helloworld อยู่แล้ว อย่าทำอะไรจนกว่าจะมีการเปลี่ยนแปลงกับไฟล์ helloworld.c หรือ helloworld.h ที่ใหม่กว่าไฟล์ helloworld
หากนี่เป็นกฎข้อเดียวใน makefile ให้รัน ทำ
จะเรียกใช้กฎนี้ (เนื่องจากเป็นกฎข้อแรก) และพยายามสร้าง สวัสดีชาวโลก
แต่สามารถเรียกใช้ได้อย่างชัดเจนด้วยการเรียกใช้ ทำเฮลโลเวิร์ล
Makefiles มักจะซับซ้อนกว่ามากและอาจมีลักษณะเช่นนี้มากกว่า (นี่คือตัวอย่างที่ประดิษฐ์ขึ้นอย่างมากและฉันรู้ว่า makefile แทบจะไม่มีลักษณะเช่นนี้เลย แต่เป็นการดีสำหรับการอธิบาย):
สวัสดี: สวัสดี.o libhello.o
gcc hello.o libhello.o -o สวัสดี
สวัสดี.o: สวัสดี.c สวัสดี.h
gcc -c hello.c -o สวัสดี.o
libhello.o: libhello.c libhello.h
gcc -c libhello.c -o libhello.o
ดังนั้นหากคุณวิ่ง ทำ
หรือ สวัสดี
ไฟล์ make นี้จะตรวจสอบ hello.o และ libhello.o หากไม่มีอยู่ มันจะค้นหาเป้าหมายเหล่านั้น และค้นหาวิธีสร้าง hello.o และ libhello.o แล้วจึงสร้างไบนารี hello ตามที่คุณถาม ในที่แรก. สิ่งนี้ทำให้คุณสามารถระบุการพึ่งพาทีละระดับและกำหนดลำดับที่จะคอมไพล์ทุกอย่างเพื่อให้มันทำงานได้ (สิ่งนี้ยังช่วยประหยัดเวลาในการคอมไพล์หากหนึ่งในไลบรารีของคุณไม่มีการเปลี่ยนแปลง คุณไม่จำเป็นต้องคอมไพล์วัตถุนั้นใหม่ ).
คุณสามารถระบุเป้าหมายโดยไม่ต้องพึ่งพาใดๆ ในกรณีนี้ เป้าหมายจะทำงานก็ต่อเมื่อไม่มีไฟล์เป้าหมาย นอกจากนี้ เป้าหมายของคุณไม่จำเป็นต้องเป็นไฟล์ที่สร้างโดยกฎนั้น ตัวอย่างเช่น:
ทำความสะอาด:
rm สวัสดี *.o
สิ่งนี้ทำให้คุณสามารถเรียกใช้ ทำความสะอาด
และจะลบไบนารีที่คอมไพล์แล้วและไฟล์ออปเจกต์ เนื่องจากมันไม่ได้สร้างไฟล์ชื่อ ทำความสะอาด
ทุกครั้งที่คุณวิ่ง ทำความสะอาด
กฎนี้ถูกดำเนินการและล้างไดเร็กทอรีการทำงานของคุณ สิ่งนี้เรียกว่าเป้าหมายปลอมและใช้บ่อยมาก ทำการติดตั้ง
เป็นโปรแกรมที่คุณมักจะเห็นบ่อยๆ ในการติดตั้งโปรแกรมที่คุณสร้างด้วยยี่ห้อ
กลับไปที่คำถามเดิมของคุณ
ดังนั้นเคอร์เนล linux จึงใช้ make เพื่อสร้าง มันมีเป้าหมายปลอมมากมาย เมื่ออยู่ในรูทของซอร์ส Linux ให้รัน ให้ความช่วยเหลือ
เพื่อแสดงให้คุณเห็นถึงเป้าหมาย โดยปกติคุณเริ่มต้นด้วยหนึ่งในเป้าหมายที่เปิดตัวโปรแกรมเพื่อช่วยคุณสร้าง .config
ไฟล์. สิ่งเหล่านี้จะเป็น ทำการกำหนดค่า
, ทำการกำหนดค่าเมนู
, ทำ xconfig
และอื่น ๆ อีกมากมาย
ทำ
จะเรียกใช้เป้าหมายเริ่มต้นซึ่งรวบรวมเคอร์เนลโดยใช้ตัวเลือกที่ระบุในไฟล์ .config ทำโมดูล
จะรวบรวมเฉพาะบิตที่ทำเครื่องหมายเป็นโมดูลใน .config
ไฟล์. ระหว่างสองคำสั่งนี้คุณควรลงท้ายด้วยเคอร์เนล vmlinuz และไบนารีโมดูลเคอร์เนลจำนวนมาก สิ่งที่ Linux Kernel เป็น/ทำนั้นอยู่นอกเหนือขอบเขตของโพสต์นี้ แต่เรื่องสั้นก็คือมันเป็นซอฟต์แวร์ศูนย์กลางของระบบปฏิบัติการ (หากทั้งระบบเป็น nut เคอร์เนลจะเป็นแกนกลางใช่ไหม ). มันทำงานที่ระดับสิทธิ์สูงสุดบนโปรเซสเซอร์และเป็นซอฟต์แวร์ชิ้นเดียวที่โต้ตอบโดยตรงกับหน่วยความจำและฮาร์ดแวร์ และซอฟต์แวร์อื่น ๆ ทั้งหมดในระบบจะพูดคุยกับเคอร์เนลเพื่อให้นายหน้าเข้าถึงฮาร์ดแวร์ (มีคำเตือนประมาณ 20 ข้อในคำอธิบายนั้น แต่ครอบคลุมถึง 80% ของวิธีการทำงานของสิ่งต่างๆ ที่พบบ่อยที่สุด)
แต่หวังว่านั่นจะช่วยให้คุณมีบริบทเพียงพอในการค้นหาข้อมูลที่เป็นประโยชน์มากขึ้น หากคุณค้นหา "compile linux kernel" คุณควรได้รับทรัพยากรครึ่งโหลในทุกระดับความซับซ้อน คำแนะนำอย่างเป็นทางการอยู่ที่ linux.orgแต่วัชพืชจะเข้าสู่วัชพืชอย่างรวดเร็วและไม่เป็นประโยชน์มากนักหากนี่เป็นครั้งแรกของคุณ
ใน Ubuntu (และ distros ส่วนใหญ่) make อยู่ในไฟล์ ทำ
แพ็คเกจดังนั้นจึงติดตั้งด้วย sudo apt ติดตั้ง
อย่างไรก็ตาม ในการสร้างเคอร์เนล คุณจะต้องมีโปรแกรมอื่นๆ ด้วย ดังนั้นโดยทั่วไปแล้ว คุณต้องการติดตั้ง build toolchain และอุปกรณ์เสริมด้วย sudo apt ติดตั้ง build-essential
ซึ่งรวมถึงการทำ