Загрузка базового образа с Compact Flash

Надеюсь у вас получилось загрузить базовый образ в эмуляторе. Самое время попробовать запуститься на реальном железе. Для этого я воспользуюсь Compact Flash:
Compact Flash

И переходником Compact Flash в IDE:
CF to IDE

Если первое воткнуть во второе, затем воткнуть конструкцию в IDE, то в для компьютера это будет выглядеть как небольшой жесткий диск. Чтобы система могла грузиться с него необходимо записать на CF загрузчик. Для этого подключим CF к компьютеру при помощи cardreader и проверисм появилась ли она:

$dmesg | tail
sd 12:0:0:1: [sdf] Write Protect is off
sd 12:0:0:1: [sdf] Mode Sense: 03 00 00 00
sd 12:0:0:1: [sdf] Assuming drive cache: write through
 sdf: sdf1
sd 12:0:0:1: [sdf] Attached SCSI removable disk
sd 12:0:0:1: Attached scsi generic sg6 type 0

У меня CF определился как sdf и на нем имеется один первичный раздел sdf1. Далее необходимо проверить какой тип файловой системы имеет раздел. Для этого запустите fdisk и введите p в качестве команды:

$ sudo fidsk /dev/sdf
Command (m for help):p
 
Disk /dev/sdf: 519 MB, 519192576 bytes
16 heads, 63 sectors/track, 1006 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x001c2022
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1        1006      506992+   c  W95 FAT32 (LBA)

У моего CF это FAT32. Но linux хотя и умеет использовать эту файловую систему для корневой системы, но делать это не рекомендуется. Для изменения типа раздела введите следующие команды:

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83 (Linux)

где:

  • 1 — выбор номера раздела
  • 83 — выбор типа раздела

Теперь записываем изменения:

Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

Проверяем:

$sudo fdisk /dev/sdf
 
Command (m for help): p
 
Disk /dev/sdf: 519 MB, 519192576 bytes
16 heads, 63 sectors/track, 1006 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x001c2022
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1        1006      506992+  83  Linux
 
Command (m for help): q

Как видите теперь основной раздел имеет тип Linux.
Форматируем его под ext2:

$ sudo mkfs.ext2 /dev/sdf1
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
126976 inodes, 506992 blocks
25349 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
62 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
 
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Монтируем:

$ sudo mkdir /mnt/cf
$ sudo mount /dev/sdf1 /mnt/cf

В результате CF будет смонтирован в каталог /mnt/cf.

Теперь необходимо изменить конфигурацию ядра. Ранее в Здравствуй мир! Запуск. я уже описывал как заменить стандартный файл конфигурации. Делаем все тоже самое, но конфигурационный файл берем отсюда. В этом файле включены все стандартные IDE контроллеры. Далее необходимо пересобрать ядро и образ файлвой системы. Для этого запускаем следующие команды:

bitbake -c clean linux
bitbake base-image

В результате у вас будет собрано новое ядро и новый образ с включающий его. Далее распаковываем образ точно так же как описано в
Базовый образ как точка старта, только вместо каталога /var/lib/nfsroot используем каталог /mnt/cf. После этого изменяем /mnt/cf/etc/fstab, так как в этот раз загрузка будет производиться не из сети. И вместо

rootfs / auto defaults  1  1

В fstab должно быть:

/dev/hda1 / ext2 defaults 1 1

Учтите что hda это первый IDE диск. Если ваш подопытный компьютер имеет еще и SATA контроллер, рекомендуется выключить его на время экспериментов.

Далее удалите файл /mnt/cf/etc/rcS.d/S03udev и добавьте grub точно так же как добавлялся nfs-utils. В результате у вас должна получиться готовая к работе система. Осталось прописать загрузчик. Перед этим отмонтируйте /mnt/cf:

umount /mnt/cf

Затем запустите grub

sudo grub

Появится интерактивное приглашение. Теперь настраиваем grub и прописываем его в mbr при помощи следующих команд:

device (hd0) /dev/sdf
root (hd0,0)
setup (hd0)

Первая команда указывает grub рассматривать /dev/sdf устройство как hd0, следующая указывает, что в качестве корня используется первый раздел hd0 (sdf1), а setup устанавливает загрузчик в mbr. Если все прошло успешно введите quit и подождите пока загрузчик закончит свою работу.
Далее можно вынуть CF подключить его к CF-IDE и пробовать загружаться на реальном железе, но перед этим вы можете попробовать загрузиться при помощи kvm:

kvm -hda /dev/sdf

или qemu:

qemu -hda /dev/sdf

В результате вы должны будете увидеть приглашение системы:

Рубрика: Практика | Теги: , комментариев 8 »

комментариев 8 к “Загрузка базового образа с Compact Flash”

  1. Владимир

    Здраствуйте, проделал все по анологии только для диска SATA sdb. Возможно должен быть другой файл конфигурации ядра или я где то ошибся. Вообщем Grub выдаёт Error 2.

  2. М.Руденский

    Пара замечаний.

    1. grub-install —root-directory=/path/to/new/linux/partition /dev/hda делает у меня все одной строкой.

    2. По поводу выключения S30udev, хочу немного раскрыть тему.
    По какой-то причине поддержка udev cache в Angstrom 2009.1 глючная. Выключается она в /etc/default/udev. Если это не сделать, система виснет при старте S30udev. А так как при первой загрузке Angstrom настраивает множество пакетов, получим недополоманую систему, если выключим udev cache уже потом.

  3. de1phi

    а в openembedded есть драйвера sata контроллеров? если нет, то как их туда встроить

  4. norguhtar

    OpenEmbedded это репозиторий. А драйвера Sata контроллеров есть в ядре. Правите конфиг ядра и будет вам SATA.

  5. de1phi

    а где нибудь есть мануал по настройке ядра? и как вставить в образ свою программу?

  6. norguhtar

    Знаете с такими вопросами вам бы сначала с десктопным линуксом разобраться.

  7. de1phi

    в десктопном линухе я ядро настраиваю через menuconfig. А настройка через conf фаил совсем другой колинкор)

  8. norguhtar

    Тут ровно тоже самое. Если внимательно почитаете увидите, что обычно выложен уже подготовленный .config ядра. Надо только его заменить на нужный и все.


Прокоментировать



 

Наверх