คำถามติดแท็ก kernel

ทุกอย่างเกี่ยวกับเมล็ด UNIX: การพัฒนา, การกำหนดค่า, การรวบรวม, การออกแบบและอื่น ๆ

1
แผนผังแหล่งที่มาของเคอร์เนลประกอบด้วยอะไร? สิ่งนี้เกี่ยวข้องกับส่วนหัวเคอร์เนลของ Linux หรือไม่
ในหนังสือที่ผมมักจะอ่านอ้างอิงถึงแหล่งที่มาของลินุกซ์ที่ต้นไม้/usr/src/linuxกับชุดปกติของไดเรกทอรีย่อย ( arch, block, crypto, ... ) ฉันคาดหวังว่าต้นไม้ต้นนี้จะมีไฟล์ไบนารีที่สร้างเคอร์เนล ในระบบของฉัน (Ubuntu 10.04) ... สำหรับเมล็ดที่แตกต่างกันที่ฉันมี (โดยใช้การดาวน์โหลดซอฟต์แวร์อัตโนมัติไม่ได้ติดตั้งด้วยตนเอง) ฉันค้นหาในตำแหน่งนี้แทนสองไดเรกทอรีย่อยสำหรับแต่ละเคอร์เนลดังนี้ /usr/src/linux-headers-2.6.32-22 /usr/src/linux-headers-2.6.32-22-generic ในไดเรกทอรีย่อยฉันคาดว่าไฟล์ไบนารีหมู่คนอื่น ๆ อย่างไรก็ตามฉันตรวจสอบจำนวนต้นไม้ที่เหมาะสมและไดเรกทอรีย่อยสุดท้ายจากที่นี่ดูเหมือนจะมีเสมอMakefile(เมื่ออ่านมันมักจะฟังดูเหมือนไฟล์กำหนดค่าแล้วเป็นไฟล์ติดตั้ง) รวมถึงไฟล์อื่น ๆ ที่แยกบางครั้ง (ส่วนใหญ่Kconfig) คำถามของฉันอาจไร้เดียงสา แต่ฉันสับสนเล็กน้อย คือ (2) สิ่งที่ฉันควรคาดหวังให้เห็นในแผนผังแหล่งที่มาของเคอร์เนล และทำไมฉันจึงมีการอ้างอิงที่ชัดเจนถึง 'ส่วนหัว' ฉันจำเป็นต้องติดตั้งlinux-generic-headersในขณะที่กลับไปหาซอฟต์แวร์อื่นและไม่แน่ใจว่าสิ่งนี้อาจเกี่ยวข้อง ฉันรู้ว่ามีเหตุผลที่ดีสำหรับ makefiles (เช่นการติดตั้งโมดูลในไดเร็กตอรี่ย่อย / ไดร์เวอร์), แต่ (มาก) makefiles เท่านั้น?
25 ubuntu  kernel  source 

