এটি কর্নেল। মনে রাখবেন কীবোর্ডটি হল হার্ডওয়্যার এবং সেখানে ঘটে যাওয়া সমস্ত কিছুই কার্নেলের মধ্য দিয়ে যায়; ভিটি স্যুইচিংয়ের ক্ষেত্রে, এটি ইভেন্টটি পুরোপুরি নিজেই পরিচালনা করে এবং ইউজারস্পেসে কোনও কিছু দেয় না (তবে, আমি বিশ্বাস করি যে এখানে একটি আইওএসটিএল সম্পর্কিত উপায় রয়েছে যার মাধ্যমে ইউজারস্পেস প্রোগ্রামগুলির সাথে জড়িত একটি সুইচ সম্পর্কে অবহিত হতে পারে এবং সম্ভবত এটি প্রভাবিত করে, কোন এক্স সন্দেহ নেই)।
কার্নেলের মধ্যে একটি কীম্যাপ বিল্ড রয়েছে; সাথে চলার সময় এটি সংশোধন করা যায় এবং এর সাথে loadkeys
দেখা হয় dumpkeys
:
[...]
keycode 59 = F1 F13 Console_13 F25
alt keycode 59 = Console_1
control alt keycode 59 = Console_1
keycode 60 = F2 F14 Console_14 F26
alt keycode 60 = Console_2
control alt keycode 60 = Console_2
keycode 61 = F3 F15 Console_15 F27
alt keycode 61 = Console_3
control alt keycode 61 = Console_3
[...]
কার্নেলের উত্সটিতে একটি ডিফল্ট কীম্যাপ ফাইল রয়েছে যা দেখতে একেবারে হ'ল; 3.12.2 এর জন্য এটি src/drivers/tty/vt/defkeymap.map
। আপনি দেখতে পাবেন যে এখানে একটি সম্পর্কিত ডিফিকেম্যাপ.c ফাইল রয়েছে (এটি দিয়ে উত্পন্ন করা যেতে পারে loadkeys --mktable
)। হ্যান্ডলিংটি রয়েছে keyboard.c
(এই সমস্ত ফাইল একই ডিরেক্টরিতে রয়েছে) যা set_console()
থেকেvt.c
কল আসে :
» grep set_console *.c
keyboard.c: set_console(last_console);
keyboard.c: set_console(i);
keyboard.c: set_console(i);
keyboard.c: set_console(value);
vt.c:int set_console(int nr)
vt_ioctl.c: set_console(arg);
আমি সেই তালিকা থেকে কিছু হিট সম্পাদনা করেছি; আপনি দ্বিতীয় শেষ লাইনে ফাংশন স্বাক্ষর দেখতে পারেন।
তাই এইগুলি স্যুইচিংয়ের সাথে জড়িত। আপনি কল ক্রম তাকান, অবশেষে তোমার কাছে ফিরে আসা kbd_event()
মধ্যে keyboard.c
। এটি মডিউলটির ইভেন্ট হ্যান্ডলার হিসাবে নিবন্ধিত হয়েছে:
(3.12.2 drivers/tty/vt/keyboard.c
লাইন 1473)
MODULE_DEVICE_TABLE(input, kbd_ids);
static struct input_handler kbd_handler = {
.event = kbd_event, <--- function pointer HERE
.match = kbd_match,
.connect = kbd_connect,
.disconnect = kbd_disconnect,
.start = kbd_start,
.name = "kbd",
.id_table = kbd_ids,
};
int __init kbd_init(void)
{
[...]
error = input_register_handler(&kbd_handler);
সুতরাং, kbd_event()
যখন সত্যিকারের হার্ডওয়্যার ড্রাইভারের কাছ থেকে কোনও কিছু বুদবুদ হয় (সম্ভবত কিছু থেকে drivers/hid/
বা drivers/input/
)) তবে এটি kbd_event
কোনও ফাংশন পয়েন্টারের মাধ্যমে নিবন্ধিত হওয়ার কারণে আপনি এটি ফাইলের বাইরে উল্লেখ করা দেখতে পাবেন না ।
কার্নেল যাচাই করার জন্য কিছু সংস্থান রয়েছে
- লিনাক্স ক্রস রেফারেন্স আইডেন্টিফাইয়ার অনুসন্ধান একটি দুর্দান্ত টুল।
- ইন্টারেক্টিভ লিনাক্স কার্নেল ম্যাপ ক্রস রেফারেন্স সরঞ্জামে একটি আকর্ষণীয় গ্রাফিকাল সামনে শেষ হয়।
- বিশাল লিনাক্স কার্নেল মেইলিং লিস্টের (এলকেএমএল) কয়েকটি historicalতিহাসিক সংরক্ষণাগার রয়েছে, যা কমপক্ষে 1995-এ ফিরে যায়; তাদের মধ্যে কিছু রক্ষণাবেক্ষণ করা হয় না এবং সার্চ বৈশিষ্ট্য ভেঙ্গে গেছে, কিন্তু gmane এক খুব ভাল কাজ মনে হয়। লোকেরা মেল তালিকায় প্রচুর প্রশ্ন করেছে এবং এটি বিকাশকারীদের মধ্যে যোগাযোগের একটি প্রাথমিক মাধ্যম।
- আপনি
printk
ট্রেসিংয়ের সহজ মাধ্যম হিসাবে উত্সটিতে আপনার নিজস্ব লাইনগুলি ইনজেকশন করতে পারেন (স্ট্যান্ডিও থেকে প্রিন্টফের সাহায্যে কার্নেল কোডে সমস্ত স্ট্যান্ডার্ড সি লিব ব্যবহার করা যায় না)। প্রিন্টক স্টাফগুলি সিসলগে শেষ হয়।
ওল্ফগ্যাং মাউয়েরার ২. ker কার্নেল, প্রফেশনাল লিনাক্স কার্নেল আর্কিটেকচারের উপর একটি দুর্দান্ত বই লিখেছিলেন , যা উত্সের মধ্য দিয়ে যায়। গ্রেগ ক্রোয়াহ-হার্টম্যান , গত এক দশক ধরে অন্যতম মূলনীতি, এর মধ্যে অনেক কিছুই লাথি মারছে।