ฉันจะรับซอร์สโค้ดเคอร์เนลได้อย่างไร


25

ฉันวางแผนที่จะเขียนไดรเวอร์อุปกรณ์บางตัวและฉันต้องการแหล่งเคอร์เนลของ Linux ฉันเคอร์เนลรุ่น 3.2.0-23 ทั่วไป-pae และฉันดาวน์โหลดภาพจากนี้ ในหลาย ๆ บทความที่ฉันได้อ่านมันบอกฉันว่าฉันต้องมีเคอร์เนลทรีทั้งหมดเพื่อเริ่มแทรกโมดูลใหม่

มันเพียงพอหรือไม่ถ้าฉันดาวน์โหลดภาพนี้และวางลงในusr/src/โฟลเดอร์หรือฉันต้องทำอย่างอื่น?


1
ฉันมักจะติดตั้งแพคเกจ 'linux-source' จาก synaptic เมื่อฉันรวบรวมแบบกำหนดเองสำหรับหนึ่งในเครื่องของฉัน แต่เมื่อคุณกำลังพัฒนาคุณอาจต้องใช้เวอร์ชันล่าสุด ลิงค์นี้อาจมีประโยชน์กับคุณ: help.ubuntu.com/community/Kernel/Compile
Mark Paskal

คำตอบ:


27

นี่จะได้รับแหล่งที่มาของเคอร์เนลหุ้น:

apt-get source linux-source

คุณสามารถตรวจสอบรุ่นของเคอร์เนลที่ใช้งานในลักษณะนี้:

uname -r

ซึ่งจะพิมพ์สิ่งที่ชอบ:

3.13.0-46-generic

คุณสามารถค้นหารายชื่อของแพ็คเกจแหล่งข้อมูลปัจจุบันที่มีอยู่ในระบบของคุณผ่าน:

apt-cache search linux-source

ในการรับเคอร์เนลเวอร์ชันอัปสตรีม:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git

ในลิงก์ด้านบน 'trusty' เป็นชื่อรหัสสำหรับเวอร์ชันของ Ubuntu คุณสามารถค้นหาชื่อรหัสสำหรับเวอร์ชันของ Ubuntu ที่คุณติดตั้งผ่าน:

cat /etc/lsb-release

ถ้าฉันใช้ git เพื่อโคลนฉันจะระบุเวอร์ชันได้อย่างไร นอกจากนี้ถ้าฉันโคลนมันเป็นก็พอถ้าผมคัดลอกกบาลมันลงไปใน usr / src โฟลเดอร์
Sab

ที่เก็บ git นั้นถูกเก็บไว้ที่ 3.2.0 โดยเฉพาะ; มันติดตามสิ่งที่อยู่ใน Ubuntu Precise (12.04) หากคุณต้องการเปลี่ยนเวอร์ชั่นอื่น ubuntu-precision.git เป็น ubuntu-quantal.git หรืออะไรก็ตาม มันควรจะเป็นเพียงแค่คัดลอกลงใน usr / src
ไบรซ์

ตกลงขอบคุณ - แต่คุณพบลิงค์ git นั้นได้อย่างไร
Sab


และฉันจะหาต้นตอของซอร์สได้ที่ไหนเมื่อทำการติดตั้งด้วย ... เจ้ากรรมข้าควรอ่านให้ดีกว่านี้ คำตอบที่บอกว่าไม่apt-get source apt-get installกว่าแหล่งต้นไม้ที่จะสิ้นสุดในของคุณเส้นทางปัจจุบัน
สำรองข้อมูล Pro

8
apt-get source linux

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

แต่ถ้าคุณต้องการค้นหาแหล่งที่รักษาไว้คุณสามารถเรียกใช้:

apt-cache showsrc linux

มองหาแอตทริบิวต์ 'Vcs-' (ระบบควบคุมเวอร์ชัน) โดยปกติจะเป็น git (Vcs-Git) หรือคลังเก็บ Mercurial

หมายเหตุ - คำสั่งเหล่านี้ใช้งานได้กับแพ็คเกจใด ๆ เพียงแทนที่ 'linux' ด้วยแพ็คเกจที่คุณสนใจและยังทราบว่า 'apt-get source' ไม่จำเป็นต้องเข้าถึง sudo และจะถ่ายโอนแหล่งข้อมูลในไดเรกทอรีปัจจุบันของคุณ


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

