Score:0

"$ make" และ "$ make modules" ทำอะไรเมื่อรวบรวม / สร้างเคอร์เนล

ธง ph

ฉันกำลังพยายามสร้างเคอร์เนลที่กำหนดค่าไว้ เพื่อนร่วมงานของฉันจึงบอกให้ฉันพิมพ์ในเทอร์มินัล

ทำ

หลังจากนั้น

ทำโมดูล

ฉันพยายาม google แต่ผลลัพธ์ที่ใกล้เคียงที่สุดคือ นี้ แต่พอเลื่อนลงมาก็ขึ้นว่า อูมาเกะ, ไม่ ทำ.

cn flag
Ray
คำถามของคุณไม่เกี่ยวกับ Ubuntu เลย นั่นคือจุดที่คุณทำผิดพลาดในการค้นหาโดย Google เริ่มจาก[ที่นี่](https://en.wikipedia.org/wiki/Make_(software))แทน
waltinator avatar
it flag
อ่าน `มนุษย์สร้างขึ้น`
Score:0
ธง tj

ฉันจะไปตอบคำถามจริงของคุณ แต่ฉันจะใช้วิธีอ้อมเพื่อไปที่นั่นเพื่อให้คุณมีบริบทที่ดีขึ้น

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 ซึ่งรวมถึงการทำ

ph flag
ตรงหัวใจ. ขอบคุณมาก ๆ!

โพสต์คำตอบ

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