Здравствуйте, ткните пожалуйста где поискать.
Есть маленькая система на онове BusyBox, которая должна грузиться на специфичном железе.
Производитель предлагает 2 варианта её установки.
1- это на флешку формата fat копируеться файл ядра bzImage, и файл ramdisk.gz в коточром содержиться корневая файловая система.
А далее в загрузчике прописываеться такая строка bzimage initrd=ramdisk.gz ramdisk_size=65536 root=/dev/ram0 rw
Этот вариант работает, но как вы понимаете изменить корневую файловую систему нет возможности.
2 - вариант - это скрипт, который берет как параметр название устройства, создает на нем два раздела, в первом находиться ядро и загрузчик а во втором корневая файловая система. (скрипт не работает)
В скрипте создаёться файлавая система все папки все устройства итп. У меня есть ramdisk.gz в котором это уже всё есть. Разархивированный файл
ramdisk с помощью losetup я монтировал, и его содержимое видел, но как грамотно залить его содержимое в раздел я не знаю, тупое копирование наверное попртит директорию dev/ c устройствами, или я не прав?
как сделать 2 раздела и засунуть в первый ядро с загрузчиком я разобрался, теперь мне бы хотелось сделать второй раздел такой же как и содержимое ramdisk.gz.
Предположем, что мое устройство /dev/sda второй его раздел /dev/sda2 формата ext2.
Копировать раздел ramdisk на раздел устройства
Этот вариант работает, но как вы понимаете изменить корневую файловую систему нет возможности.
Почему нет возможности? А chroot сделать?
тупое копирование наверное попртит директорию dev/ c устройствами, или я не прав?
Скорее всего не попортит.
ramdisk с помощью losetup я монтировал, и его содержимое видел, но как грамотно залить его содержимое в раздел я не знаю, тупое копирование наверное попртит директорию dev/ c устройствами, или я не прав?
ммм... её вообще копировать НЕ НАДО, как и /proc
ммм... её вообще копировать НЕ НАДО, как и /proc
Полагаю, ТС имеет в виду, что примонтировал образ рамдиска просто для того, чтобы посмотреть его содержимое на другой работающей системе.
2 - вариант - это скрипт, который берет как параметр название устройства, создает на нем два раздела, в первом находиться ядро и загрузчик а во втором корневая файловая система. (скрипт не работает)
В скрипте создаёться файлавая система все папки все устройства итп. У меня есть ramdisk.gz в котором это уже всё есть. Разархивированный файл
ramdisk с помощью losetup я монтировал, и его содержимое видел, но как грамотно залить его содержимое в раздел я не знаю, тупое копирование наверное попртит директорию dev/ c устройствами, или я не прав?
скорее всего, нужно сначала смонтировать корневую систему к разделу, и ничего никуда не копировать. Потом chroot в эту систему, и спокойно работайте.
Удалось поправить скрипт и добиться конечного результата, но любопытство все равно гложет.
Сама цель - это маленькая встроенная система. Система должна работать на панельном компе (x86).
Так как система маленькая, то в неё не встроено заполнение директории /dev/ если я не ошибаюсь это выполняет команда udev
В скрипте устройства создаються вручную, много строчек типа
mknod -m 600 hdd1 итп
Задача поставить систему на CF, причем я бы хотел уметь это делать на своём компе с помощью кард ридера.
Половину задачи я осилил, разбил флешь на разделы первый сделал загрузочным и заставил ядро грузить второй как root.
Я монтировал ramdisk на своем компе. Его содержимое, имено то, что я и хочу видеть на втором разделе.
Может можно скопировать все кроме /proc, или все кроме /dev и /proc
По поводу chroot я не совсем понял, вы предлагаете его пускать прямо на панели с загруженой из ramdiska системой?
Копировать можно, но директрорию /dev/ прописывать ручками надо
Сама цель - это маленькая встроенная система. Система должна работать на панельном компе (x86).
Так как система маленькая, то в неё не встроено заполнение директории /dev/ если я не ошибаюсь это выполняет команда udev
ошибаетесь - udev это не команда, а целая технология управления устройствами.
см. man udev
Я монтировал ramdisk на своем компе. Его содержимое, имено то, что я и хочу видеть на втором разделе.
Может можно скопировать все кроме /proc, или все кроме /dev и /proc
копируйте. только не командой cp, а командой tar.
/dev придётся создавать, ибо там не файлы, а устройства (например hdd1 это раздел диска. Как вы можете скопировать раздел? Т.е. физический кусок РЕАЛЬНОГО винчестера? вы можете скопировать только информацию из этого раздела, например в другой раздел)
Копировать /dev/ невозможно, ибо там бесконечные файлы есть (/dev/zero, /dev/random /dev/urandom).
/proc/ это вообще не каталог. и там не файлы. Это такой хитрый интерфейс ядра. Т.е., если чего-то туда записать, оно не на диск пишется, а ядро начинает работать по-другому. А если прочитать, то опять-таки, ничего не читается, а просто ядро рапортует о чём-либо. Например:
[console]root@dt:~# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Celeron(R) D CPU 3.06GHz
stepping : 4
cpu MHz : 3066.322
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pebs bts pni dtes64 monitor ds_cpl cid cx16 xtpr pdcm lahf_lm
bogomips : 6132.64
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
[/console]
копировать этот каталог нет никакого смысла.
По поводу chroot я не совсем понял, вы предлагаете его пускать прямо на панели с загруженой из ramdiska системой?
chroot это смена корня файловой системы. Алгоритм такой:
1) грузимся. например у вас - в память
2) создаём раздел, монтируем его, копируем туда /boot/ /root/ /usr/ и т.д.
3) пишем chroot этот-раздел. С этого момента программы берутся уже не из /usr/, а из /mnt/раздел/usr/, который отныне называется /usr/
4) настраиваем в новой системе загрузчик. Который загрузит в память ядро, и создаст /dev/ на новом разделе.
5) перезагружаемся в уже новую ОС.