با قسمت بیست و یکم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس می باشد همراه ما باشید.
در قسمت قبل به بررسی سیستم فایل پرداختیم و به init رسیدیم، در این قسمت مطالب قسمت قبل را کاملتر میکنیم.
چاقوی سویسی بردت رو بردار
BusyBox که روز اول بیربط به امبددلینوکس نوشته شد الان قلب تپنده خیلی از امبدد سیستمها هست. BusyBox رو براساس قانون ۸۰/۲۰ نوشتن. یعنی این برنامه با ۲۰ درصد فضا ۸۰ درصد کارهای بدردبخور رو انجام میده، خیلی از امکانات لینوکس دسکتاپ رو داره و خیلی از برنامههای لینوکس مثل init، cat، top، vi و … داخلش هست. همه این برنامهها توی یک فایل اجرایی هستن. حالا بریم BusyBox رو دانلود و بیلد کنیم:
1 2 | cd ~/EmbeddedLinux/RPI3BP/sysapps git clone git://busybox.net/busybox.git |
خبر خوب اینکه سیستم تنظیمات و بیلد BusyBox مثل یوبوت و کرنل و کراستول انجی هست 🙂
1 2 3 | cd busybox/ make distclean make defconfig |
حالا بریم توی پیکربندیش ببینیم چه خبره!
1 | make menuconfig |
چقدر اپلت مختلفه و امکانات زیادی داره! جالبه جلوی هر اپلت سایزش رو هم نوشته، چون ما روی بردمون به اندازه خدا! حافظه داریم من همه رو میذارم فعال باشه.
و فقط بهش میگم که محل نصب نهایی این فولدر هست.
1 | /home/at00/EmbeddedLinux/RPI3BP/rootfs |
حالا بریم بیلدش کنیم و نصبش کنیم:
مثل بقیه اینجا هم باید کراس کامپایلر و معماری رو مشخص کنیم پس اول سورس میکنیم.
1 2 | source ../../at00exports.sh make |
حالا ببینم با این همه اپلت حجمش چقدر شد:
1 2 | ls -l busybox -rwxr-xr-x 1 at00 at00 1062304 Jun 5 16:24 busybox |
بله ۱.۱ مگ! فقط و فقط حالا بریم نصبش کنیم سر جاش
1 | make install |
Device Nodes
یونیکس یه فلسفه داره که میگه همهچیز فایل هست بهجز رابطهای شبکه که سوکت هستن.
توی لینوکس هم همه دیوایسها یه نود هستن.
نود ممکنه به یه دیوایس از نوع block یا از نوع character اشاره کنه.
بهجز حافظهها همهی دیوایسها از نوع character هستن.
ما باید برای همهی دیوایسهامون نود رو از قبل بسازیم و یا اینکه از برنامهای استفاده کنیم که در زمان اجرا همه نودها رو به سازه.
نودها با دستور زیر ساخته میشن
1 | mknod <name> <type> <major> <minor> |
تایپ یا c هست یا b که مشخصه به چی اشاره داره
major, minor هم از فایل Documentation/devices.txt توی سورس کرنل قابلدسترس هستن.
فعلاً برای این سیستم حداقلی ما دو تا نود کفایت میکنه که با دستور mknode میسازیمشون:
1 2 3 | sudo mknod -m 666 dev/null c 1 3 sudo mknod -m 600 dev/console c 5 1 |
فایل سیستمهای sysfs و proc
این دوتا در حقیقت شبه فایل سیستم هستن و باید در هنگام اجرا اونها رو سرجاشون با دستور خودش mount کنیم.
1 2 | mount -t proc proc /proc mount -t sysfs sysfs /sys |
توی این دوتا یه سری فایل هست که بعضیهاشون فقط خواندنی و بعضیها هم خواندنی و هم نوشتنی هستن.
در حقیقت این دوتا یه راه ارتباطی با کرنل و درایورهای دیوایسها هستن.
ماژولهای کرنل
اگر ماژولی داره کرنلتون که بعداً قرار هست ازش استفاده کنید اون رو هم باید توی این قسمت کپی کنید
1 | lib/modules/ |
پیدا کردن ماژولها دونه دونه خیلی کار سختی هست واسه همین پیشنهاد میکنم از خود make کرنل استفاده کنید:
INSTALL_MOD_PATH آدرس روتمون هست که حتماً حتماً حتماً باید ست به شه وگرنه همهچیز میریزه به هم!
1 2 | cd ~/EmbeddedLinux/RPI3BP/kernel/linux make INSTALL_MOD_PATH=/home/at00/EmbeddedLinux/RPI3BP/rootfs/ modules_install |
فعلاً برای ساخت سیستم حداقلیمون ماژولهای کرنل رو اضافه نمیکنیم.