1
การใช้งาน CPU สูงด้วย CFS?
ฉันถามคำถามก่อนหน้านี้เพื่อลองและแยกแหล่งที่มาของการเพิ่มขึ้นของการใช้งาน CPU เมื่อย้ายแอปพลิเคชันจาก RHEL 5 ไปยัง RHEL 6 การวิเคราะห์ที่ฉันทำเพื่อดูเหมือนจะบ่งชี้ว่าเกิดจาก CFS ในเคอร์เนล ผมเขียนแอพลิเคชันทดสอบและพยายามตรวจสอบว่านี้คือกรณี (การประยุกต์ใช้การทดสอบเดิมลบออกให้พอดีกับขนาด จำกัด แต่ยังคงมีอยู่ในrepo คอมไพล์ ฉันรวบรวมมันด้วยคำสั่งต่อไปนี้ใน RHEL 5: cc test_select_work.c -O2 -DSLEEP_TYPE=0 -Wall -Wextra -lm -lpthread -o test_select_work จากนั้นฉันก็เล่นกับพารามิเตอร์จนกระทั่งเวลาดำเนินการต่อการทำซ้ำประมาณ 1 ms ใน Dell Precision m6500 ฉันได้ผลลัพธ์ต่อไปนี้ใน RHEL 5: ./test_select_work 1000 10000 300 4 time_per_iteration: min: 911.5 us avg: 913.7 …

4
ฉันจะจองบล็อกหน่วยความจำจากเคอร์เนล Linux ได้อย่างไร
ฉันมีอุปกรณ์ที่ต้องการบล็อกหน่วยความจำที่สงวนไว้ แต่เพียงผู้เดียวโดยไม่มีระบบปฏิบัติการแทรกแซง มีวิธีใดบ้างที่จะบอก BIOS หรือระบบปฏิบัติการว่ามีการสำรองบล็อกหน่วยความจำไว้และต้องไม่ใช้งานหรือไม่ ฉันใช้อุปกรณ์นี้กับเครื่อง openSUSE

1
ฉันต้องมีสิทธิ์รูท (admin) เพื่อเรียกใช้เครื่องมือ 'perf' userspace หรือไม่ (เหตุการณ์ perf ถูกเปิดใช้งานในเคอร์เนล Linux)
ฉันจำเป็นต้องเรียกใช้perfเครื่องมือ userspace ในฐานะผู้ดูแลระบบ (รูท) หรือฉันสามารถรัน (หรืออย่างน้อยคำสั่งย่อยบางอย่าง) ในฐานะผู้ใช้ธรรมดาได้หรือไม่?

5
Linux ไม่ได้ใช้การแบ่งกลุ่ม แต่แบ่งหน้าเท่านั้น
Linux Programming Interfaceแสดงโครงร่างของพื้นที่ที่อยู่เสมือนของกระบวนการ แต่ละภูมิภาคในแผนภาพเป็นเซ็กเมนต์หรือไม่ จากความเข้าใจ Linux Kernel , ถูกต้องหรือไม่ว่าต่อไปนี้หมายความว่าหน่วยการแบ่งเซ็กเมนต์ใน MMU แมปเซ็กเมนต์และออฟเซ็ตภายในเซ็กเมนต์ไปยังที่อยู่หน่วยความจำเสมือนและหน่วยเพจจะแมปที่อยู่หน่วยความจำเสมือนกับที่อยู่หน่วยความจำทางกายภาพ หน่วยความจำการจัดการหน่วย (MMU) แปลงที่อยู่เชิงตรรกะเป็นที่อยู่เชิงเส้นโดยใช้วงจรของฮาร์ดแวร์ที่เรียกว่าหน่วยการแบ่งส่วน; ต่อมาวงจรฮาร์ดแวร์ตัวที่สองที่เรียกว่าหน่วยเพจจะแปลงที่อยู่เชิงเส้นเป็นที่อยู่ทางกายภาพ (ดูรูปที่ 2-1) ถ้าอย่างนั้นทำไมมันถึงบอกว่าลีนุกซ์ไม่ได้ใช้การแบ่งกลุ่ม แต่เป็นเพจจิ้งเท่านั้น? การแบ่งกลุ่มได้รวมอยู่ในไมโครโปรเซสเซอร์ 80x86 เพื่อสนับสนุนให้โปรแกรมเมอร์แยกแอปพลิเคชันของพวกเขาออกเป็นเอนทิตีที่เกี่ยวข้องกับเหตุผลเช่นรูทีนย่อยหรือพื้นที่ข้อมูลทั่วโลกและท้องถิ่น อย่างไรก็ตาม Linux ใช้การแบ่งกลุ่มในวิธีที่ จำกัด มาก ในความเป็นจริงการแบ่งส่วนและการแบ่งหน้าค่อนข้างซ้ำซ้อนเนื่องจากทั้งสองสามารถใช้เพื่อแยกพื้นที่ที่อยู่ทางกายภาพของกระบวนการ: การแบ่งส่วนสามารถกำหนดพื้นที่ที่อยู่เชิงเส้นที่แตกต่างกันให้กับแต่ละกระบวนการในขณะที่เพจจิ้งสามารถแมป . Linux ต้องการแบ่งหน้าเป็นการแบ่งกลุ่มด้วยเหตุผลต่อไปนี้: •การจัดการหน่วยความจำง่ายขึ้นเมื่อกระบวนการทั้งหมดใช้ค่าการลงทะเบียนเซกเมนต์เดียวกันนั่นคือเมื่อพวกเขาแชร์ที่อยู่เชิงเส้นชุดเดียวกัน •หนึ่งในวัตถุประสงค์การออกแบบของ Linux คือการพกพาไปยังสถาปัตยกรรมที่หลากหลาย โดยเฉพาะอย่างยิ่งสถาปัตยกรรม RISC ได้รับการสนับสนุนอย่าง จำกัด สำหรับการแบ่งส่วน Linux เวอร์ชัน 2.6 ใช้การแบ่งส่วนเมื่อจำเป็นโดยสถาปัตยกรรม 80x86 เท่านั้น

1
ใช้ devtmpfs สำหรับ / dev
ฉันสังเกตเห็นตัวเลือกต่อไปนี้ในเคอร์เนล: CONFIG_DEVTMPFS Device Drivers -> Generic Driver Options -> Maintain devtmpfs to mount at /dev และฉันเห็นว่ามันเปิดใช้งานโดยค่าเริ่มต้นในเคอร์เนลการกระจาย Debian 3.2.0-4-amd64 ฉันพยายามที่จะเข้าใจความแตกต่างของตัวเลือกนี้ โดยตัวเลือกนี้/devจะติดตั้งอยู่ในฐานะที่มีตัวเลือกนี้จะติดตั้งเป็นtmpfs devtmpfsนอกจากนั้นฉันไม่เห็นความแตกต่าง helpไม่ได้ชี้แจงให้กับฉันอย่างใดอย่างหนึ่ง สิ่งนี้จะสร้างอินสแตนซ์ของระบบไฟล์ tmpfs / ramfs ก่อนเวลาบูตเครื่อง ในระบบไฟล์นี้เคอร์เนลไดรเวอร์หลักเก็บรักษาโหนดอุปกรณ์ด้วยชื่อและการอนุญาตเริ่มต้นสำหรับอุปกรณ์ที่ลงทะเบียนทั้งหมดด้วยหมายเลขหลัก / รองที่ได้รับมอบหมาย มันมีไดเรกทอรีทำงานได้อย่างสมบูรณ์ / dev ซึ่งโดยปกติ udev จะทำงานอยู่ด้านบนจัดการสิทธิ์และเพิ่ม symlink ที่มีความหมาย ในสภาพแวดล้อมที่ จำกัด อย่างมากมันอาจให้ฟังก์ชั่น / dev ที่เพียงพอโดยไม่มีความช่วยเหลือเพิ่มเติม นอกจากนี้ยังช่วยให้ระบบกู้ภัยง่ายและจัดการหมายเลขหลัก / รองแบบไดนามิกได้อย่างน่าเชื่อถือ ใครช่วยอธิบายความแตกต่างระหว่างการใช้CONFIG_DEVTMPFSvs มาตรฐาน/dev?

2
การตั้งค่าโหมดเคอร์เนลเทียบกับ Framebuffer?
ด้วย KMS ไดรเวอร์กราฟิกจะถูกย้ายไปยังเคอร์เนล เนื่องจาก framebuffer อยู่ในเคอร์เนลอยู่แล้วฉันไม่คาดหวังว่าสิ่งนี้จะส่งผลกระทบต่อการทำงานของ framebuffer ถึงกระนั้นฉันอ่านว่า KMS จะควบคุม fb ให้เพิ่ม fb ต้องใช้ fb และต้องการการสนับสนุน fb เพื่อลบออก ห่า? คำตอบที่ฉันกำลังมองหาคือคำอธิบายของความสัมพันธ์ระหว่าง KMS และ framebuffer ฉันใช้ uvesafb เพื่อให้ได้ความละเอียดดั้งเดิมที่ tty จุดประสงค์ของฉันที่นี่คือเพื่อทำความเข้าใจว่าระบบทำงานอย่างไรกับ KMS นอกจากนี้ยังช่วยครอบคลุมสิ่งต่าง ๆ เช่น .. การเลื่อน KMS เร็วขึ้นหรือไม่ ยูทิลิตี้อย่าง fbterm และ fbida ทำงานเหมือนกันหรือไม่? เสถียรภาพดีขึ้นหรือไม่

1
การจัดตารางเวลากระบวนการแบบเรียลไทม์ใน Linux
ฉันได้เรียนรู้แนวคิดการตั้งเวลา ปัจจุบันความเข้าใจของฉันอยู่ในขณะนี้ดังต่อไปนี้ มีกระบวนการแบบเรียลไทม์และกระบวนการแบบเรียลไทม์ กระบวนการเวลาจริงไม่แสวงหาสามารถมีniceค่าลำดับความสำคัญของพวกเขาในช่วงของ-20ไป20 ค่าบวกที่สูงกว่าแสดงว่ากระบวนการมีลำดับความสำคัญต่ำกว่า กระบวนการเวลาจริงจะมีค่าความดีระบุว่าเป็น-ตามที่อธิบายไว้ในคำตอบนี้ที่นี่ นี่เป็นส่วนใหญ่เนื่องจากกระบวนการเรียลไทม์มีลำดับความสำคัญสูงกว่ากระบวนการที่ไม่ใช่เรียลไทม์และค่าความดีจะไม่นำมาใช้กับพวกเขา ตอนนี้ฉันสามารถใช้chrtเพื่อดูคุณสมบัติเรียลไทม์ของกระบวนการ สำหรับกระบวนการเรียลไทม์การchrtส่งออกให้เป็น chrt -p 5 pid 5's current scheduling policy: SCHED_FIFO pid 5's current scheduling priority: 99 อย่างที่เราเห็นสำหรับโพรเซส5ลำดับความสำคัญคือ 99 ซึ่งสูงที่สุด นอกจากนี้นโยบายการตั้งเวลาคือSCHED_FIFO ตอนนี้สำหรับกระบวนการที่ไม่ใช่แบบเรียลไทม์chrtจะให้เอาต์พุตเป็น chrt -p 22383 pid 22383's current scheduling policy: SCHED_OTHER pid 22383's current scheduling priority: 0 ในฐานะที่เราสามารถดูกระบวนการ22383ลำดับความสำคัญคือ 0 SCHED_OTHERและนโยบายการจัดตารางเวลาคือ คำถาม เป็นไปได้หรือไม่ที่ฉันจะทำให้กระบวนการใด ๆ …

2
วิธีการเปลี่ยน arch linux เป็น lts kernel?
ฉันกำลังเรียกใช้การติดตั้งเซิร์ฟเวอร์หัวขาดของ arch linux อัตราที่สูงของการอัพเกรดเคอร์เนลทำให้ฉันปวดหัวบางบำรุงรักษาและฉันจึงต้องการที่จะสลับไปยังLTS เคอร์เนล ฉันติดตั้งlinux-ltsและlinux-lts-headersแพ็คเกจแล้ว ตอนนี้ฉันได้รับการติดตั้งทั้งสองเมล็ดแล้ว แต่ฉันไม่รู้จะทำอย่างไรต่อไปจากที่นี่ เอกสารอธิบาย : [ ... ] คุณจะต้องอัปเดตการตั้งค่าไฟล์ bootloader ของคุณเพื่อใช้ LTS เคอร์เนลและดิสก์ RAM: และvmlinuz-linux-ltsinitramfs-linux-lts.img ฉันพบพวกมันแล้วในส่วนของการบู๊ต: 0 ✓ root@host ~ $ ll /boot/ total 85M 4,0K drwxr-xr-x 4 root root 4,0K 21. Mai 13:46 ./ 4,0K drwxr-xr-x 17 root root 4,0K 4. Apr 15:08 ../ …
24 arch-linux  kernel  grub  lts 

1
การเรียกระบบ getrusage: อะไรคือ“ ขนาดชุดผู้พักอาศัยสูงสุด
man getrusage 2 กล่าวว่า ru_maxrss (since Linux 2.6.32) This is the maximum resident set size used (in kilobytes). For RUSAGE_CHILDREN, this is the resident set size of the largest child, not the maximum resident set size of the process tree. ดังนั้นตัวเลขนี้มีความหมายว่าอะไร?

1
ตัวเลือกเคอร์เนล 'i8042.nomux = 1' ทำอะไรในระหว่างการบูท Ubuntu
ฉันมีแล็ปท็อปที่มีทัชแพดสำหรับแขกหลายคน ทัชแพดของฉันไม่ทำงานใน Linux distro ใด ๆ เช่น Ubuntu, Fedora, openSUSE, Linux Mint, Knoppix, Puppy, Slitaz และอื่น ๆ อีกมากมาย ฉันลองหลายสิ่งหลายอย่างแล้ว แต่ไม่มีอะไรทำงาน ฉันต่อสู้กับไดรเวอร์ Synaptics มานานกว่าหนึ่งปีแล้ว แต่ก็ไม่ได้ผลเช่นกัน จากนั้นบางที่ฉันอ่านเกี่ยวกับi8042.nomuxตัวเลือกเคอร์เนล ดังนั้นฉันบูตอูบุนตูด้วยตัวเลือกต่อไปนี้: i8042.nomux=1 i8042.reset นี่ทำให้ทัชแพดของฉันทำงานได้กับอูบุนตูทุกรุ่นและอนุพันธ์เช่น Linux Mint ฉันอยากรู้เกี่ยวกับตัวเลือกเหล่านี้ ถ้าฉันรู้ว่ามันทำอะไรฉันจะสามารถใช้ทัชแพดของฉันในลินุกซ์ distros ทั้งหมดเนื่องจากตัวเลือกนี้ใช้ได้กับ Ubuntu เท่านั้น

2
ปัญหาการเชื่อมต่อกับที่จัดเก็บข้อมูลภายนอก USB3 บน Linux (ปัญหาไดรเวอร์ UAS)
บน Ubuntu 15.10 เมื่อฉันต้องการฟอร์แมตโดยใช้ระบบไฟล์ NTFS ดิสก์ 4TO ภายนอกที่เชื่อมต่อโดย USB3 (บนฮาร์ดไดรฟ์ StarTech USB / eSATA ฮาร์ดดิสก์) ฉันมีข้อผิดพลาด I / O จำนวนมากและรูปแบบล้มเหลว ฉันลอง GParted v 0.19 และ GParted ในซีดีสดล่าสุดgparted-live-0.23.0-1-i586.isoด้วยปัญหาเดียวกัน หลังจากนั้นและใช้ GParted บน Ubuntu 15.10 และการเชื่อมต่อ USB3 เดียวกันฉันพยายามจัดรูปแบบext4โดยไม่มีปัญหา มันแปลกจริงๆ เนื่องจากฉันไม่ทราบว่าmkfs.ext4เครื่องมือที่ใช้โดย GParted เพื่อจัดรูปแบบดิสก์ทดสอบดิสก์ที่ชอบ (หรือไม่ชอบ) mkntfsฉันคิดว่าปัญหานี้เชื่อมโยงกับดิสก์ใหม่ก่อน บางทีดิสก์ใหม่นี้อาจทำให้เกิดปัญหา ดังนั้นฉันจึงลองเรียกใช้e2fsck -cHDD นี้ บน Ubuntu 15.10 e2fsck -cหยุดที่ …

5
การใช้ O_DIRECT บน Linux
หากคำถามนี้เป็นเชิงโปรแกรมเมอร์เกินไปแจ้งให้เราทราบ ฉันสงสัยว่ามีคนคุ้นเคยกับการตั้งค่าสถานะ O_DIRECT สำหรับการเรียกระบบ open () บน Linux 2.6 หรือไม่? ไลนัสดูถูกการใช้งาน แต่การเขียนไฟล์ประสิทธิภาพสูงดูเหมือนจะบ่งบอกถึงการใช้งาน ฉันต้องการทราบประสบการณ์และคำแนะนำในโลกแห่งความเป็นจริงใด ๆ ข้อมูลเพิ่มเติม: แอพลิเคชันที่ฉันใช้ไม่รักษาแคชของตัวเองและในการทำเพื่อให้บรรลุเฉลี่ยของ 5 เท่าหรือความเร็วมากขึ้น เมื่อเขียนไปยังไฟล์เนื้อหาของแคชจะต้องถูกเขียนออกไปยังแคชของระบบไฟล์ซึ่งดูเหมือนว่าซ้ำซ้อนและกังวลเรื่องประสิทธิภาพ

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

4
Kernel Hacking Environment
ฉันทำงานในระบบปฏิบัติการฝังตัวเช่น uCOS, ThreadX ขณะที่ฉันเขียนรหัสแอพใน Linux ตอนนี้ฉันวางแผนที่จะเริ่มเรียนรู้ Linux Kernel ฉันมีคำถามสองสามข้อเกี่ยวกับสิ่งแวดล้อม อันไหนดีที่สุด distro ซึ่งมีเครื่องมือที่ใช้งานง่ายสำหรับการพัฒนาเคอร์เนล (จนถึงตอนนี้ฉันใช้ RHEL และ Fedora ในขณะที่ฉันพอใจกับสิ่งเหล่านี้มันก็ดูเหมือนว่า Ubuntu จะมีสคริปต์ที่สร้างขึ้นเพื่อการรวบรวมเคอร์เนลอย่างง่ายเช่นmake_kpkg) คุณสามารถอธิบายการตั้งค่าที่ดีที่สุดสำหรับการดีบักเคอร์เนลได้หรือไม่? ในขณะที่การดีบัก OS อื่นที่ฝังตัวฉันได้ใช้พอร์ตอนุกรมเพื่อถ่ายโอนข้อมูลความคืบหน้า JTAG และอื่น ๆ การตั้งค่าเคอร์เนล Linux ชนิดใดที่ใช้? (เครื่องทดสอบที่ใช้พอร์ตอนุกรมของฉันจะเพียงพอสำหรับความต้องการของฉันหรือไม่ถ้าใช่จะกำหนดค่าเคอร์เนลเพื่อถ่ายโอนข้อมูลไปยังพอร์ตอนุกรมได้อย่างไร) ฉันวางแผนที่จะเปลี่ยนเส้นทางข้อความเคอร์เนลไปยังคอนโซลซีเรียลซึ่งจะอ่านในแล็ปท็อปของฉัน เครื่องมือใดที่ดีที่สุดสำหรับการดีบักและติดตามรหัสเคอร์เนล ดังกล่าวก่อนหน้านี้ serial console เป็นวิธีเดียวหรือไม่ หรือมีอินเตอร์เฟสชนิด IDE / JTAG สำหรับพีซีอยู่หรือไม่

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