पर असमर्थ करने में असमर्थ मैं क्यूमू पर्यावरण में जीडीबी का उपयोग करके चरण के अनुसार कर्नेल बूटअप अनुक्रम चरण को समझने की कोशिश कर रहा हूं।क्यूमू में जीडीबी का उपयोग कर लिनक्स कर्नेल डिबगिंग फ़ंक्शन या दिए गए एड्रेस
नीचे मेरी सेटिंग है: -
में चल रहे एक टर्मिनल im
~/Qemu_arm/bin/qemu-system-arm -M vexpress-a9 -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ./arch/arm/boot/zImage -append "root=/dev/mmcblk0 console=ttyAMA0" -sd ../Images/RootFS.ext3 -serial stdio -s -S
दूसरे टर्मिनल
arm-none-linux-gnueabi-gdb vmlinux
Reading symbols from vmlinux...done.
(gdb) target remote :1234
Remote debugging using :1234
0x60000000 in ??()
मेरा प्रश्न में है कि कैसे इन/चाप/बांह कोड के लिए सेटअप ब्रेकप्वाइंट/बूट/संपीड़ित/* फाइलें।
उदाहरण के लिए मैंने misc.c में परिभाषित decompress_kernel के लिए ब्रेक पॉइंट सेट करने का प्रयास किया।
केस 1:
(gdb) b decompress_kernel
Function "decompress_kernel" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (decompress_kernel) pending.
(gdb) c
Continuing.
ऊपर एक समारोह qemu बूटिंग है हिट करने के लिए सक्षम नहीं है।
केस 2:
(gdb) b *0x80008000
Breakpoint 1 at 0x80008000: file arch/arm/kernel/head.S, line 89.
(gdb) c
Continuing.
इस मामले में भी इसकी बजाय हिट करने के लिए सक्षम नहीं qemu बूट है।
केस 3:
(gdb) b start_kernel
Breakpoint 1 at 0x8064d8d8: file init/main.c, line 498.
(gdb) c
Continuing.
Breakpoint 1, start_kernel() at init/main.c:498
498 {
(gdb)
इस मामले समारोह में मार रहा है और मैं कदम से सक्षम डिबग कदम हूँ।
नोट: मैं डिबग, अर्ली printk सक्षम है और
hbreak की कोशिश की है तो मेरी क्वेरी है
1)why some funtions are not able to hit break points?
2)Is this qemu limitation or do i need enable something more ?
3)do i need to append any extra parameters ?
4)how to Debug early kernel booting
बस सोच रहा है कि फ़ंक्शन को कॉल किया गया है या नहीं। क्या आप एक प्रिंटक जोड़ सकते हैं और पुष्टि कर सकते हैं कि फ़ंक्शन कहा जाता है ?? – Jeyaram
@ जेयराम स्पष्ट रूप से फ़ंक्शन को कॉल किया जाना चाहिए, एक बार कर्नेल बूटअप, "लिनक्स को असंप्रेषित करना ......., कर्नेल को बूट करना"। यह decompress_kernel() फ़ंक्शन –
सहमत द्वारा किया गया था। यही वह है जो मैं उलझन में हूं। लेकिन क्या होता है यदि कर्नेल छवि संपीड़ित नहीं है ?? क्या आप "असम्पीडित लिनक्स ....... कर रहे हैं, कर्नेल को बूट कर रहे हैं" संदेश ?? – Jeyaram