از ماژول نویسی کرنل تا بقیه‌ی چیزهای خفن

خوب!
قضیه از اونجایی شروع میشه من کارهای سخت و خفن رو دوست دارم. حتی اگه آخرشم نتونم انجامش بدم :sunglasses:
یکی از اون کار‌ها ساختن ماژول برای کرنل لینوکس هست و البته یه کار خفن‌ترِ، ساختن کرنل! (کامیت زدن تو ریپازیتوری استاد لینوس!)

طبق صحبت‌هایی که با @lxsameer داشتیم توی تاپیک مربوط به درایورهای سخت‌افزاری کمیاب قرار شد یه تاپیک بزنم اینجا که به طور خاص درمورد ماژول نویسی کرنل و مسائل مرتبط صحبت کنیم.

طبق صحبت‌های تاپیک قبل:

که البته نفهمیدم «ستک» یعنی چی، ولی به خاطر بکگراندی که در زمینه‌ی برنامه نویسی میکرو کنترلر دارم، کاملا میدونم وجود نداشتن لایبرری و حجم باینری ۴کیلوبایتی یعنی چی :scream:

امیدوارم اینطور باشه چون تقریبا تمام کدهای C که زدم برای میکروکنترلر بوده.
میدونم چطوری میشه با ۳تا LED حدود ۲۰تا function رو دیباگ کرد :nerd_face:


خوب بریم سر اصل مطلب.
کسی رفرنس خوب برای یادگیری اعماق تاریک کرنل سراغ داره؟
یا از اون بهتر! پیشنهادی برای مسیر حرکت دارید؟

4 Likes

سلام
همونطور که میدونید نوشتن کرنل به این راحتی ها نیست و اگر بود گروه گنو کرنل hurd درست میکردن ، همون زمان که برنامه های آزاد رو درست کردن و دیگه از کرنلی که لینوس توروالدز نوشته بود استفاده نمیکردن . من خودم اگر قرار بود توی مسیری که شما در نظر داشتین جلو برم اول کتاب فقط برای تفریح رو میخوندم . بعدش یه تحقیق کامل میکردم و زبان c رو مسلط میشدم در حد تیم ملی بعد کامپایل کرنل رو شروع میکردم و بعد نوشتن ماژول برای کرنل (که این مورد رو شما انجام دادین :sweat_smile:) تا بیشتر با کرنل آشنا بشم . بعد کتابهایی که در مورد کرنل هست رو میخوندم و خصوصا کدهای کرنل رو . حالا اگر عمری هم باقی میموند و نتیجه میداد کدهای کرنل رو customize میکردم . البته با صحبت هایی که شما انجام دادید به این راحتی ها نیست .

3 Likes

با فرض اینکه C رو در حد black belt می دونین اول خیلی پیشنهاد می کنم این کتاب رو بخونین:

بعد یه جورایی حتما باید این کتاب رو مطالعه کنین:

باید این سایت مثل خونتون بشه :slightly_smiling_face:
https://kernelnewbies.org/

یه میلینگ لیست هم بود که به صورت تمرین بهتون آموزش میداد اما نتونستم پیداش کنم :frowning_face:

9 Likes

سلام
پیشنهاد می کنم این کتاب ها رو بخونید هر چند سنگین هستن

Advanced Programming in the UNIX Environment

The Art of Linux Kernel Design

Linux System Programming

6 Likes

۳ سال از این ماجرا میگذره
میخواستم بدونم چ کار کردین؟ آیا اون کرنل رو توسعه دادین؟

نه، خب درگیر کارهای دیگه‌ای بودم و جالب اینجاست که همین الآن یکی از تسک‌های وایت‌بوردم، تمرین ماژول‌نویسیه که مثل بقیه‌ی تسک‌ها همینطور به عقب میندازمش.
الآن که فکر میکنم، نمیدونم توی این ۲ سال (۲سال و ۳ماه میگذره از نوشتن این تاپیک) چه کاری با زندگیم کردم :sweat_smile:

1 Likes

یه چند ماه پیش یکی از همکارام اومد گفت که بیاین واسه تفریح هر کس با زبان مورد علاقش یه برنامه بسازه که sudoku حل کنه. من تصمیم گرفتم بجای برنامه یه subsystem کرنل بنویسم که بتونه یه API بده به کرنل ماژول ها واسه حل sudoku می خواستم از این کد یه بلاگ پست بنویسم (‌شاید در آینده این کار کنم) اما وقت نشد. این کدش هست که شاید بکارتون بیاد. سعی کردم زیاد روش کامنت بذارم. درضمن الان باگ داره و روی کرنل خودتون لودش نکنین ( یه جایی اشتباهی یه null pointer رو dereference کردم). خیلی خیلی بعید هست که نیاز داشته باشین واسه کرنل subsystem بنویسین اما این کد می تونه کمکتون کنه که subsystem های فعلی رو توی یه کد خیلی خیلی ساده درک کنین و برای کار کردن باهاشون تایم ساده تری داشته باشین

4 Likes

پروژه پایانی مبانی برنامه‌نویسیم همین سودوکو بود، اون زمان با cpp نوشتم اونم نه با backtrack حل با استفاده از قوانین طلایی، یعنی همون قوانینی که انسان باهاش سودوکو رو حل می‌کنه، حدود 800 خط کد شد، فوق العاده کثیف و فوق‌العاده تو در تو، بعضی جاها 6 تا for تو در تو وجود داره، انقدر بد نوشته شده که خجالت می‌کشم به کسی نشونش بدم ولی در کمال تعجب کار می‌کنه.

1 Likes

پس لازم نیست دستکاری بشه :grinning:

1 Likes

اینکه یه پروژه‌ی کثیف، کار کنه مشکلی نداره. خجالت هم نداره.
وقتی قضیه جدی میشه که پروژت افتضاح نوشته شده باشه و توی پروداکشن یه شرکت درحال استفاده باشه :sweat_smile:
من الآن واقعا این حسو دارم. هر لحظه ممکنه کدهام منفجر بشه تو سرورهاشون :sweat_smile:

3 Likes