با قسمت بیست و سوم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس می باشد همراه ما باشید.
در قسمت قبلی سری آموزشی امبددلینوکس با پیدا کردن کتابخانه مورد نظر آشنا شدیم، در این قسمت می خواهیم به ساختن initramfs بپردازیم پس با سیسوگ همراه باشید.
ساختن initramfs
ما الان یه فایل سیستم روت داریم که توش حداقلهایی که کرنل نیاز داره هست. حالا میخوایم باهاش یه initramfs درست کنیم که لینوکسمون کامل بشه و بتونیم ازش استفاده کنیم.
قبلش من یه برنامه ساده که یه متن سلام دنیا! رو پرینت میکنه کامپایل میکنم و میذارمش توی روتمون:
1 2 | cd ~/EmbeddedLinux/RPI3BP/sysapps/ vi hello.c |
1 2 3 4 5 6 7 8 | #include <stdio.h> #include <stdint.h> int main (void) { printf("Hello World!\r\n"); printf("I'm Aniroot ^_^\r\n"); return 0; } |
1 2 | source ../at00exports.sh $GCC hello.c -o ../rootfs/home/hello |
حالا بریم initramfs رو بسازیم:
1 2 3 4 | cd ~/EmbeddedLinux/RPI3BP/rootfs find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio cd .. gzip initramfs.cpio |
پرتاب
میخوایم پرتابی داشته باشیم که باهاش بتونیم لاگین کنیم و برنامهای که نوشتیم رو اجرا کنیم. در خصوص این برد عزیز! و دوستداشتنی شما، قبلاً گفته بودم بهتر هست از بوتلودر خودش استفاده کنیم، الان میگم برای اجرای کامل مجبوریم از بوت لودر خودش به جای یوبوت استفاده کنیم وگرنه دردسر زیاد خواهیم داشت.
فایل config بوتلودر رو یادتون هست الان باید این خط رو بش اضافه کنیم:
1 | initramfs initramfs.cpio.gz followkernel |
فایل cmdline هم نیاز داره متنش عوض بشه و به کرنل بگیم که initramfs داریم و روت رو باید از روی اون لود کنه و برنامه init هم بش معرفی کنیم:
1 | root=/dev/root rootwait console=tty1 console=ttyS0,115200 console=ttyAMA0,115200 rdinit=/bin/sh |
بقیه فایلهایی که توی درایو بوت بودن رو کاری نداریم و فقط initramfs.cpio.gz رو کپی میکنیم توی این فولدر. حالا کارت حافظه رو میذاریم توی برد و روشن میکنیم:
آخرین پیغامها ایناست:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [ 6.623395] of_cfs_init [ 6.633175] of_cfs_init: OK [ 6.645060] uart-pl011 3f201000.serial: no DMA platform data [ 6.663008] mmc1: queuing unknown CIS tuple 0x80 (7 bytes) [ 6.673327] Freeing unused kernel memory: 3456K [ 6.695650] Run /bin/sh as init process /bin/sh: can't access tty; job control turned off / # [ 6.728731] mmc0: host does not support reading read-only switch, assuming write-enable [ 6.756611] mmc0: new high speed SDHC card at address 0001 [ 6.774098] usb 1-1.1: new high-speed USB device number 3 using dwc_otg [ 6.796693] mmcblk0: mmc0:0001 SD 3.72 GiB [ 6.813978] mmcblk0: p1 p2 [ 6.870718] mmc1: new high speed SDIO card at address 0001 [ 6.888739] usb 1-1.1: New USB device found, idVendor=0424, idProduct=2514, bcdDevice= b.b3 [ 6.917277] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 6.940490] hub 1-1.1:1.0: USB hub found [ 6.953961] hub 1-1.1:1.0: 3 ports detected [ 7.321168] dwc_otg_handle_wakeup_detected_intr lxstate = 2 [ 7.685588] usb 1-1.1.1: new high-speed USB device number 4 using dwc_otg [ 7.795340] usb 1-1.1.1: New USB device found, idVendor=0424, idProduct=7800, bcdDevice= 3.00 [ 7.823632] usb 1-1.1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 8.114050] lan78xx 1-1.1.1:1.0 (unnamed net_device) (uninitialized): No External EEPROM. Setting MAC Speed [ 8.158502] lan78xx 1-1.1.1:1.0 (unnamed net_device) (uninitialized): int urb period 64 |
یه اینتر میزنیم و دستور زیر رو تایپ میکنیم:
1 2 3 | ls bin etc lib proc sbin tmp var dev home linuxrc root sys usr |
تبریک میگم! به دنیای لینوکس خوش اومدین!
حالا دو تا شبه فایل سیستممون رو هم مونت میکنیم تا کار تموم بشه:
1 2 | mount -t proc proc /proc mount -t sysfs sysfs /sys |
این هم خروجی دستور ps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | ps PID USER TIME COMMAND 1 0 0:02 /bin/sh 2 0 0:00 [kthreadd] 3 0 0:00 [rcu_gp] 4 0 0:00 [rcu_par_gp] 5 0 0:00 [kworker/0:0-mm_] 6 0 0:00 [kworker/0:0H] 7 0 0:00 [kworker/u8:0-ev] 8 0 0:00 [mm_percpu_wq] 9 0 0:00 [rcu_tasks_kthre] 10 0 0:00 [rcu_tasks_rude_] 11 0 0:00 [rcu_tasks_trace] 12 0 0:00 [ksoftirqd/0] 13 0 0:00 [rcu_preempt] 14 0 0:00 [migration/0] 15 0 0:00 [cpuhp/0] 16 0 0:00 [cpuhp/1] 17 0 0:00 [migration/1] 18 0 0:00 [ksoftirqd/1] 19 0 0:00 [kworker/1:0-rcu] 20 0 0:00 [kworker/1:0H-ev] 21 0 0:00 [cpuhp/2] 22 0 0:00 [migration/2] 23 0 0:00 [ksoftirqd/2] 24 0 0:00 [kworker/2:0-mm_] 25 0 0:00 [kworker/2:0H] 26 0 0:00 [cpuhp/3] 27 0 0:00 [migration/3] 28 0 0:00 [ksoftirqd/3] 29 0 0:00 [kworker/3:0-mm_] 30 0 0:00 [kworker/3:0H] 31 0 0:00 [kdevtmpfs] 32 0 0:00 [netns] 33 0 0:00 [kworker/2:1-mm_] 34 0 0:00 [kworker/1:1-eve] 35 0 0:00 [kworker/0:1-eve] 36 0 0:00 [kworker/3:1-mm_] 37 0 0:00 [kauditd] 38 0 0:03 [kworker/1:2-eve] 39 0 0:00 [khungtaskd] 40 0 0:00 [oom_reaper] 41 0 0:00 [writeback] 42 0 0:00 [kcompactd0] 60 0 0:00 [kblockd] 61 0 0:00 [blkcg_punt_bio] 62 0 0:00 [watchdogd] 63 0 0:00 [kworker/1:1H-kb] 64 0 0:00 [rpciod] 65 0 0:00 [kworker/u9:0] 66 0 0:00 [xprtiod] 67 0 0:00 [kswapd0] 68 0 0:00 [nfsiod] 69 0 0:00 [iscsi_eh] 70 0 0:00 [iscsi_destroy] 71 0 0:00 [dwc_otg] 72 0 0:00 [DWC Notificatio] 73 0 0:00 [vchiq-slot/0] 74 0 0:00 [vchiq-recy/0] 75 0 0:00 [vchiq-sync/0] 76 0 0:00 [zswap-shrink] 77 0 0:00 [kworker/u8:1] 78 0 0:00 [kworker/1:3-eve] 79 0 0:00 [kworker/1:4-eve] 80 0 0:00 [kworker/1:5-eve] 81 0 0:00 [kworker/1:6-eve] 82 0 0:00 [kworker/1:7-eve] 83 0 0:00 [kworker/1:8-rcu] 84 0 0:00 [mmc_complete] 86 0 0:00 [irq/184-usb-001] 90 0 0:00 ps |
و در نهایت اجرای برنامهی خودمون:
1 2 3 | /home/hello Hello World! I'm Aniroot ^_^ |
ما الان یک لینوکس حداقلی داریم که با اون، خیلی کارها میشه کرد و خیلی کارها رو نمیشه کرد و مبحث امبدد لینوکس ما همینجا تکمیل میشه و به پایان میرسه.
جالبه کل حجم لینوکس ما که ۶۴ بیتی هم هست به ۳۲ مگابایت نمیرسه و حتی میتونستیم با پیکربندی کرنل و بیزی باکس و تریکهای دیگهای مثل استفاده از بیلد استاتیک بیزی باکس، استفاده از کتابخونههای کم حجمتر و … حجمش رو خیلی کمتر کنیم طوری که کلش روی یه SPI فلش هشت مگاباتی جا بشه. یک زمانی کل لینوکس روی یک فلاپی جا میشده!
اگه بخوایم وارد جزییات بشیم و این لینوکس حداقلیمون رو مرحله به مرحله تکمیل کنیم همزمانبره و هم حوصلهبر و هم خیلی سخت هست.
توی فصل بعد با ابزاری آشنا میشیم که همهی کارهایی که تا الان انجام دادیم رو واسمون یک جا انجام بده.
از اول تا آخر آموزش رو دنبال کردم همراه با خواندن نظرات و …
قشنگ مشخصه از افت آمار نظرات نسبت به قسمت های اول خیلی از بچه های الکترونیکی از قسمت های 15 به بعد تسمه تایم پاره کردن و ادامه ندادند. مباحث نرم و زیبا شروع شد و در ادامه واقعا خیلی سنگین شد ، چون فاصله هم افتاد و احتمالا خیلی از بچه ها مثل بنده منابع زبان اصلی رو نتونستن مطالعه کنن لیچی هم که کنار گذاشته شد کلا و الان از خودم میپرسم آیا واقعا نیازه که بریم داخل امبدد لینوکس ؟ یا یه گوشه نون و ماستمون رو بخوریم و با همین میکرو ها سر کنیم 😂😂
واقعا خداقوت به شما بابت آموزش های عالی تون . کاش عزیزان دیگه ای هم کمک میکردند و مثلا مثال های بیشتر – و توضیحات بیشتری رو در بخش هایی که شما فرصت نداشتید اضافه میکردند. اگر بنده بلد بودم حتما اینکار و میکردم. چون واقعا کار شما کمک خیلی بزرگیه و تاثیر زیادی میذاره روی . انشاا… خیرش رو در دنیا و آخرت ببینید. با تشکر
سلام سامان جان خوبی
ممنون که پیگیر هستی و به تیم ما محبت دارید و انرژی میدید 😘
خوب برای این موضوعات بچهها باید برن سراغ زنجیرتایم 😎 تا به مقصد برسن 😉
موضوع امبدد لینوکس تخصصی و فوق تخصصی هست و مثل میکرو کنترلرها نیست که سریع جواب بده، البته از نقطه یک نظر، آینده از اینجا شروع میشه و برای خودش بازار داره 😉 به همین خاطر در کنار نون و ماست یک چیزهای دیگه هم لازمه 😅
ما خیلی علاقهمند هستیم تا آموزش ها را گسترش بدیم و حتی محصولاتی در این زمینه داشته باشیم تا این بخش صنعت سریعتر در ایران رشد پیدا کنه و بچه ها استفاده کنند و در حال برنامه ریزی هستیم، گرچه مسائل و موانعی هم هست که در حال رفع و رجوع آن هستیم و در این مسیر از هر گونه نظر و پیشنهادی، استقبال می کنیم.
در حال حاضر از این راه با ما در تماس باشید 🌺
http://www.aniroot.com
ممنون که اموزش رو دارید همچنان ادامه میدید و کامل میکنید
من چندتا درس عقب تر هستم ولی دارم خودمو میرسونم
ممنونم از شما
سلام وقتتون بخیر
ممنون از همراهی شما
خیلی خیلی ممنونم بابت این آموزش مفصل و خوب. بی صبرانه منتظر قسمت بعدی هستیم.
سلام وقتتون بخیر
ممنون از همراهی شما
سلام و درود بر Rich_Dad عزیز
سپاس فراوان بابت مطالب کامل و مفید شما در حوزه امبدد لینوکس و امید موفقیت روزافزون
مهندس جان میخواستم باشما در تماس باشم.
سلام
از طریق سایتشون میتونید باهاشون ارتباط بگیرید
https://aniroot.com