نصب لینوکس آرچ بر روی کوبیبورد
ویرایش: تلفظ صحیح Arch، آرچ است و نه آرک. در متن اصلاح شد.
در این مطلب سعی میکنم که نحوه نصب لینوکس آرچ را به روی کوبیبورد آموزش بدم. البته به تفصیل و به صورتی که با کمی دقت و تغییر بشود برای بوردهای آرم دیگر و برای نصب توزیعهای دیگر لینوکس هم مفید واقع شود. لازم به ذکر است که این نصب تنها بل خروجی تصویر HDMI آزمایش شده است و برای دریافت خروجی روی مانیتور و یا LCD بایستی بعد از نصب برخی تنظیمات تغییر یابند.
نحوه بوت شدن
- اطلاعات مورد نیاز راهاندازی بورد را از اولین کارت حافظه میخواند (حداقل این اطلاعات ۴کیلو بایت هستند و از ابتدای کارت حافظه ۸کیلوبایت فاصله دارند) چنانچه این اطلاعات وجود داشته باشند و معتبر باشند ادامه راهاندازی به این قسمت سپرده میشود.
- چنانچه اطلاعات در اولین کارت حافظه وجود نداشته باشند و یا معتبر نباشند اطلاعات مورد نظر از حافظه NAND خوانده میشود و در صورت موجود بودن و معتبر بودن ادامه راهاندازی به این قسمت سپرده میشود.
- و در ادامه چنانچه اطلاعات مورد نظر روی حافظه NAND وجود نداشته و یا معتبر نباشد این اطلاعات از روی کارت حافظه دوم خوانده میشود.
- و در نهایت چنانچه اطلاعات مورد نیاز در کارت حافظه دوم نیز موجود نباشد و یا نامعتبر باشد، ادامه راهاندازی بورد به برنامه FEL واگذار خواهد شد.
نحوه ذخیره سازی
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 |
$ 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
$ 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
اکنون کارت حافظه را درون بورد میگذاریم و بورد را روشن میکنیم. میتوانید با استفاده از پورت سریال به بورد وصل شوید و تنظیمات شبکه بورد را انجام دهید تا بتوانید لینوکس نصب شده به روز نمایید.
منابع
- http://linux-sunxi.org/U-boot
- https://github.com/linux-sunxi/u-boot-sunxi/wiki
- http://rhombus-tech.net/allwinner_a10/a10_boot_process/
- http://www.cubieforums.com/index.php/topic,79.0.html
- ۹۱/۱۲/۱۰
خواستم عرض کنم که آرک لینوکس اشتباهِ و آرچ لینوکس درسته ! آرچ تلفظ میشه :)
با تشکر از مقاله خوبتان :)