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

И переходником Compact Flash в 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 |
В результате вы должны будете увидеть приглашение системы:

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

18/05/2010 15:46
Здраствуйте, проделал все по анологии только для диска SATA sdb. Возможно должен быть другой файл конфигурации ядра или я где то ошибся. Вообщем Grub выдаёт Error 2.
25/10/2010 12:51
Пара замечаний.
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 уже потом.
15/11/2010 20:32
а в openembedded есть драйвера sata контроллеров? если нет, то как их туда встроить
15/11/2010 20:47
OpenEmbedded это репозиторий. А драйвера Sata контроллеров есть в ядре. Правите конфиг ядра и будет вам SATA.
15/11/2010 23:23
а где нибудь есть мануал по настройке ядра? и как вставить в образ свою программу?
15/11/2010 23:27
Знаете с такими вопросами вам бы сначала с десктопным линуксом разобраться.
15/11/2010 23:44
в десктопном линухе я ядро настраиваю через menuconfig. А настройка через conf фаил совсем другой колинкор)
16/11/2010 07:21
Тут ровно тоже самое. Если внимательно почитаете увидите, что обычно выложен уже подготовленный .config ядра. Надо только его заменить на нужный и все.