นี่เป็นเพียงการดาวน์โหลดส่วนหัวของลินุกซ์/usr/src- ไม่ใช่แหล่งเคอร์เนลแบบเต็ม - บน Ubuntu 16.04
Pierz

4

ดาวน์โหลดซอร์สโดยตรงจาก Launchpad

ทุกคนน่าแปลกใจพอที่จะแนะนำapt-get source ว่ามันใช้งานไม่ได้เป็นส่วนใหญ่หากคุณกำลังมองหาเคอร์เนลเวอร์ชั่นเฉพาะ:

สมมติว่าคุณต้องการซอร์สเคอร์เนลสำหรับ 3.19.0-58:
apt-get source linux-image-3.19.0-58-genericจะได้รับซอร์สสำหรับเคอร์เนลล่าสุดในซีรีย์: 3.19.0-80 ในกรณีนี้ซึ่งไม่ใช่สิ่งที่คุณขอ

ดังนั้นคุณมีสองทางเลือก:

1) ยอมแพ้ติดตั้งเคอร์เนล 3.19.0-80 และใช้ apt-get source

2) รับแหล่งข้อมูลโดยตรงจาก launchpad:

การเชื่อมโยง

  • วางไว้ในไดเรกทอรีใหม่แกะด้วย dpkg-source -x *.dsc

หมายเหตุ:

  • จะต้องมีวิธีที่ดีกว่า
  • คุณสามารถรับเวอร์ชันที่คุณต้องการจากคอมไพล์ แต่คุณอยู่ในขั้นตอนการดาวน์โหลดขนาดใหญ่ โปรดดูที่ "การได้รับแหล่งเคอร์เนลให้มีการปล่อย Ubuntu ใช้คอมไพล์" ในอูบุนตูวิกิพีเดีย Kernel Source Code

ขอบคุณสำหรับการอธิบายอย่างชัดเจน อย่างไรก็ตามฉันยังคงไม่สามารถค้นหาแหล่งที่มาสำหรับ linux-image-4.15.0-39-generic กระบวนการนี้มีความซับซ้อนโดยไม่จำเป็น ฉันได้ลองใช้ googling แล้ว แต่หาแพ็คเกจที่มีเพียงไม่กี่กิโลไบท์เท่านั้น เคล็ดลับใด ๆ
ลืม

3

เพียงเลือกหนึ่งรายการจาก:

sudo apt install linux-source  # downloads into system directory
sudo apt source linux-source  # downloads into working directory

หากคุณได้รับแจ้งให้ระบุ URL 'แหล่งที่มา' บางส่วนของคุณsources.listให้ไปแก้ไข/etc/apt/sources.listไฟล์ของคุณและยกเลิกการลบเครื่องหมายในdeb-srcบรรทัดที่ต้องการตัวอย่างเช่น (หากคุณใช้ Xenial):

deb http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted

การลบ#บรรทัดสุดท้ายนี้ทำให้แหล่งเก็บข้อมูลสำหรับดาวน์โหลดรวมถึงซอร์สเคอร์เนล

หมายเหตุ:

  • ใช้เครื่องมือที่ทันสมัย apt-getหลีกเลี่ยงการ
  • คำสั่งเหล่านี้ดาวน์โหลดซอร์สโค้ดสำหรับเคอร์เนลปัจจุบันของคุณ(ใน4.4.0-75-genericตัวอย่างของฉัน)
  • เมื่อดาวน์โหลดลงในไดเรกทอรีระบบไฟล์จะถูกเก็บไว้ใน/usr/src/linux-source-4.4.0/(ตัวอย่าง)

ใช้งานไม่ได้สำหรับฉัน (แต่ไม่มีรุ่น apt-get) ฉันใช้ Ubuntu 16.04.4, เคอร์เนล 4.4.0-98-generic มีข้อความระบุว่า "คุณต้องใส่ URI 'แหล่งที่มา' บางรายการในแหล่งรายการของคุณ" ฉันไม่รู้ว่าจะทำอย่างไร
Andrew Bainbridge

@AndrewBainbridge ฉันเพิ่มข้อมูลเกี่ยวกับสิ่งนั้น ตกลงสำหรับคุณตอนนี้หรือไม่
ทิม

ใช่ขอบคุณ. มันเป็นความคิดเห็นที่โง่จากฉัน ฉันต้องการเพียง google ข้อความข้อผิดพลาด อย่างไรก็ตามมี upvote สำหรับความพยายามของคุณ
Andrew Bainbridge
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.