Проблема, добирающаяся busybox switch_root для работы

Безотносительно Вашего языка Вы захотите использовать функцию, названную ctags, который позволяет для просмотра вокруг исходных определений. Это требует, чтобы внешний инструмент генерировал файлы ТЕГОВ, которые используются VIM для обнаружения местоположений различных определений кода в рамках проекта.

Получите избыточный ctags инструмент, он работает на много много языков и v простой использовать.

от VIM :help ctags

ctags создаст индекс всех идентификаторов в исходном дереве. Можно затем использовать команды тега для навигации вокруг исходного дерева. посмотрите :help tag-commands. Самое легкое должно установить курсор на ключевое слово и нажать CTRL-]. Для возвращения туда, где Вы произошли из, нажимают CTRL-T

Вне этого Вы могли бы хотеть посмотреть на некоторые подсказки VIM и улучшения, обсужденные здесь, это - очень всестороннее обсуждение некоторых вещей, чем можно сделать для улучшения опыта vimmer.

5
13.04.2017, 15:37
2 ответа

Причина это switch_root не работает над командной строкой, этот код в busybox:

    if (st.st_dev == rootdev || getpid() != 1) {
        // Show usage, it says new root must be a mountpoint
        // and we must be PID 1
        bb_show_usage();
    }

Вы не PID 1, таким образом, Вы проваливаетесь в это bb_show_usage. Импликация то, что switch_root управляйте в своем initramfs init, сценарий должен работать switch_root с exec. т.е.

exec switch_root ...

Другая проблема с Ваш "не найденный" ошибки вероятна, потому что общие библиотеки, необходимые исполняемым файлам, не найдены, потому что корневая файловая система initramfs не имеет их. Если можно добраться switch_root работать с exec, затем вероятно, "не найденная" ошибка уйдет.

13
27.01.2020, 20:33
  • 1
    который работал точно правильный. Была еще одна проблема, которую я должен был решить (драйвер MMC, нуждающийся в более долгом тайм-ауте), который помешал ему работать, когда я попробовал это ранее, но с зафиксированным, это работало красиво.Спасибо. –  pingswept 21.12.2010, 08:43

switch_root -c /dev/console /mnt/root /mnt/root/sbin/init.sysvinit работавший для меня. У меня была та же проблема, но switch_root -c /dev/console /mnt/root /sbin/init.sysvinit не работал.

Сожалеют, что Ни один не работал на меня.

Я сделал ext2 файловую систему скопированной, статически создал busybox со всем его softlinks. И busybox имеет липкий бит. полномочия (-rwsr-sr-x). У меня есть/linuxrc, и у меня нет многого в/etc/каталоге. И я делаю изображение из ext2 файловой системы со следующей командой.

mkimage -C gzip -A ppc -O linux -T ramdisk -a 0x2000000 -n "ramdisk" -d initrd-ext2 initrd.img

Я сохраняю initrd.img как отдельный файл в/boot/, и не часть ядра.

Содержание linuxrc

#!/bin/sh (Также попробовал #!/bin/busybox sh),

mkdir -p /proc /dev /sys /mnt /tmp
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mknod /dev/misc/rtc0 c 254 0
mdev -s
mkdir -p /new_root
mount /dev/mmcblk0p2 /new_root
exec switch_root -c /dev/console /new_root /sbin/init

Мое ядро загружается правильно, и initrd.img также загружается, и linuxrc выполняется, но в конце switch_root дает справку использования.

Но затем моя система продолжает загружаться и загружает новый rootfs. Следующее является последовательностью.

RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 10240KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem) on device 1:0.
Starting initramfs boot...

Waiting 5 seconds for devices to settle...

kjournald starting.  Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
BusyBox v1.21.0.git (2012-10-17 00:34:21 PDT) multi-call binary.

Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]

Free initramfs and switch to another root fs:
chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.

        -c DEV  Reopen stdio to DEV after switch

VFS: Mounted root (ext3 filesystem) on device 179:2.
Trying to move old root to /initrd ... /initrd does not exist. Ignored.
Unmounting old root
Trying to free ramdisk memory ... okay
Freeing unused kernel memory: 200k init
INIT: version 2.86 booting
Please wait: booting...
mount: sysfs already mounted or /sys busy
mount: according to mtab, sysfs is already mounted on /sys
Starting udev
udev: starting version 154
Root filesystem already rw, not remounting
Caching udev devnodes
  1. Мой поршень освобожден после выхода из initrd.img в вышеупомянутой последовательности?

  2. Что, если я не делаю switch_root в конце linuxrc и просто помещаю выход? Привычка, настолько свободная мой поршень от моего старого initrd img.

1
27.01.2020, 20:33

Теги

Похожие вопросы