نوشته‌های من

درباره برنامه‌نویسی، بازی، کتاب و هر چیزی که دوست داشته باشم

نوشته‌های من

درباره برنامه‌نویسی، بازی، کتاب و هر چیزی که دوست داشته باشم

نوشته‌های من
طبقه بندی موضوعی

نصب لینوکس آرچ بر روی کوبی‌بورد

پنجشنبه, ۱۰ اسفند ۱۳۹۱، ۰۱:۵۵ ق.ظ

ویرایش: تلفظ صحیح Arch، آرچ است و نه آرک. در متن اصلاح شد.

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

نحوه بوت شدن

قبل از بررسی و انجام مراحل مختلف نصب و راه‌اندازی لینوکس روی کوبی‌بورد، بهتر است مراحل بوت شدن این بورد را متوجه شویم.  پردازنده‌های Allwinner A10 دارای یک BROM هستند. این قسمت از پردازنده از دو بخش تشکیل شده است. بخش اول وظیفه راه‌اندازی بورد از روی حافظه‌های جانبی همچون NAND و یا MMC را دارد و بخش دوم از یک برنامه به نام FEL تشکیل شده است که در اینجا به آن نمی‌پردازیم. چنانچه دکمه مربوط به FEL پایین نباشد BROM بخش اول را اجرا می‌کند که وظیفه راه‌اندازی بورد از روی حافظه‌های جانبی را دارد و به ترتیب زیر عمل خواهد کرد:
  1. اطلاعات مورد نیاز راه‌اندازی بورد را از اولین کارت حافظه می‌خواند (حداقل این اطلاعات ۴کیلو بایت هستند و از ابتدای کارت حافظه ۸کیلوبایت فاصله دارند) چنانچه این اطلاعات وجود داشته باشند و معتبر باشند ادامه راه‌اندازی به این قسمت سپرده می‌شود.
  2. چنانچه اطلاعات در اولین کارت حافظه وجود نداشته باشند و یا معتبر نباشند اطلاعات مورد نظر از حافظه NAND خوانده می‌شود و در صورت موجود بودن و معتبر بودن ادامه راه‌اندازی به این قسمت سپرده می‌شود.
  3. و در ادامه چنانچه اطلاعات مورد نظر روی حافظه NAND وجود نداشته و یا معتبر نباشد این اطلاعات از روی کارت حافظه دوم خوانده می‌شود.
  4. و در نهایت چنانچه اطلاعات مورد نیاز در کارت حافظه دوم نیز موجود نباشد و یا نامعتبر باشد، ادامه راه‌اندازی بورد به برنامه FEL واگذار خواهد شد.
اطلاعات راه‌اندازی که BROM از روی کارت حافظه می‌خواند به «راه‌انداز برنامه ثانویه» و یا (SPL) شناخته می‌شود. همانطور که متوجه شده‌اید BROM قابل تغییر نیست و وظیفه SPL مربوط به راه‌اندازی سخت‌افزار بورد است و پس از انجام وظایف خود راه‌انداز دیگری را فرا‌می‌خواند که به آن U-Boot گفته می‌شود. U-Boot راه‌اندازی است که سیستم عامل را راه‌می‌اندازد. U-Boot می‌بایست از ۳۲کیلوبایتی اول حافظه شروع شود.

در نتیجه مراحل راه‌اندازی بورد به این ترتیب است:

ترتیب راه‌اندازهای کوبی‌بورد
در بیشتر موارد فایل‌های مربوط به SPL Loader و U-Boot برای هر سخت‌افزاری، توسط سازندگان آن در دسترس است و نیازی به تولید آن‌ها نیست هر چند این امکان وجود دارد. برخی سازندگان سخت‌افزار همچون کوبی بورد یک بسته سخت‌افزاری در اختیار کاربران قرار می‌دهند که علاوه بر راه‌انداز‌ها حاوی کرنل کامپایل شده مناسب برای بورد و ماژول‌های کرنل و درایورهای سخت‌افزاری آن بورد می‌باشند.
بسته سخت‌افزاری کوبی‌بورد با ۱گیگا بایت حافظه را از اینجا و بسته سخت‌افزاری کوبی بورد با ۵۱۲مگا بایت حافظه را از اینجا دریافت کنید.

