ไดรเวอร์อุปกรณ์ตัวใดที่สร้างไว้ในเคอร์เนล


14

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

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

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


คำตอบ:


10

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

โดยปกติแล้วโมดูล. koจะถูกเก็บไว้ภายใต้/libไดเรกทอรีในรูทพาร์ติชันของคุณ ในการใช้สิ่งเหล่านี้เคอร์เนลจะต้องสามารถตรวจจับและเข้าถึงอุปกรณ์เก็บข้อมูลพื้นฐานก่อนแล้วจึงเข้าถึงระบบไฟล์ ดังนั้นจึงปลอดภัยที่จะสมมติว่าเคอร์เนลที่ไม่มี SATA / SCSI และ ext2 / 3/4 รองรับการติดตั้งในตัวซึ่งจะไม่สามารถบูตได้จริง ๆ )

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

หากคุณสร้างเคอร์เนลของคุณเองคุณสามารถทำสิ่งเดียวกันได้:

ป้อนคำอธิบายรูปภาพที่นี่

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

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

3

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

ตัวอย่างเช่นหลาย ๆ คนใช้ระบบไฟล์ ext2 บนพาร์ติชั่น/ boot ด้วยเหตุนี้เคอร์เนลจึงต้องสามารถอ่านระบบไฟล์ ext2 ในเวลาบูต เพื่อให้บรรลุผลนี้โมดูล ext2 จะถูกสร้างขึ้นในเคอร์เนลเอง

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


1
ใช่ย่อหน้าสุดท้ายของคุณคือสิ่งที่กระตุ้นให้คำถามของฉันซื่อสัตย์ ขอบคุณสำหรับคำตอบ
mathematician1975

1

สิ่งเหล่านี้ขึ้นอยู่กับวิธีที่คุณกำหนดค่า build ของเคอร์เนล linux

ภายในกระบวนการรวบรวมคุณจะสามารถ:

  • รวบรวมเคอร์เนลด้วยหรือไม่สนับสนุนโมดูล (มักจะมาพร้อมกับการสนับสนุนโมดูล)
  • รวบรวมไดรเวอร์เป็นโมดูลหรือเป็นซอฟต์แวร์ในตัวลงในเคอร์เนล

เพื่อทำความเข้าใจว่าไฟล์. ko มีไว้สำหรับ/programming/10476990/difference-between-o-and-ko-file

สาเหตุที่คุณมีเอาต์พุตว่างอยู่lsmodเพราะคุณมีเคอร์เนลเสาหิน

วิธีที่รวดเร็วสำหรับการแสดงรายการโมดูลทั้งหมดของคุณ (หากมีอยู่) คือการรันคำสั่งนี้

find /lib/modules/*/ -type f -iname '*.ko' | less

สังเกตเห็นการใช้lessคุณสามารถใช้เพจเจอร์ทุกครั้งที่คุณต้องการหรือเปลี่ยนเส้นทางเอาท์พุทที่คุณต้องการ


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

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

ดังนั้นในการทำเช่นนี้ฉันจะต้องได้รับเคอร์เนลจากผู้จำหน่ายรวบรวมตัวเองด้วยการแก้ไขไฟล์. config ที่ถูกต้องแล้วฉันจะติดตั้งไดรเวอร์อื่น ๆ ได้ไหม?
นักคณิตศาสตร์

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

ประสบการณ์ของฉันที่โมดูลถูกปิดใช้งานสำหรับ Linux ที่ฝังตัวด้วยเหตุผลเรื่องความเร็วและขนาดและเมล็ดสำหรับอุปกรณ์ดังกล่าวมักจะมีไดรเวอร์ที่ล้าสมัยและถูกสร้างขึ้นบนพีซีของพนักงานบางคนโดยไม่มีประโยชน์จากแหล่งควบคุม ขอให้โชคดี
Stephen M. Webb

0

ดูเนื้อหาของไฟล์/ lib / modules / $ (uname -r) /modules.builtin

เช่นเพื่อค้นหาโมดูลที่เฉพาะเจาะจง

grep <module> /lib/modules/$(uname -r)/modules.builtin

เอกสาร / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? ไม่แน่ใจว่า OP ควรทำอะไร เขาควรจะรันบรรทัดแรกในเทอร์มินัลหรือไม่? นี่อาจเป็นคำตอบ แต่คุณช่วยอธิบายหน่อยได้ไหม?
ไม่ระบุชื่อ 2

0
ls /sys/module

ดูเหมือนว่าจะมีโมดูลในตัวและภายนอกทั้งหมด

แต่มันก็ดูเหมือนจะมีบางรายการที่ไม่ได้เป็นโมดูลจริง: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules

สิ่งที่ต้องทำ: อ่านแหล่งที่มาและทำความเข้าใจกับสิ่งที่ได้รับมี

ข้อดีของวิธีนี้คือการที่คุณไม่ต้องพึ่งพาความสามารถในการค้นหาการตั้งค่าเคอร์เนลภายใต้หรือ/boot/proc/config.gz

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