• راهنمای ایجاد یک سیستم عامل ساده شبیه به یونیکس. چگونه یک سیستم عامل را از ابتدا بنویسیم

    دیر یا زود، هر کاربر لینوکس به ایجاد توزیع خود فکر می کند. برخی استدلال می کنند که شما می توانید "همه چیز را برای خودتان سفارشی کنید." دیگران شکایت دارند که در میان توزیع هایی که قبلاً در Vetka ارائه شده است، هیچ توزیع ایده آلی وجود ندارد. و آنها ظاهراً ایده های فوق مفهومی برای سیستم خود دارند. چرا این همه روانشناسی را شروع کردم؟ به منظور قطع فوری اکسیژن برای مبتدیانی که با لینوکس بازی می کنند و کاری ندارند. اگر از قبل به ایجاد یک سیستم عامل فکر می کنید، تا انتها فکر کنید. بنابراین،

    من می خواهم یک سیستم عامل مبتنی بر لینوکس ایجاد کنم.
    من فوراً به شما هشدار می دهم: همه کسانی که برای پایه و اساس خود، قرن هجدهم خواهند بود سیستم آیندهکیت توزیع توسعه یافته دیگری را انتخاب می کند (و خدای ناکرده محبوب...) چوبه دار منتظر می ماند. این پست در مورد ایجاد یک سیستم از ابتدا است که به معنی انواع Slax و لینوکس مینتما لمس نخواهیم کرد.

    مرحله 1: یک رسانه را انتخاب کنید
    گزینه های کمی وجود دارد: یا سیستم عامل شما از LiveCD شروع می شود یا از هارد دیسکیا از فلش مموری. فوراً رزرو می‌کنم: یک کلمه در موردش صحبت نمی‌کنم HDD، زیرا ایجاد یک کیت توزیع انعطاف پذیر از سری "من همه چیز را با خود حمل می کنم" یا یک کیت توزیع قفل شده روی یک دیسک نوری بسیار راحت تر است. اگر یاد بگیرید که چگونه یک سیستم LiveCD یا LiveUSB ایجاد کنید، هیچ مشکلی برای نصب روی هارد دیسک وجود نخواهد داشت.

    در هر صورت، آماده کنید درایو فلش تمیز، سی دی و در نهایت Virtualbox را نصب کنید.

    مرحله 2 کامپایل کرنل
    با توجه به انتشار سومین هسته لینوکس، این مرحله توسعه بیشتر را تشویق می کند ... بنابراین، ما به منابع هسته نیاز داریم. هر کاربر می داند که آنها را می توان از kernel.org به دست آورد. به هیچ وجه، آیا می شنوید؟، هرگز یک هسته خارجی که توسط شما کامپایل نشده است را به سیستم خود وارد نکنید!

    از آنجایی که تنبلی من از مقیاس خارج شد، یک پوشه / لینوکس کرنل ایجاد کردم و آرشیو را با منابع موجود در آن باز کردم. با ورود به عنوان روت، موارد زیر را انجام دادم:

    سی دی /linuxkernel
    منوی پیکربندی را انجام دهید

    در اصل، هسته را می توان به سه روش پیکربندی کرد: پیکربندی (پیکربندی آنلاین)، منوکانفیگ (پیکربندی شبه گرافیکی از طریق ncurses) و xconfig (پیکربندی گرافیکی). نکته اصلی این است که make config برای مدت طولانی روحیه شما را خراب می کند، زیرا. او تمام سوالات ممکن را در تمام جنبه های همه موضوعات خواهد پرسید. مشکل make xconfig در همه یافت نمی شود، اما من ملاقات کرده ام و هنوز هم دارم. اگر دوست دارید این کار را از طریق X انجام دهید، خودتان آن را کشف کنید. بهترین گزینه make menuconfig است. این مورد یک رابط شبه گرافیکی را برای شما باز می کند که از طریق آن می توانید هسته را به روش خود شخصی سازی کنید. این مورد به کتابخانه ncurses نیاز دارد که نصب آن آسان است.

    در اصل، اگر مغز شما اصلاً لینوکس را بفهمد، پیکربندی را متوجه خواهید شد. روند جالب است، واقعاً گزینه های زیادی وجود دارد و کمک می کند زبان انگلیسی، اما همچنان از دسترسی و سادگی آن راضی است.

    با این حال، شما هنوز باید هدایت شوید. به File Systems ---> بروید و ستاره های مورد نیاز را قرار دهید. حرف M به این معنی است که پشتیبانی از یک درایور خاص با اتصال یک ماژول خارجی به هسته انجام می شود (من از آنها متنفرم!). همچنین برای خواندن دیسک به پشتیبانی isofs نیاز داریم. سیستم های فایل ---> سیستم های فایل CD-ROM/DVD ---> پشتیبانی از سیستم فایل CDROM ISO 9660. هنوز هم می‌توانید از سیستم‌های dos قدیمی پشتیبانی کنید.

    توسعه دهندگان عجیب و غریب Mandriva فراموش کردند که به سیستم های فایل ---> DOS/FAT/NT Filesystems ---> NTFS پشتیبانی نوشتن اجازه دهند، و در یکی از توزیع های آنها من با دسترسی به پارتیشن قدیمی ویندوز مشکل داشتم.

    نگاه کنید نوع و ویژگی های پردازنده ---> خانواده پردازنده، به من توصیه شد Pentium-MMX را انتخاب کنم.

    درایورهای دستگاه را نیز بررسی کنید، مفید است. برای سرگرمی، می توانید همه چیز را در آنجا انتخاب کنید و یک هسته با وزن بیش از 50 مگابایت را کامپایل کنید.

    به علاوه. هسته، پس از بارگذاری خود، باید در واقع سیستم را بارگیری کند. یا از فایل های خود کامپایل شده (مورد استفاده در سیستم های جاسازی شده)، یا از آرشیو CPIO فشرده شده با چیزی، یا از Initrd. این DOS برای شما نیست، در اینجا شما نمی توانید بلافاصله به برخی از فایل های جدید init در دایرکتوری ریشه یک دیسک یا فلش درایو مراجعه کنید. در واقع، کار می کند، به Uncle Annix گوش ندهید! از initrd برای سیستم ما استفاده خواهد کرد، زیرا راحت است و برخلاف بایگانی CPIO باعث عبارات زشت از طرف توسعه دهندگان شخص ثالث نمی شود.

    اوه بله، هسته را با دستور کامپایل کنید

    اگر x86 دارید، می توانید آن را در /linuxkernel/arch/x86/boot/bzImage پیدا کنید.

    برای برنامه نویسان خشن چلیابینسک، می توانید از کامپایل متقابل استفاده کنید ...

    Ramdisk را ایجاد کنید.

    اکنون به یک initrd با یک پوسته ساده نصب شده در آنجا نیاز داریم. ما از busybox استفاده خواهیم کرد زیرا این nyasha می تواند هر کاری را انجام دهد. ما راه را از روبرتو د لئو، خالق موویکس خواهیم دزدید (اگر عشق متعالی به پرل نبود، حتی به او احترام می گذاشتم):

    dd if=/dev/zero of=/dev/ram0 bs=1k count=5000 - یک Ramdisk در RAM کامپیوتر خود ایجاد کنید.
    mke2fs -m0 /dev/ram0 5000 - فرمت Ramdisk در سیستم Ext2
    mkdir /distro - یک پوشه ایجاد کنید
    mount /dev/ram0 /distro - به پوشه /distro سوار شوید

    همه چیز، حالا ما یک Ramdisk با ظرفیت 5 مگابایت داریم. شما می توانید کارهای بیشتری انجام دهید، اما نیازی به این کار ندارید. برخلاف Thomas Mathejisek، من قصد ندارم initrds را با ماژول های Squashfs فشرده LZMA پر کنم. هر چیزی که مورد نیاز است با هسته کامپایل می شود. بله، این خیلی منطقی و درست نیست، اما دردسر صد برابر کمتر است. و به خصوص برای کسانی که این رویکرد را محکوم می کنند، می توانید گزینه مدولاریته را در هسته فعال کنید: پشتیبانی از ماژول قابل بارگذاری را فعال کنید.

    در Ramdisk ما، نصب شده در / توزیع، چنین پوشه ای وجود دارد، گم شده + یافت شده است. دلیل آن این است که ما آن را در ext2 فرمت کردیم. برای قرار دادن busybox در ابتدا ...

    نصب Busybox
    چرا چنین پروژه های بزرگی چنین وب سایت های مزخرفی دارند؟ اگر چه... دیگر اهمیتی ندارد که منابع دانلود شده و با موفقیت در پوشه /busybox باز شوند.

    شما می توانید busybox را به همین روش پیکربندی کنید:

    سی دی /busybox
    منوی پیکربندی را انجام دهید

    اگر هنوز متوجه نشدید چیست، توضیح می دهم. Busybox جایگزین هزاران برنامه یونیکس ذخیره شده در پوشه های /bin، /sbin، /usr/bin، /usr/sbin می شود. در عوض، تنها یک برنامه ایجاد می‌شود: /bin/busybox، و دسته‌ای از پیوندها به آن در پوشه‌های بالا ایجاد می‌شوند. با دستور زیر busybox را نصب کنید:

    CONFIG_PREFIX=/distro را نصب کنید

    Busybox همچنین فایل های /sbin/init و /linuxrc را بنا به دلایلی ایجاد می کند تا سیستم شما به درستی راه اندازی شود. اما همه پوشه های لازم ایجاد نشده اند. بنابراین ما همه چیز را با دستان خود تمام می کنیم و ایجاد می کنیم:

    /distro/و غیره
    /distro/lib
    /distro/dev
    /distro/mnt
    توزیع / پروک
    /distro/root
    /distro/tmp
    /distro/root

    اگر چیزی را فراموش کردید، به خاطر بسپارید، زیرا فراموش کردن این دایرکتوری ها سخت است.

    همه چیز خوب خواهد بود، اما busybox برای کار کردن به کتابخانه ها نیاز دارد که باید در توزیع ما کپی شود. خیلی راحت میشه فهمید که:

    ldd /distro/bin/busybox

    این برنامه کتابخانه های مورد نیاز پوسته را به ما نشان می دهد. فوراً می گویم: گیت لینوکس توسط هسته ایجاد می شود و قابل کپی نیست.

    هنگام کپی کردن کتابخانه ها، می توانید اطلاعات اشکال زدایی را قطع کنید (همانطور که روبرتو توصیه می کند):

    objcopy --strip-debug from where to

    ساخت لینوکس از لینوکس

    شما باید چندین فایل متنی سیستم ایجاد کنید:

    ما به /etc/inittab نیاز داریم. من شما را شگفت زده خواهم کرد: در ابتدای زندگی، سیستم حتی نمی داند که Root چیست. ما حتی یک کاربر بی نام داریم، اما فایل ویژگی های سطح پایین سیستم (ONF) باید وجود داشته باشد. محتوای آزمایشی فایل به شرح زیر است:

    # اولین فایلی که اجرا می شود، /sbin/init پس از آن.
    ::sysinit:/etc/rc.d/rc.S

    # یک پوسته را در کنسول اجرا کنید.
    ::respawn:-/bin/sh

    # دستورات برای اجرا قبل از خاموش شدن و راه اندازی مجدد.
    :: shutdown:/sbin/swapoff -a >/dev/null 2>&1
    :: shutdown:/bin/umount -a -r >/dev/null 2>&1

    فایل بعدی /etc/fstab است. این جدولی است که توضیح می دهد چه چیزی و کجا باید در هنگام بوت سوار شود. چیز بی فایده است! ما باید proc را مونت کنیم، در غیر این صورت هیچ چیز کار نمی کند، بنابراین در فایل می نویسیم:

    none /proc proc پیش‌فرض 0 0 است

    Mount همچنین به /etc/mtab نیاز دارد. آن را ایجاد کنید و آن را خالی بگذارید.

    اما mount تنها زمانی کاری را انجام می‌دهد که ما صریحاً از آن بخواهیم. و ما در همان فایل راه‌اندازی /etc/rc.d/rc.S می‌پرسیم (rc.d یک پوشه است). مودبانه می پرسیم:

    /bin/mount -av -t nonfs

    ما همچنین به یک فایل پروفایل (b) (a) sh نیاز داریم، به طور کلی آزادی برای تخیل وجود دارد. یک فایل /etc/profile ایجاد کنید و آن را با موارد زیر پر کنید:

    PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"
    کمتر = - میلی متر
    TERM=لینوکس
    HOME=/root
    PS1=">"
    PS2=">"
    ignoreeof=10
    صادرات PATH DISPLAY LESS TERM PS1 PS2 HOME ignoreeof

    شما همچنین به فایل /etc/shell نیاز دارید که نشان می دهد یک پوسته وجود دارد:

    /bin/sh
    /bin/ash
    /bin/bash

    این در واقع تمام است. ما می توانیم Ramdisk خود را در یک فایل بنویسیم.

    mkdir /os - پوشه "آماده".
    umount /dev/ram0 - یک قطعه از RAM را جدا کنید.
    dd if=/dev/ram0 of=/os/initrd bs=1k count=5000 - فایل ایجاد کنید.
    gzip /os/initrd - فایل initrd را فشرده کنید

    یک درایو فلش قابل بوت بسازید

    "خط پایان" توسعه کوچک ما. ما یک درایو فلش USB می گیریم، آن را وارد می کنیم، آن را در vfat فرمت می کنیم (در ext نیز امکان پذیر است، اما فراموش نکنید که همه کاربران ویندوز هنوز خود را شلیک نکرده اند).

    در درایو فلش، یک پوشه بوت ایجاد کنید، این پوشه حاوی پوشه های initrd و kernel است.

    از پوشه / os، Ramdisk فشرده شده را در پوشه boot / initrd در درایو فلش کپی کنید، آن را "main.gz" نامید. از پوشه حاوی منابع هسته، bzImage را در پوشه بوت / هسته در درایو فلش USB کپی کنید، آن را "main.lk" نامید. فایل های بوت لودر Syslinux (در اینترنت یا از توزیع دیگری: اینجا مهم نیست)، یعنی syslinux.bin، syslinux.boot، syslinux.cfg را دریافت می کنیم. ما آنها را در پوشه اصلی فلش مموری کپی می کنیم. در فایل syslinux.cfg چیزی شبیه این می نویسیم:

    میلی متر پیش فرض
    درخواست 1
    تایم اوت 100
    برچسب میلی متر
    هسته /boot/kernel/main.lk

    برچسب mc
    هسته /boot/kernel/main.lk

    برچسب سانتی متر
    هسته /boot/kernel/custom.lk
    اضافه کردن initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    برچسب سی سی
    هسته /boot/kernel/custom.lk
    اضافه کردن initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    برچسب hd
    لوکال بوت 0x80

    بنابراین، ما از initrds سفارشی و هسته پشتیبانی می‌کنیم، که برای آزمایش، می‌تواند به توزیع ما متصل شود.

    بیایید دریابیم که درایو فلش ما در سیستم چه دستگاهی است (می توانید mount را بدون پارامتر اجرا کنید و ببینید). این یا /dev/sdb1 یا /dev/sdc1 یا /dev/sdd1 است. قبل از شروع نصب، ارزش آن را دارد که درایو فلش را جدا کنید.

    syslinux را نصب کنید (اگر بسته در سیستم نیست، apt-get install syslinux):

    syslinux -d device_path

    فایل ldlinux.sys باید در دایرکتوری ریشه فلش درایو ظاهر شود. اگر چنین است، syslinux.bin، syslinux.boot دیگر مورد نیاز نیست.

    من به شما نمی گویم که چگونه بایوس را برای بوت شدن از درایو فلش USB راه اندازی کنید - آسان است. بگذارید فقط بگویم که ایجاد پوشه /boot/initrd/init بسیار راحت است که می توانید برای کار بیشتر با آن /boot/initrd/main را در آن سوار کنید. فقط فراموش نکنید که آن را با gzip از حالت فشرده خارج کرده و فشرده کنید.

    باشه الان تموم شد

    همانطور که من به شما گفتم که چگونه یک سیستم لینوکس را از ابتدا بسازید. آسان است، اینطور نیست؟ سپس می توانید اسکریپت /sbin/init را ویرایش کنید، زیرا هنوز کار زیادی برای انجام دادن دارید! شما باید یک اسکریپت بنویسید تا فلش درایو را که در دایرکتوری ریشه chroot می شود، سوار کنید. در غیر این صورت مجبور خواهید بود با یک پارتیشن ReadOnly 5 مگابایتی کار کنید. اما این یک داستان کاملا متفاوت است.

    اگر سر اصل مطلب بروید...

    سیستم عامل چیزی است که چند وظیفه ای (معمولا) را پیاده سازی می کند و توزیع منابع را بین این وظایف و به طور کلی مدیریت می کند. لازم است اطمینان حاصل شود که وظایف نمی توانند به یکدیگر آسیب برسانند و در حوزه های مختلف حافظه کار کنند و به نوبه خود با دستگاه ها کار کنند، حداقل همین است. و همچنین باید امکان انتقال پیام از یک کار به کار دیگر را نیز فراهم کنید.

    سیستم عامل دیگری در صورت موجود بودن حافظه بلند مدت، باید دسترسی به آن را فراهم کند: یعنی تمام توابع کار با فایل سیستم را فراهم کند. حداقل است.

    تقریباً در همه جا، اولین کد بوت باید در اسمبلر نوشته شود - مجموعه ای از قوانین در مورد اینکه کجا باید باشد، چگونه باید باشد، چه کاری باید انجام دهد و اندازه آن نباید بیشتر شود وجود دارد.

    برای رایانه شخصی، باید یک بوت لودر روی asma بنویسید، که توسط BIOS فراخوانی می شود و بدون بیش از چهارصد بایت، باید کاری انجام دهد و سیستم عامل اصلی را شروع کند - کنترل را به کد اصلی منتقل کند، که در نزدیکی آینده را می توان از قبل به زبان C نوشت.

    برای ARM باید یک جدول وقفه روی asma (تنظیم مجدد، خطاهای مختلف، وقفه های IRQ، FIQ و ...) ایجاد کنید و کنترل را به کد اصلی منتقل کنید. اگرچه، در بسیاری از محیط‌های توسعه، چنین کدی تقریباً برای هر کنترل‌کننده‌ای موجود است.

    یعنی برای این امر لازم است:

    1. اسمبلر پلتفرم هدف را بشناسید.
    2. معماری پردازنده و انواع دستورات و رجیسترهای سرویس را بشناسید تا بتوانید آن را برای کار در حالت دلخواه پیکربندی کنید. در رایانه شخصی، این یک انتقال به یک حالت محافظت شده است، برای مثال، یا به یک حالت 64 بیتی ... در ARM، تنظیم ساعت های هسته و محیطی است.
    3. دقیقاً بدانید که سیستم عامل چگونه شروع می شود، کجا و چگونه باید کد خود را وارد کنید.
    4. برای دانستن زبان C - نوشتن یک کد بزرگ در asma بدون تجربه دشوار است، حفظ آن حتی دشوارتر خواهد بود. بنابراین لازم است که کرنل را به زبان C بنویسیم.
    5. بدانید سیستم عامل چگونه کار می کند. خوب، کتاب‌های زیادی به زبان روسی در این زمینه وجود دارد، اگرچه نمی‌دانم همه آنها خوب هستند یا نه.
    6. صبر و استقامت زیادی داشته باشید. اشتباهاتی وجود خواهد داشت و باید آنها را پیدا کرد و اصلاح کرد. و همچنین باید زیاد بخوانید.
    7. زمان زیاد و زیادی داشته باشید.

    به علاوه. فرض کنید چیزی نوشته اید. باید این مورد رو تست کرد یا به یک دستگاه فیزیکی نیاز دارید که آزمایش‌ها روی آن انجام شود (برد اشکال‌زدایی، رایانه دوم)، یا شبیه‌ساز آن. استفاده از دومی معمولا آسانتر و سریعتر است. برای کامپیوتر، به عنوان مثال، VMWare.

    در اینترنت هم مقالات کافی در این زمینه وجود دارد، اگر خوب جستجو کنید. و همچنین نمونه های زیادی از سیستم عامل آماده با کد منبع وجود دارد.

    حتی با یک تمایل شدید، حتی می توانید منابع هسته قدیمی سیستم های NT (ویندوز) را به طور جداگانه (که توسط میکرونرم افزار ارسال شده است، با نظرات و انواع مختلف مواد مرجع) و در ارتباط با همان منابع نگاه کنید. سیستم عامل های قدیمی (لو شده).

    ابتدا برنامه نویسی را یاد بگیرید.دانش اسمبلر ضروری است. همچنین بسیار توصیه می شود که از سایر موارد آگاه باشید زبان های اضافیبرنامه نویسی سطح پایین تر مانند C.

    تصمیم بگیرید که در کدام دستگاه می خواهید سیستم عامل را بوت کنید.این می تواند یک سی دی، دی وی دی، درایو فلش، هارد دیسک یا رایانه دیگری باشد.

    تصمیم بگیرید که می خواهید سیستم عامل شما چگونه باشد.آیا باید نسخه کامل سیستم عامل با رابط کاربری گرافیکیرابط کاربری (GUI) یا شاید چیزی مینیمالیستی تر؟ قبل از شروع فرآیند باید بدانید که به کدام سمت بروید.

    بررسی کنید که سیستم عامل شما از کدام پلتفرم پردازنده پشتیبانی می کند. AI-32 و x86_64 دو نسخه رایج برای رایانه های شخصی هستند، بنابراین می توان آنها را بهترین انتخاب در نظر گرفت.

    تصمیم بگیرید که آیا ترجیح می‌دهید همه کارها را خودتان از ابتدا انجام دهید، یا هسته‌هایی وجود دارند که می‌خواهید روی آن‌ها بسازید. Linux From Scratch پروژه ای برای کسانی است که می خواهند، به عنوان مثال، توزیع لینوکس خود را ایجاد کنند.

    انتخاب کنید که آیا می خواهید از بوت لودر خود استفاده کنید یا از بوت لودر بزرگ متحد (GRUB) از پیش ساخته شده. چون کد نویسی برنامه خودراه اندازی نیاز به دانش گسترده ای از نرم افزار کامپیوتر و BIOS دارد، این می تواند برنامه برنامه نویسی هسته زنده را به عقب براند.

    در مورد زبان برنامه نویسی که قرار است استفاده کنید تصمیم بگیرید.البته توسعه سیستم عامل به زبانی مانند پاسکال یا بیسیک کاملا امکان پذیر است، اما بهتر است آن را به زبان C یا اسمبلی بنویسید. اسمبلر کاملا ضروری است، زیرا برخی از بخش های مهم سیستم عامل نیاز به دانش این زبان خاص دارد. از طرف دیگر C++ شامل کلید واژه هابرای اجرای نسخه کامل سیستم عامل مورد نیاز است.

    • برای ساختن یک سیستم عامل با استفاده از کدهای C یا C++، مطمئناً از یک کامپایلر پس از دیگری استفاده خواهید کرد. این بدان معنی است که شما باید کتابچه راهنمای/دستورالعمل ها/مستندات کامپایلر انتخابی C/C++ را که به همراه نرم افزار ارائه می شود یا از وب سایت توزیع کننده موجود است، مطالعه کنید. شما باید چیزهای پیچیده زیادی در مورد کامپایلر یاد بگیرید و برای بهبود C++ باید طرح و ABI آن را یاد بگیرید. از شما انتظار می رود که درک کنید فرمت های مختلفوظایف قابل اجرا (ELF، PE، COFF، باینری های معمولی، و غیره) و توجه داشته باشید که فرمت بومی ویندوز PE (exe) توسط حق چاپ محافظت می شود.
  • یک رابط برنامه نویسی برنامه (API) را انتخاب کنید.یک مجموعه از APIهای خوب، POSIX است، زیرا به خوبی مستند شده است. همه سیستم های یونیکسحداقل پشتیبانی جزئی از POSIX داشته باشید، بنابراین پیوستن برنامه های یونیکس به سیستم عامل خود امری بی اهمیت خواهد بود.

    در مورد یک طرح تصمیم بگیرید.هسته های یکپارچه و میکروکرنل وجود دارد. هسته‌های یکپارچه همه سرویس‌های موجود در هسته را اجرا می‌کنند، در حالی که میکروکرنل‌ها دارای یک هسته کوچک همراه با اجرای سرویس سفارشی هستند. به طور کلی، هسته‌های یکپارچه سریع‌تر هستند، اما میکروکرنل‌ها جداسازی و محافظت بهتری در برابر خطاهای احتمالی دارند.

    توسعه و کار تیمی را در نظر بگیرید.بنابراین، شما به زمان کمتری برای حل نیاز خواهید داشت مشکلات بزرگکه به شما امکان می دهد در مدت زمان کوتاه تری سیستم عاملی با کیفیت بهتر ایجاد کنید.

    هارد دیسک خود را به طور کامل پاک نکنید.به یاد داشته باشید، فرمت کردن یک درایو تمام اطلاعات شما را برای همیشه پاک می کند! از GRUB یا مدیر دیگری برای بوت کردن رایانه خود از یک سیستم عامل دیگر استفاده کنید تا زمانی که نسخه شما کاملاً کاربردی شود.

    از کوچک شروع کنید.قبل از رفتن به عناصر پیچیده، مانند مدیریت حافظه و چند وظیفه، ابتدا به موارد کوچک مانند نمایش متن و وقفه ها توجه کنید.

    صرفه جویی پشتیبان گیریآخرین نسخه کاریدر صورتی که مشکلی در آن اتفاق بیفتد، آرامش خاصی به شما می دهد نسخه فعلیسیستم عامل شما یا افزونه های جدیدتر در صورتی که کامپیوتر شما خراب شود و نتواند بوت شود، همانطور که خودتان متوجه شدید، فرصتی عالی برای داشتن نسخه دوم برای کار با آن است تا بتوانید مشکلات موجود را عیب یابی کنید.

    سیستم عامل جدید خود را در ماشین مجازی تست کنید.به جای اینکه هر بار که تغییراتی ایجاد می‌کنید یا فایل‌ها را از رایانه کاری خود به دستگاه آزمایشی خود منتقل می‌کنید، رایانه خود را مجدداً راه‌اندازی کنید، می‌توانید از برنامه‌ای برای اجرای سیستم‌عامل در ماشین مجازی در حالی که سیستم‌عامل فعلی شما همچنان به کار خود ادامه می‌دهد استفاده کنید. برنامه های کاربردی VM عبارتند از VMWare (که یک سرور به صورت رایگان نیز دارد)، نرم افزار منبع باز جایگزین، Bochs، Microsoft Virtual PC (با لینوکس سازگار نیست) و XVM VirtualBox.

    نسخه انتشاری را منتشر کنید.این به کاربران این امکان را می دهد تا در مورد ایرادات احتمالی سیستم عامل شما به شما اطلاع دهند.

  • سیستم عامل نیز باید کاربر پسند باشد، بنابراین اضافه کردن را فراموش نکنید ویژگی های مفید، که جزء لاینفک طراحی شما خواهد شد.

    • پس از تکمیل توسعه، در نظر بگیرید که آیا می‌خواهید کد را در دسترس عموم قرار دهید یا حقوق خصوصی برای آن تنظیم کنید.
    • اگر می‌خواهید سیستم شما قابل دوام باشد، مطمئن شوید که ویژگی‌های امنیتی را در اولویت خود قرار دهید.
    • یک پروژه توسعه سیستم عامل را با هدف یادگیری نحوه برنامه نویسی شروع نکنید. اگر C، C++، Pascal، یا هر زبان و ویژگی مرتبط دیگری، از جمله انواع اشاره گر، عملیات بیت سطح پایین، سوئیچینگ بیت، اسمبلر درون خطی و غیره را نمی دانید، پس هنوز آماده ساختن نیستید. سیستم عامل
    • پورتال هایی مانند OSDev و OSDever را مرور کنید تا به شما در بهبود سیستم عامل خود کمک کند. لطفاً توجه داشته باشید که برای بیشتر مسائل، جامعه OSDev.org ترجیح می‌دهد به جای پیوستن به انجمن، خودتان به محتوای سایت دسترسی داشته باشید. اگر همچنان تصمیم دارید به جمع اعضای انجمن بپیوندید، باید پیش نیازهای خاصی برای این امر وجود داشته باشد. شما باید دانش کاملی از C یا C++ و زبان اسمبلی x86 داشته باشید. همچنین باید مفاهیم کلی و پیچیده برنامه نویسی مانند لیست های پیوندی، صف و غیره را درک کنید. جامعه OSDev به صراحت در قوانین خود می گوید که هیچ کس قرار نیست از برنامه نویسان جدید مراقبت کند. اگر در حال تلاش برای توسعه یک سیستم عامل هستید، ناگفته نماند که در برنامه نویسی یک "خدا" هستید. شما همچنین ملزم به خواندن کتابچه راهنمای پردازنده برای معماری انتخابی خود هستید. به عنوان مثال x86 (اینتل)، ARM، MIPS، PPC و غیره. چنین اشاره ای به ساختار پردازنده را می توان به راحتی با جستجو در گوگل ("Intel Manuals"، "ARM manuals" و غیره) یافت. برای پرسیدن سوالات واضح در انجمن OSDev.org ثبت نام نکنید. این فقط به پاسخ هایی مانند "درسنامه f***ing" را بخوانید. برای شروع، باید سعی کنید ویکی‌پدیا را بخوانید، کتابچه راهنمای ابزارهای مختلفی که قرار است استفاده کنید.
    • نقاط مرده احتمالی و سایر خطاها را بررسی کنید. اشکالات، بن بست ها و سایر مسائل می توانند بر طراحی سیستم عامل شما تأثیر بگذارند.
    • اگر راه آسان‌تری می‌خواهید، توزیع‌های لینوکس مانند Fedora Revisor، Custom Nimble X، Puppy Remaster، PCLinuxOS mklivecd یا SUSE Studio و SUSE KIWI را تصور کنید. با این حال، سیستم‌عاملی که ایجاد می‌کنید متعلق به شرکتی است که برای اولین بار این سرویس را معرفی کرده است (اگرچه شما حق دارید آزادانه آن را توزیع کنید، آن را تغییر دهید و هر طور که می‌خواهید اجرا کنید تحت GPL).
    • یک راه حل خوب ایجاد یک پارتیشن کاملا جدید برای سیستم عامل در حال توسعه است.

    هشدارها

    • بازنویسی بی دقت سیستم عامل روی هارد دیسک می تواند به طور کامل به آن آسیب برساند. مراقب باش
    • شما به طور کامل نخواهید بود سیستم آمادهبرای دو هفته. با یک سیستم عامل قابل بوت شروع کنید و سپس به چیزهای جالب تر بروید.
    • اگر کاری بی پروا انجام دهید، مانند نوشتن بایت های تصادفی در پورت های ورودی/خروجی دلخواه، سیستم عامل خود را از بین خواهید برد و (در تئوری) می توانید سخت افزار خود را بسوزانید.
    • انتظار نداشته باشید که ساخت یک سیستم عامل با کیفیت آسان باشد. وابستگی های پیچیده زیادی وجود دارد. به عنوان مثال، برای اینکه یک سیستم عامل بتواند چندین پردازنده را مدیریت کند، مدیر حافظه شما باید مکانیسم‌های "قفل" داشته باشد تا از دسترسی همزمان پردازنده‌های اضافی به یک منبع جلوگیری کند. بلوک‌های مورد استفاده وجود یک زمان‌بندی را فرض می‌کنند تا اطمینان حاصل شود که تنها یک پردازنده در هر زمان معین به یک منبع حیاتی دسترسی دارد، در حالی که بقیه غیرفعال هستند. با این حال، عملکرد زمانبندی بستگی به حضور مدیر حافظه دارد. این نمونه ای از وابستگی به بن بست است. خیر راه استانداردحل چنین مشکلاتی؛ انتظار می رود هر سازنده سیستم عامل به اندازه کافی مهارت داشته باشد تا بتواند راه حل خود را ارائه دهد.

    منابع

    چه چیزی نیاز خواهید داشت

    • کامپیوتر
    • پردازنده ای که قرار است روی آن بسازید
    • کافی است رم(رم) برای ماشین مجازی
    • سیستم‌عامل اصلی (برای توسعه کد منبع اسمبلر (و غیره) و ساخت و بسته‌بندی اولیه استفاده می‌شود؛ سیستم‌عامل شما در نهایت تبدیل به اولیه می‌شود)
    • ویرایشگر کد رنگ نحوی (زمانی که محیط توسعه یکپارچه موجود نباشد استفاده می شود)
    • کامپایلر
    • درایو CD/DVD
  • ایلیا الکساندروف

    سیستم عامل خود را بر اساس لینوکس بسازید

    صدها توزیع لینوکس در آنجا وجود دارد، و مشخص نیست که چه تعداد دیگر ظاهر خواهند شد. ده ها شرکت و هزاران برنامه نویس برای ایجاد بهترین پروژه لینوکس با هم رقابت می کنند و در این میان هر کاربر با تجربه می تواند نویسنده یک سیستم رایانه شخصی خانگی باشد که از محصولات غول های صنعت فناوری اطلاعات کم ندارد.

    در طول سال ها کار با لینوکس، من از تعداد زیادی توزیع مختلف استفاده کرده ام: Mandriva، Fedora، SlackWare، Debian، Ubuntu و بسیاری دیگر. برخی از پروژه ها را بیشتر دوست داشتم، برخی را کمتر. اما در همه توزیع ها، ناگزیر باید با کاستی های جدی دست و پنجه نرم کرد که کار را بسیار دشوار می کرد. یکی بیش از حد به منابع نیاز دارد، دیگری همه چیز را پشتیبانی نمی کند تجهیزات لازم، سومی فاقد نرم افزارهای مختلف است. آن وقت بود که به یاد حکمت معروف شرقی افتادم: اگر لازم است کاری را به خوبی انجام دهی، خودت انجامش بده.

    لینوکس از ابتدا

    من تنها کسی نیستم که تصمیم گرفتم نسخه لینوکس خود را شروع کنم - سیستم عاملی که در آن قسمت پایه سیستم و هسته به عنوان پایه در نظر گرفته می شود، اما در آن حتی یک کیلوبایت اضافی از لینوکس وجود نخواهد داشت. توسعه دهنده، یعنی از طرف شما. تعداد زیادی از توزیع‌های لینوکس که نیازهای کاربران را برآورده نمی‌کنند، جرارد بیکمنز را بر آن داشت تا توزیعی ایجاد کند که همه را قادر می‌سازد تا سیستمی بسازند که فقط اجزا و عملکردهای مورد نیاز خود را داشته باشد.

    میل یک برنامه نویس با استعداد منجر به پروژه Linux from Scratch (www.linuxfromscratch.org) شد که به اختصار LFS نامیده می شود. این پروژه به شما اجازه می دهد تا از ابتدا، از کدهای منبع، سیستم عامل مبتنی بر لینوکس خود را بسازید. کامپایل LFS روی رایانه ای با سیستم لینوکس از قبل نصب شده انجام می شود، با این حال، یک Live-CD "پیشرفته" مانند Knoppix نیز مناسب است.

    در عین حال، سیستم لینوکس مورد استفاده برای مونتاژ می تواند هر گونه باشد - فقط وجود یک کامپایلر و کتابخانه های سیستم. Linux From Scratch را به سختی می توان یک توزیع به معنای معمول کلمه نامید - چیزی شبیه نرم افزار کمکی است که همراه با بخش اصلی سیستم عامل به شما امکان می دهد نسخه منحصر به فرد خود را از سیستم عامل ایجاد کنید.

    همانطور که می دانید لینوس توروالدز سیستم عامل خود را با شعار "فقط برای سرگرمی!" - یعنی فقط برای سرگرمی. باید اعتراف کرد که LFS واقعاً اغلب در سرورها یافت نمی شود ، به عنوان یک قاعده ، علاقه مندان به رایانه از این سیستم استفاده می کنند. نصب و کار با لینوکس از ابتدا به شما کمک می کند تا رابطه بین اجزای سیستم عامل را درک کنید، که برای توسعه یک توزیع لینوکس و نه تنها بر اساس LFS مفید است. بنابراین، LFS تا حد زیادی برای افرادی طراحی شده است که فرآیند ساخت توزیع خود برای آنها هیجان انگیز و جالب است - و باور کنید چنین افراد زیادی وجود دارد.

    بنابراین، اگر آماده هستید یک روز کامل (یا حتی بیشتر) را برای طراحی سیستم صرف کنید، توصیه می کنم از سایت (2) LFS-packages-6.0، LFS-book دانلود کنید و به خواندن این مقاله ادامه دهید.

    پارتیشن بندی دیسک و ایجاد درخت دایرکتوری

    برای درک بهتر مواد، کل دوره فرآیند را به صورت کلی توصیف می کنیم (شکل 1 را ببینید).

    در مرحله اول، با استفاده از یک کیت توزیع از قبل نصب شده یا LiveCD، دیسک شکسته می شود. یک پارتیشن بر روی هارد دیسک برای سیستم جدید اختصاص داده شده است. پس از آن، در این پارتیشن، باید تمام برنامه های لازم و هسته سیستم را به صورت استاتیک کامپایل کنید. در مرحله بعد، دایرکتوری ریشه به یک پارتیشن دیسک سخت اختصاص داده شده برای سیستم عامل جدید ما تغییر می کند. شما باید کامپایل را تکرار کنید، اما این بار نرم افزار باید به صورت پویا ساخته شود (تفاوت بین کامپایل پویا و استاتیک در زیر توضیح داده خواهد شد). آخرین مرحله شامل ساخت کتابخانه حیاتی glibc و پیکربندی سیستم عامل نصب شده است. همانطور که می بینید، لازم نیست کار خاصی انجام دهید.

    در طول فرآیند، دستیار اصلی شما مستندات بسته کتاب LFS است که ترجمه روسی آن را می‌توانید در اینجا بیابید: http://multilinux.sakh.com/download/lfsbook.tar.bz2. کتاب جزئیات هر مرحله از ایجاد یک سیستم عامل را نشان می دهد، بنابراین در صورت مواجهه با مشکلات، حتماً به این راهنما مراجعه کنید (این مقاله برای جایگزینی چنین اسناد گسترده ای در نظر گرفته نشده است).

    ما ایجاد می کنیم بخش جدید- در مورد من /dev/hda5 است، زیرا پارتیشن /dev/hda1 قبلاً توسط هارد دیسک اشغال شده است. دیسک لینوکس Slackware. توصیه می شود ابتدا از سیستم یک نسخه پشتیبان تهیه کنید تا در صورت آسیب بتوانید آن را بازیابی کنید، البته احتمال این امر نزدیک به صفر است. و در اینجا، فکر می کنم، همه چیز واضح است: ما مقدار مورد نیاز (23 گیگابایت کافی است) را برای دایرکتوری ریشه اختصاص می دهیم، فضایی معادل دو برابر مقدار رم برای پارتیشن swap، در صورت تمایل، می توانید پارتیشن های جداگانه ای برای فهرست خانه (/ home) و برای / بوت. با این حال، گزینه پارتیشن بندی مورد علاقه بسیاری - تخصیص تمام فضای موجود منهای swap به دایرکتوری ریشه و سپس ایجاد مبادله واقعی - هنگام ساخت LFS نیز کاملاً قابل قبول است. در رایانه نویسنده، هم Linux Slackware که سیستم عامل اصلی است و هم LFS از یک هارد دیسک استفاده می کنند، با این حال، نصب LFS بر روی هارد دیسک دیگر نیز دشوار نیست.

    سیستم فایل را به صلاحدید خود انتخاب کنید: هیچ مشکلی با Ext3 و ReiserFS تحت LFS وجود ندارد. اما طرفداران XFS باید ناامید شوند - تلاش ها برای استفاده از Linux From Scratch برای کار با این FS موفقیت آمیز نبوده است.

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

    $ mount /dev/hda5 /mnt/mylin

    برای راحتی، اجازه دهید متغیر MYLIN را تعریف کنیم:

    $ صادرات MYLIN=/mnt/mylin

    عالی است، برای کار بیشتر بهتر است ایجاد کنید کاربر فردی mylin که صاحب پارتیشن نصب شده را به آن اختصاص می دهیم.

    $ useradd mylin

    $ chown -R mylin $MYLIN

    شما باید یک درخت دایرکتوری در ریشه پارتیشن جدید ایجاد کنید:

    $ سی دی $MYLIN

    $ mkdir –p bin boot dev و غیره home lib mnt opt ​​root sbin usr/(X11R6,local) var

    در دایرکتوری های usr, usr/X11R6, usr/local ما ساختار لازم را ایجاد می کنیم: زیر شاخه ها bin و غیره شامل، lib، sbin، share، src.

    سپس همین کار را برای دایرکتوری های /var و /opt سیستم آینده انجام خواهیم داد:

    $ mkdir var/(cache,lib,local,lock,log,opt,run,spool)

    $ mkdir opt/(bin,doc,include,info,lib,man)

    فراموش نکنیم که سلسله مراتب عمیق تری مانند /usr/share/man/man1 وجود دارد. اما حجم مقاله اجازه نمی دهد در اینجا تمام اطلاعات مربوط به ساختار درخت فایل ارائه شود، بنابراین باید از سند استاندارد سلسله مراتبی سیستم فایل (موجود در: http://linux-ve.net/MyLDP/) استفاده کنید. file-sys/fhs-2.2-rus)، یا ساختار سیستم عامل خانواده لینوکس را که قبلاً نصب کرده اید به دقت مطالعه کنید. پس از آماده سازی هارد، به مونتاژ استاتیک می رویم.

    مونتاژ استاتیک

    چرا از مونتاژ استاتیک استفاده می کنیم؟ با کامپایل استاتیک، کد منبع کتابخانه به کد برنامه متصل می شود که منجر به افزایش اندازه آن می شود، اما در عین حال یکپارچگی حفظ می شود. با کامپایل پویا، کتابخانه در یک فایل جداگانه قرار دارد که در صورت نیاز توسط اپلیکیشن ها قابل دسترسی است. در نتیجه، همه برنامه ها با یک نسخه از کتابخانه کار می کنند

    اما وقتی از دستور chroot برای تنظیم دایرکتوری ریشه برای سیستم جدید ساخته شده استفاده می کنیم، کتابخانه "والد"، سیستم نصب شده، واقع در /lib، /usr/lib و دیگران، دیگر در دسترس نخواهند بود، بنابراین برنامه های کامپایل شده پویا از کار کردن خودداری می کنند، علاوه بر این، سازگاری نسخه توسط هیچ کس تضمین نمی شود.

    برای جلوگیری از این، همه شما نیاز دارید نرم افزاربرای سیستم آینده خود، ابتدا آن را به صورت ایستا کامپایل می کنیم. بیایید با پوسته bash شروع کنیم. (طرفداران ZSH یا TCSH می توانند مفسرهای مورد علاقه خود را پس از نصب سیستم نصب کنند، اما استفاده از آنها در مرحله ساخت توسط نویسنده LFS در نظر گرفته نشده است). باید بررسی کنید که آیا فایل /usr/lib/libcurses.a را دارید یا خیر و اگر نه، بسته ncursesdev را نصب کنید. همه بسته‌ها باید با پرچم‌های ساخت استاتیک ساخته شوند: "--enable-static-link"، "--disable-shared"، یا "--static". کدام یک مناسب هر کدام است مورد خاص، را می توان در مستندات یک بسته خاص یا از خروجی یک اسکریپت پیکربندی اجرا شده با گزینه "--help" یافت.

    $ ./configure --help

    برای اینکه برنامه های کامپایل شده بعدی را با برنامه های "دینامیک" اشتباه نگیریم، یک دایرکتوری ویژه برای آنها ایجاد می کنیم:

    $ mkdir $MYLIN/stat

    هنگام ساخت و نصب بسته ها، فراموش نکنید که پارامتر "--prefix=$MYLIN/stat" را برای انتقال فایل ها به این دایرکتوری اضافه کنید. و در نهایت، bash را نصب کنید:

    $ ./configure --enable-static-link --prefix=$MYLIN/stat

    $ساخت

    $ را نصب کنید

    مابقی بسته های لازم را نیز به همین ترتیب جمع آوری می کنیم. : binutils، bzip2، textutils، texinfo، tar، sh-utils، gcc، grep، gzip، gawk، diffutils، fileutils، make، patch، sed،و در واقع لینوکس کرنل.

    بله، هنگام کامپایل کرنل، فراموش نکنید که برای نسخه های کرنل قدیمی (2.2.x-2.4.x) باید از gcc 2.95 استفاده کنید و برای نسخه فعلی 2.6.x توصیه می شود از gcc 3.x استفاده کنید تا هیچ مشکلی وجود ندارد

    فراموش نکنید که به بخش های مربوطه کتاب LFS نگاه کنید، در مورد این و بسیاری از تفاوت های ظریف دیگر می گوید. به طور کلی، کامپایل کردن هسته در LFS با روش مشابهی که هنگام استفاده از کیت توزیع نصب شده بر روی HDD انجام می شود، تفاوتی ندارد. منبع هسته را در $MYLIN/usr/src/linux-2.6.xx از حالت فشرده خارج کنید، سپس با اجرای آن پیکربندی کنید:

    $ make menuconfig

    فرآیند پیکربندی پارامترهای هسته بارها در اینترنت توضیح داده شده است (6)، به سختی نیازی به پرداختن به جزئیات بیشتر در این مورد نیست. بعد، دستورات زیر را در پوشه منبع Linux-kernel می دهیم:

    $ ساخت bzImage

    $ ساخت ماژول

    همه چیز، در $MYLIN/usr/src/linux-2.6.xx/arch/i386/boot/bzImage هسته جدید است.

    بعد، ما $MYLIN/etc/passwd و $MYLIN/etc/group را ایجاد می کنیم. در اول، ما تا کنون تنها کاربر - root را با هر رمز عبور و در دومی، گروه های کاربری را تجویز می کنیم (برای شروع با یک گروه ریشه نیز کافی است).

    این کار آماده سازی ما را برای مرحله بعدی تکمیل می کند و به مونتاژ پویا ظریف تری می رویم.

    مونتاژ دینامیک

    اکنون باید دایرکتوری ریشه را به /mnt/mylin تغییر دهیم، جایی که فقط از ابزارهای کامپایل شده استاتیک استفاده خواهیم کرد - دیگر نمی توانیم به کمک ابزارهای سیستم عامل "والد" متوسل شویم. دستور را در کنسول می دهیم:

    $ chroot $MYLIN/usr/bin/env -i

    >HOME=/root TERM=$TERM PS1='u:w$'

    >PATH=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin

    >/stat/bin/bash --ورود به سیستم

    با این دستور مسیرها را مشخص کردیم فایل های اجرایی، نوع ترمینال، مفسر و نوع خط فرمان.

    برای اینکه برخی از برنامه ها کار کنند، باید نصب کنید سیستم فایل proc در سیستم جدید

    $ mount proc /proc -t proc

    حساس ترین لحظه فرا رسیده است. ساخت کتابخانه glibc او مسئول ترین است زیرا اکثر مردم بدون او کار می کنند. برنامه های لازماین کار را نخواهد کرد و استفاده از لینوکس بدون کتابخانه هسته هیچ فایده ای ندارد. از طرف دیگر ساختن glibc اغلب مشکلات زیادی را ایجاد می کند.

    هنگام ساخت، ما پارامتر "--prefix=$MYLIN/stat" را مشخص کردیم، بنابراین هنگام تغییر ریشه، تمام بسته های استاتیک ساخته شده در فهرست /stat پارتیشن جدید سیستم عامل قرار می گیرند.

    بنابراین، آرشیو glibc-2.x.x.tar.gz را باز کنید (مثلاً در پوشه /usr/src/) و به دایرکتوری glibclinuxthreads بروید. به دلیل اینکه در این مرحله شناسایی نام کاربر در سیستم غیرممکن است (فقط به دلیل عدم وجود glibc و سایر کتابخانه ها) و نصب glibc نیاز به یک کد منبع را کمی تغییر دهیم. مفسر پرل که ما نداریم.

    جایگزین نام کاربر ریشهدر فایل login/Makefile به uid آن، یعنی 0، و متغیر $PERL در فایل malloc/Makefile باید با مسیر مفسر - /usr/bin/perl - جایگزین شود و به سادگی در طول پیکربندی نادیده گرفته می‌شود.

    $ /usr/src/glibc-2.x.x/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin &&

    & درست کن

    و نصب کنید

    $ make localedata/install-locales

    $ /stat/bash --login

    اگر همه کارها را به درستی انجام داده باشید، glibc کامپایل می شود، "root" در نهایت در اعلان ظاهر می شود و همه برنامه ها را می توان به صورت پویا دوباره کامپایل کرد.

    نصب کرنل را تمام کنید:

    $ make modules_install

    $ را نصب کنید

    برای انتقال هسته جدید به پوشه /boot، یک دستور دیگر را اجرا کنید:

    $ را نصب کنید

    ما همه برنامه های نصب شده و برخی از برنامه های جدید را جمع آوری می کنیم، اکنون بدون پرچم های کامپایل ثابت. ما نیاز داریم (در این مرحله بسیار مهم است که کامپایل همه موارد زیر را فراموش نکنید) (جدول 1 را ببینید).

    جدول 1. مجموعه مورد نیاز از بسته ها برای مونتاژ

    تنظیم خودکار

    grep

    پرل

    خودروسازی

    groff

    ضربه شدید

    gzip

    procinfo

    bin86

    لوازم

    بینوتیل

    کمتر

    pmisc

    bzip2

    reiserfs-progs

    دیفیوتیل ها

    libtool

    e2fsprogs

    لیلو

    sh-utils

    سایه

    فایل

    ساختن

    syslogd

    fileutils

    makedev

    sysvinit

    یافته ها

    صفحات مرد

    خم شدن

    مدوتیل ها

    texinfo

    گاو

    نفرین می کند

    پارچه های پارچه ای

    netkitbase

    استفاده از لینوکس

    بیسون

    ابزارهای شبکه

    دریافت متن

    پچ

    پس از انجام کامپایل مجدد پویا، می توانید دایرکتوری را با بسته های ایستا ساخته شده حذف کنید:

    $ rm -rf /stat

    می توانید نفس راحتی بکشید و قهوه بنوشید - سخت ترین و روتین پشت سر گذاشته می شود. بیایید به ادامه مطلب برویم گام بعدی- پیکربندی اولیه سیستم ما

    پیکربندی اولیه سیستم

    قبل از ادامه پیکربندی، توجه می کنم که تمام تغییرات باید در فایل های دایرکتوری سیستم عامل جدید انجام شود و نه سیستم پدر و مادر.

    برای تنظیم زمان سیستم، اجازه دهید فایل /etc/sysconfig/clock حاوی فقط یک خط ایجاد کنیم:

    UTC=0

    اکنون ساعت رایانه زمان را در منطقه زمانی شما نمایش می دهد - به شرطی که مقدار زمان در BIOS به درستی تنظیم شده باشد.

    بیایید یک نام به رایانه بدهیم:

    echo "HOSTNAME=my_linux" > /etc/sysconfig/network

    اکنون پارتیشن هایی را که سیستم باید در هنگام بوت در /etc/fstab mount کند را مشخص می کنیم:

    # گزینه های سیستم فایل mount-point fs-type dump fsck-order

    /dev/hda5 / ext3 پیش‌فرض 1 1

    /dev/hda3 swap swap pri=1 0 0

    proc /proc پیش‌فرض proc 0 0

    به جای /dev/hda3 و /dev/hda5 پارتیشن‌های خود را بنویسید (روت و مبادله)، در صورت لزوم فایل را با نقاط مونت برای سایر پارتیشن‌های هارد دیسک و CD-ROM تکمیل کنید.

    حالا بیایید سیستم خود را قابل بوت کنیم.

    اگر علاوه بر lFS از موارد دیگر استفاده کنید توزیع های لینوکس، اکنون باید وارد شوید سیستم قدیمی- برای این دستور را اجرا می کنیم:

    خروج $

    قبلاً در سیستم عامل والد، موارد زیر را به فایل /etc/lilo.conf اضافه کنید:

    # LFS

    image=/boot/bzImage

    برچسب = lfs

    ریشه =

    فقط خواندنی

    واضح است که "/boot/bzImage" مسیر هسته سیستمی است که شما کامپایل کرده اید، و "پارتیشن" پارتیشن دیسکی است که دایرکتوری ریشه در آن قرار دارد.

    اگر قصد استفاده از سیستم عامل های دیگر و توزیع های لینوکس را ندارید، بلافاصله اقدام به راه اندازی LILO در LFS کنید.

    در این مورد، lilo.conf چیزی شبیه به این خواهد بود:

    boot=/dev/hda

    تاخیر=40

    فشرده - جمع و جور

    Vga = عادی

    Root=/dev/hda1

    فقط خواندنی

    Image=/boot/zImage-2.6.12

    برچسب = لینوکس

    بسته به پیکربندی خود تغییرات لازم را انجام دهید. بوت لودر را با دستور زیر به روز کنید:

    $ /sbin/lilo -v

    و اگر تمام مراحل قبلی به درستی انجام شود، خود را در یک سیستم جدید خواهیم دید. با این حال، مرحله طولانی تنظیم "زیبا" (توجه ویژه باید به امنیت سیستم جدید شود، زیرا LFS به طور پیش فرض بسیار ناامن به نظر می رسد، مانند هر سیستم عامل تازه نصب شده) هنوز در پیش است. اما دستچین شده نسخه لینوکسهمین حالا داری.

    P.S

    جرارد بیکمنز تنها کسی نیست که ایده ساخت لینوکس خود را دارد. پروژه دیگری، BYOLinux، به رهبری جاناتان تورپ، امروز توسعه خود را متوقف کرده است، اگرچه مستندات نوشته شده توسط او حتی در حال حاضر نیز مرتبط است، اما به اندازه کتاب LFS دقیق نیست و به روسی ترجمه نشده است. تفاوت اصلی روش جان این است که کتابخانه glibc بدون کامپایل مجدد از سیستم والد به سیستم فرزند منتقل می شود، این کار چندان کارآمد نیست، اما از بسیاری از مشکلات ساخت جلوگیری می کند. برخی از کاربران FreeBSD نیز میل به احساس طراح سیستم عامل را دارند.

    اکنون این کاملا امکان پذیر است - در http://ezine.daemonnews.org/200302/fbsdscratch.html مقاله ای در مورد ساخت FreeBSD از منبع به طور کامل وجود دارد - از توزیع ها تا پورت ها، و با روشی که مشابه روش معمول نیست. بازسازی» سیستم، اما شبیه به روش جرارد بیکمنز. خوب، اکنون شما یک سیستم شخصی و منحصر به فرد دارید که بر روی لینوکس ساخته شده است. در صورت بروز مشکل، به دنبال راه حل آنها در کتاب LFS بگردید، همه چیز با جزئیات در آنجا توضیح داده شده است. من همچنین توصیه می کنم کتابچه راهنمای کاربر را از پورتال http://www.tldp.org دانلود کنید شبکه لینوکسراهنمای مدیر، اگرچه مستقیماً برای LFS اعمال نمی شود، اما در مرحله تنظیم سیستم مفید خواهد بود. فراموش نکنید که با هر برنامه صفحات مختلف man و info نیز ارائه می شود که همچنین برای آسان کردن زندگی یک کاربر لینوکس طراحی شده است.

    1. کتاب LFS به زبان روسی - http://multilinux.sakh.com/lfs.
    2. پورتال رسمی پروژه LFS http://www.linuxfromscratch.org است.
    3. پورتال ByoLinux - http://www.byolinux.org.
    4. مقاله درباره FreeBSD از ابتدا - http://ezine.daemonnews.org/200302/fbsdscratch.html.
    5. مقاله ای در مورد کامپایل هسته لینوکس - http://vikos.lrn.ru/MyLDP/kernel/kompil-2-6.html .
    6. Bairak A. مروری بر Knoppix 3.7 نسخه روسی. - مجله «مدیر سیستم»، شماره 3، اسفند 1384 - 4-6 ص. ().

    یکی از بهترین راه ها برای صرفه جویی در زمان در هر فعالیتی ایجاد یک سیستم برای آن است. مزیت آن این است که با خودکارسازی و بهینه سازی کار، بهره وری بیشتری می کنید و برای کارهای دیگری که برایتان مهم هستند، زمان بیشتری می گیرید.

    سیستم یک روش، رویه یا روال است که برای انجام یک فعالیت تکراری از طریق یک استراتژی ایجاد می شود. سیستم ها به شما این امکان را می دهند که کار و زندگی خود را کارآمدتر مدیریت کنید.

    در اینجا برخی از زمینه های زندگی وجود دارد که می توانید برای آنها ایجاد کنید سیستم خود:

    • سیستم سازی
    • سیستم سازی
    • سیستماتیک کردن وظایف برای وبلاگ نویسی.
    • سیستم نظافت منزل.
    • سیستماتیک کردن روال صبح و عصر.
    • سیستم سازی پردازش ایمیل
    • سیستماتیک کردن وظایف کاری

    پنج مرحله زیر به شما امکان می دهد تقریباً برای هر فعالیتی سیستم خود را ایجاد کنید.

    موجودی بگیرید

    با شناسایی فعالیت هایی که به طور منظم انجام می دهید، چه در خانه و چه در محل کار، شروع کنید. روز خود را تجزیه و تحلیل کنید و به تمام فعالیت هایی که برنامه روزانه شما را تشکیل می دهند نگاهی بیندازید. به عنوان مثال: آماده شدن برای کار / مدرسه در صبح، آماده کردن کودکان برای مدرسه، رفت و آمد، پاسخ دادن به سوالات ایمیل هاو تماس های تلفنی، نوشتن گزارش، رفتن برای دویدن عصرانه، پختن شام، نوشتن یک پست وبلاگ، بازاریابی کتاب خود و غیره.

    به لیست موارد خاص برای مورد انتخاب شده بروید و موارد زیر را از خود بپرسید:

    • حال شما چطور است؟
    • آیا فکر می کنید تا آنجایی که ممکن است کارآمدتر این کار را انجام می دهید؟
    • کجا زمان زیادی را تلف می کنید؟
    • کجا پول از دست می دهید؟
    • چه فعالیت هایی بیشتر شما را ناراحت می کند؟
    • چه چیزی در حال حاضر به سرعت انجام نمی شود؟
    • چه چیزی باید بهینه شود؟

    بر اساس موجودی خود، یک فعالیت را برای سازماندهی انتخاب کنید.

    آنچه را که در حال حاضر انجام می دهید تجزیه و تحلیل کنید

    اقداماتی را که می خواهید سازماندهی کنید با استفاده از روش عادی انجام دهید (یعنی طبق معمول رفتار کنید). فرآیند را با نوشتن تمام موارد زیر مستند کنید:

    • چه قدم هایی برمی دارید؟
    • از کدام ابزار ها استفاده می کنید؟
    • «گلوگاه‌ها» کجا هستند (جایی که زمان از دست می‌رود، دائماً تأخیر رخ می‌دهد، مشکلی پیش می‌آید)؟
    • چه چیزی شما را ناامید می کند؟
    • چقدر طول می کشد تا این فعالیت کامل شود؟
    • قیمت آن چند است؟
    • چه نتایجی می گیرید؟

    پس از آن سند دریافتی را بررسی و مطالعه کنید.

    یک فرآیند جدید را برنامه ریزی کنید

    همانطور که قبلاً اشاره کردیم، یک سیستم فرآیندی است که شما برای ساده‌سازی وظایف و افزایش کارایی ایجاد می‌کنید. به سند خود و فعالیتی که می خواهید بهینه سازی کنید نگاهی بیندازید و سوالات زیر را از خود بپرسید:

    • با انجام این فعالیت می خواهید به چه نتیجه ای برسید؟ برای رسیدن به چه هدفی تلاش می کنید؟ نتیجه ایده آل چیست؟
    • آیا تمام اقداماتی که انجام می دهید لازم است؟ آیا می توان برخی از آنها را حذف کرد؟
    • آیا مراحل را در کارآمدترین دنباله دنبال می کنید؟ آیا اگر ترتیب مراحل را تغییر می دادید، نتایج متفاوت بود؟
    • چگونه می توان همه اینها را سریعتر انجام داد؟
    • آیا می توانید یک چک لیست، نمودار، نقشه ذهنی یا اسکریپت برای این فعالیت ایجاد کنید؟
    • آیا می توان برخی از مراحل یا کل فرآیند را خودکار کرد؟ آیا برنامه ای هست که بتوان برای این کار استفاده کرد؟
    • آیا امکان واگذاری برخی مراحل یا کل فرآیند وجود دارد؟
    • آیا ابزارهایی که استفاده می کنید نیاز به به روز رسانی دارند؟

    حالا خودت را بنویس سیستم جدیدفهرست کردن هر مرحله با جزئیات

    برنامه را دنبال کنید

    هنگامی که یک برنامه دارید، باید فوراً آن را عملی کنید. ممکن است ابتدا به کمک دیگران نیاز داشته باشید یا ممکن است نیاز به خرید نرم افزار یا ابزار ارتقا داشته باشید.

    زمان شروع فرآیند و آزمایش عملکرد آن فرا رسیده است. آن را خرج کنید و به نتایج آن توجه کنید. سوالات زیر را از خود بپرسید:

    • آیا به نتایج دلخواه رسیدید؟
    • چه کارهایی؟
    • چه چیزی کار نمی کند؟
    • چقدر در زمان صرفه جویی کردید؟
    • همه اینها چقدر هزینه دارد؟ با توجه به نتایج، آیا سیستم موثر است؟
    • آیا با ساده ترین راه به هدف خود می رسید؟
    • آیا شکاف هایی در فرآیند وجود دارد؟
    • آیا می توان فرآیند را بیشتر بهینه کرد؟

    تنظیمات و تغییرات لازم را انجام دهید. سیستم خود را تا زمانی که به نتایج دلخواه خود برسید به روز کنید.

    به طور مستمر سیستم را بهبود دهید

    ردیابی سیستم شما به طور مداوم ارزش دارد، زیرا در دنیایی که به سرعت در حال تغییر است، می تواند به همین سرعت منسوخ شود. همیشه از خود بپرسید که آیا به بهبود نیاز است یا خیر.

    • آیا سیستم آنطور که باید کار می کند؟
    • آیا می توانید هزینه سیستم را کاهش دهید؟
    • آیا می توانید سیستم را حتی کارآمدتر کنید؟
    • آیا می توانید سیستم را برای گرفتن نتایج بهتر ساده کنید؟

    راه اندازی یک سیستم همیشه نیاز به سرمایه گذاری زمان دارد. اما در ابتدا بیشتر از آنچه که معمولاً انجام می دهید خرج می کنید، در نهایت مقدار زیادی از آن را پس انداز می کنید. و تاثیر استرس عملیاتی را به حداقل برسانید.

    ما برای شما آرزوی موفقیت داریم!