نحوه ذخیره سازی

اکنون که مراحل مختلف راه‌اندازی بورد را بررسی کردیم. نوبت به عمل می‌رسد. با توجه به میزان حافطه کوبی‌بوردی که دارید، بسته سخت‌افزاری آن را از لینک‌های بالا دریافت کنید و از حالت فشرده خارج کنید. این بسته‌ها حاوی راه‌اندازها، کرنل و درایور‌های سخت‌افزاری است.
راه‌اندازها دقیقا باید در مکان مشخصی از کارت حافظه قرار بگیرند. مکان دقیق آن‌ها را می‌توانید در جدول زیر مشاهده نمایید.
start size usage
0 8KB Unused, available for partition table etc.
8 24KB Initial SPL loader
32 512KB u-boot
544 128KB environment
672 352KB reserved
1024 - Free for partitions
بنابراین یک مگا بایت اول کارت حافظه بایستی برای کپی کردن راه‌اندازها نگه داشته شود و پارتیشنی در این یک مگا بایت ایجاد نگردد. فایل‌های مربوط به راه‌انداز کرنل باید در اولین پارتیشن قرار بگیرد. اندازه این پارتیشن را ۶۴مگا بایت در نظر می‌گیریم. این پارتیشن باید یک پارتیشن FAT به کد (0xC0) و bootable باشد. پارتیشن دوم در ادامه پارتیشن اول و به اندازه مابقی کارت حافظه است و درایورها، ماژول‌های کرنل و همچنین لینوکس در این پارتیشن قرار می‌گیرد. این پارتیشن باید یک پارتیشن EXT4 باشد. همانند تصویر زیر.
ترتیب، نوع و اندازه پارتیشن ها
این تغییرات را می‌توانید با هر برنامه مدیریت پارتیشنی انجام دهید. در اینجا مراحل مختلف را با استفاده از فرمان‌های sfdisk و dd شرح می‌دهیم.
ابتدا دیسک مربوط به کارت حافظه را پیدا می‌کنیم. در این مرحله دقت بسیار زیادی انجام دهید، چرا که اشتباه در انتخاب صحیح آن ممکن است منجر به از دست دادن اطلاعاتتان شود. برای این کار می‌توانید با استفاده از lsblk دیسک‌های موجود در سیستم را فهرست کنیم و دیسک درست را مشخص کنیم.
$ lsblk -l | grep disk
فرمان بالا فهرستی از دیسک‌های موجود به همراه اندازه آن‌ها ارائه می‌دهد و می‌توانید با استفاده از این اطلاعات دیسک صحیح را مشخص کنید.
sda    8:0    0 149.1G  0 disk 
sdb    8:16   0 931.5G  0 disk 
sdc    8:32   1   7.2G  0 disk
دیسک مورد نظر برای من sdc است. از این نام در فرمان‌های بعدی استفاده خواهد شد پس آن را در  متغیر DEVICE ذخیره می‌کنیم و سپس ۱مگا بایت اول را با استفاده از فرمان زیر صفر می‌کنم تا اطلاعات مربوط به جدول پارتیشن‌ها و مکان‌هایی که قرار است راه‌انداز‌ها را قرار دهیم پاک کنیم.
$ DEVICE=/dev/sdc
$ sudo dd if=/dev/zero of=$DEVICE bs=1M count=1

سپس با استفاده از فرمان زیر  اقدام به ایجاد پارتیشن‌ها می‌کنیم.

$ { echo 1,64,0xC0,*; echo 65,,L,-; } | sudo sfdisk -L -uM $DEVICE
$ sudo sfdisk -L -R $DEVICE

دقت کنید که شروع اولین پارتیشن ۱ باشد و نه صفر. تا یک مگا بایت اول کارت حافظه فضای خالی برای کپی کردن راه‌انداز‌ها باقی بماند. فرمان دوم برای خواندن مجدد(reload) جدول پارتیشن است.

آماده سازی راه‌انداز‌ها

