Powered by Drupal, an open source content management system

การสร้าง Debian File System สำหรับ mini2440

Linux Debian Distribution เป็นระบบที่มี packages มากมายพร้อมใช้งาน นอกจากนี้ debian ยังรองรับ ARM ด้วย บทความนี้แสดงการสร้าง File System ของระบบ Debian เพื่อใช้วิ่งบน Mini2440

การสร้าง File System จำเป็นต้องใช้คำสั่ง sudo ในฐานะ root ดังนั้นหากท่านใช้คำสั่ง sudo แล้วพบ error username is not in the sudoers file. ให้แก้ไขไฟล์ /etc/sudoers แล้วเพิ่มเติมข้อความ username ALL=(ALL) ALL ดังนี้ โดยให้แทน username ด้วยชื่อของ user ที่คุณใช้ในการสร้าง file system

# User privilege specification
root    ALL=(ALL) ALL
username ALL=(ALL) ALL
 

1. เตรียม file system พื้นฐานของ debian สำหรับการติดตั้งระบบที่สมบูรณ์ในขั้นตอนถัดไป โดยขั้นตอนนี้จะทำบน PC Host

$ mkdir ~/armel-rootfs
$ sudo debootstrap --arch=armel --include=ifupdown,udev,procps,netbase,vim-tiny,module-init-tools,wget,openssh-server,screen,apmd --foreign lenny ~/armel-rootfs http://ftp.de.debian.org/debian
$ cd ~/armel-rootfs
$ tar cfjv ../armel-rootfs.tar.bz2 *
$ cd ..

 2. เตรียม sd card เพื่อถ่าย file system ที่สร้างในข้อ 1 และนำไปติดตั้งต่อขั้นที่สองบนเครื่อง mini2440

  • เสียบ sd card บน linux host และใช้คำสั่ง dmesg เพื่อตรวจสอบดูว่า sd card ที่เราเพิ่งเสียบเข้าไปใช้ device อะไร จากตัวอย่างจะเห็นว่า sd card ที่เพิ่งต่อกับเครื่องจะถูกมองเป็น sdb

 

จากข้อมูลของ sd card ซึ่งต่อกับระบบเป็น /dev/sdb เราจะใช้คำสั่ง fdisk เพื่อสร้าง partition ที่มีลักษณะดังนี้

  • sdb1 - type c (fat32) ขนาด 100MB
  • sdb2 - type 83 (Linux) ขนาดเท่ากับที่เหลือ ลบด้วย 128MB
  • sdb3 - type 82 (Linux swap) ขนาด 128MB

 

หลังจากสร้าง partition สามอันตามข้างต้นแล้ว ให้ Format sdb1 เป็น FAT และ sdb2 เป็น ext3 ดังนี้

$ sudo mkfs.vfat /dev/sdb1
$ sudo mkfs.ext3 /dev/sdb2

 

ต่อด้วยการแตกไฟล์ File System ที่ได้จากขั้นตอนที่ 1 ลงไปยัง partition ที่สอง

$ sudo mount /dev/sdb2 /mnt/sdb2
$ cd /mnt/sdb2
$ sudo tar -xpjvf ~/armel-rootfs.tar.bz2
$ sync

 

copy uImage(kernel) และ lib modules (ที่ได้มาจาก การสร้าง Kernel สำหรับ mini2440 ) ไปยัง partition1 และ 2