اکنون که فضای ۱مگا بایتی ابتدای کارت حافظه و پارتیشن‌ها آماده هستند. زمان کپی کردن است. بسته سخت‌افزاری کوبی‌برد پس از باز شدن از حالت فشرده دارای ۳ پوشه است. از این به بعد مسیر مربوط به فایل‌های این بسته را $HWPACK می‌نامیم. پوشه bootloader حاوی sunxi-spl.bin و u-boot.bin است، پوشه kernel حاوی uImage و script.bin است و پوشه rootfs حاوی درایور‌های لینوکس است. ابتدا فایل‌های راه‌انداز را به همان ترتیبی که در بالا ذکر شد با استفاده از فرمان dd روی فضای خالی کارت حافظه کپی می‌کنیم.

$ mkdir /tmp/HWPACK
$ HWPACK=/tmp/HWPACK
$ sudo tar -xf cubieboard_hwpack.tar.xz -C $HWPACK
$ cd $HWPACK/bootloader/
$ sudo dd if=sunxi-spl.bin of=$DEVICE bs=1024 seek=8 $ sudo dd if=u-boot.bin of=$DEVICE bs=1024 seek=32

با دو فرمان زیر پارتیشن اول و دوم را فرمت می‌کنیم 

$ sudo mkfs.vfat -I ${DEVICE}1
$ sudo mkfs.ext4 ${DEVICE}2

و آن‌ها را در دو پوشه مجزا mount می‌کنیم.

$ mkdir /tmp/MNT{1,2}
$ sudo mount ${DEVICE}1 /tmp/MNT1
$ sudo mount ${DEVICE}2 /tmp/MNT2

سپس فایل‌های پوشه kernel را در پارتیشن اول کپی می‌کنیم.

$ cd $HWPACK/kernel/
$ sudo cp -a * /tmp/MNT1

آماده سازی لینوکس آرچ

لینوکس آرچ را از اینجا دریافت کنید و از حالت فشرده خارج سازید. پوشه حاوی فایل‌های لینوکس را از این به بعد $ARCHARM می‌نامیم. سپس تمامی پوشه‌ها را در پارتیشن دوم کپی می‌کنیم.

$ mkdir /tmp/ARCH
$ ARCHARM=/tmp/ARCH
$ sudo tar -zxf ArchLinuxARM-sun4i-latest.tar.gz -C $ARCHARM
$ sudo cp -a $ARCHARM/* /tmp/MNT2

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

اولین تفاوت مربوط به فایل حاوی اطلاعات ماژول‌هایی است که در زمان بوت شدن سیستم لود می‌شوند و بجای مسیر /etc/modules بایستی در مسیر /etc/modules-load.d/*.conf باشد. بنابراین پس از کپی کردن پوشه etc در کارت حافظه این تغییر را نیز انجام می‌دهیم.

$sudo cp -a $HWPACK/rootfs/etc /tmp/MNT2/
$sudo mv /tmp/MNT2/etc/modules /tmp/MNT2/etc/modules-load.d/cubieboard.conf

سپس فایل‌های پوشه lib را درون کارت حافظه کپی می‌کنیم و با این دقت که در لینوکس آرچ تمامی ماژول‌های کرنل به جای مسیر /lib در مسیر /usr/lib قرار دارند. بنابراین بدین شکل عمل می‌کنبم.

$sudo cp -a $HWPACK/rootfs/lib/* /tmp/MNT2/usr/lib/

و در نهایت

$sync
$sudo umount /dev/sdc1

$sudo umount /dev/sdc2

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

منابع

  1. http://linux-sunxi.org/U-boot
  2. https://github.com/linux-sunxi/u-boot-sunxi/wiki
  3. http://rhombus-tech.net/allwinner_a10/a10_boot_process/
  4. http://www.cubieforums.com/index.php/topic,79.0.html


  • حامد ذقاقی

نظرات  (۳)

با سلام و خسته نباشید در مورد مطلب :)

خواستم عرض کنم که آرک لینوکس اشتباهِ و آرچ لینوکس درسته ! آرچ تلفظ میشه :)

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

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

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

با تشکر
پاسخ:
واقعا عذرخواهی می‌کنم بابت تاخیر یک ماهه،

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