$ sudo mount /dev/sdb1 /mnt/sdb1
$ sudo cp ~/kernel/mini2440/uImage /mnt/sdb1
$ sudo cp -Rp ~/kernel/kernel-modules/lib/* /mnt/sdb2/lib
$ sync

 

เตรียมพร้อมก่อนการติดตั้ง Debain File System ต่อในขั้นที่สอง

$ su
# cd /mnt/sdb2
# echo "proc /proc proc none 0 0" >> etc/fstab
# echo "mini2440" > etc/hostname
# echo '127.0.0.1 localhost.localdomain localhost' > etc/hosts
# mknod dev/console c 5 1
# echo 'deb http://ftp.de.debian.org/debian lenny main' > etc/apt/sources.list
# cd /
# umount /mnt/sdb1
# umount /mnt/sdb2

 

การติดตั้ง debian file system ในขั้นที่สองจะต้องทำบน mini2440 ดังนั้นให้ถอด sd card จาก PC Host แล้วเสียบเข้าช่อง sd card ของ mini2440 จากนั้นเปิดเครื่องเพื่อบูทระบบเข้า u-boot แล้วพิมพ์ข้อความดังนี้

 

setenv bootcmd 'mmcinit ; fatload mmc 0:1 0x31000000 uimage ; bootm 0x31000000'
setenv bootargs 'console=ttySAC0,115200 noinitrd root=/dev/mmcblk0p2 rootwait=4 rw ip=dhcp init=/bin/sh'
boot

 

โดยคำสั่งข้างต้นจะทำให้ mini2440 จะทำการ load uImage จาก sd card partition 1 และ connect rootfs จาก partition 2

 

หลังจากนั้นทำการติดตั้ง debootstrap ภาคสองดังนี้

sh-3.2# mount /proc /proc -t proc
sh-3.2# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sh-3.2# /debootstrap/debootstrap --second-stage

 

เตรียมสิ่งที่จำเป็นสำหรับการบูทเพื่อวิ่ง Debian File System เต็มระบบในขั้นตอนสุดท้าย 

 

sh-3.2# mknod dev/ttySAC0 c 204 64
sh-3.2# echo ttySAC0 >> /etc/securetty
sh-3.2# printf "T0:123:respawn:/sbin/getty 115200 ttySAC0\n" >> /etc/inittab
sh-3.2# printf "auto eth0\niface eth0 inet dhcp\n" >> /etc/network/interfaces

 

 กำหนด nameserver ให้กับระบบเพื่อการต่อเน็ท ในกรณีนี้ต่อการต่ออินเตอร์เน็ทกระทำผ่าน router ที่มี ip 192.168.1.1

sh-3.2# printf "nameserver 192.168.1.1" >> /etc/resolv.conf

 

reboot เข้า u-boot menu และใส่ค่าดังนี้สำหรับการบูทเพื่อวิ่ง Full Debian System จาก sd card พร้อมทั้งใช้คำสั่ง saveenv เพื่อบันทึกฐาวร

setenv bootcmd 'mmcinit ; fatload mmc 0:1 0x31000000 uimage ; bootm 0x31000000'
setenv bootargs 'console=ttySAC0,115200n8 rootdelay=3 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait'
saveenv
boot

 

เมื่อเจอคำสั่งบูท u-boot จะทำตามคำสั่งที่คำหนดไว้ใน bootcmd คือการ load uImage จาก fat32 partition ด้วยคำสั่ง fatload และรัน kernel

 

จากนั้นก็จะ mount file system ตามที่กำหนดไว้ใน bootargs คือ partition ที่ 2

 

ในกรณีที่ท่านเจอคำเตือนระหว่างบูทว่า .udev/ already exists on the static /dev! (warning). ให้ทำดังนี้

  • shutdown mini2440 แล้วถอด sd card ไปต่อกับ PC Host
  • sudo mount /dev/sdb2 /mnt/sdb2 ในกรณีที่ระบบมอง /dev/sdb2
  • sudo rm -Rf /mnt/sdb2/dev/.udev
  • sudo umount /mnt/sdb2
  • ถอด sd card กลับไปวิ่งบน mini2440 ปัญหาก็จะหมดไป

นอกจากเราสามารถที่จะบูทระบบได้จาก sd card แล้ว เรายังสามารถเก็บ uImage และ File System ไว้บน PC Host และใช้การเชื่อมต่อผ่าน Network File System ได้อีกด้วย ทำให้สะดวกในการพัฒนาไม่จำเป็นต้องถอด sd card ไปมา สำหรับผู้ที่สนใจ รายละเอียดอยู่ที่นี่ครับ การบูทระบบด้วย Network File System

สำหรับขั้นตอนสุดท้าย เราจะทำการเซ็ทอัพ swap partition ให้กับระบบ

  • ใช้คำสั่ง free เพื่อตรวจสอบหน่วยความจำของระบบ จะสังเกตุเห็นว่า swap ไม่ได้เปิดใช้งาน
  • ใช้คำสั่ง fdisk -l เพื่อตรวจหา swap partition
  • แจ้งให้ระบบรู้ถึง swap partition ด้วยคำสั่ง mkswap /dev/mmcblk0p3 และเปิดการใช้ด้วยคำสั่ง swapon /dev/mmcblk0p3

 

  • ใช้คำสั่ง free อีกครั้งจะเห็นการใช้งาน swap ของระบบ

อ้างอิง

code.google.com/p/mini2440/wiki/Emdebian

wiki.openmoko.org/wiki/Manual_Debian