Связывание / proc / mnt в / proc / mounts

Я понимаю, что файловая система /proc отражает результаты различных процессов. К сожалению, у меня есть проприетарный ( romdump ) двоичный файл, который ожидает, что таблица монтирования будет отображаться как /proc/mtd , в то время как мое устройство Android, похоже, выводит его как /proc/mounts .

Я попытался создать символическую ссылку, но это явно работает только для реальных файлов или каталогов. Как я могу обмануть этот двоичный файл для чтения вывода из /proc/mtd вместо /proc/mtd ?

4 Solutions collect form web for “Связывание / proc / mnt в / proc / mounts”

Самый простой способ сделать это – изменить двоичный файл:

 sed s-/proc/mtd-/tmp/mntx- < romdump > romdump.new ln -s /proc/mounts /tmp/mntx ./romdump.new 

Трюк здесь, поскольку вы редактируете двоичный файл, состоит в том, чтобы убедиться, что исходная строка /proc/mtd имеет ту же длину, что и новая строка /tmp/mntx , так что вы не изменяете размер или местоположение чего-либо в двоичный.

Это не является надежным – оно не будет работать, если двоичный файл будет создавать имя пути в кусках, а не использовать фиксированную строку. Но это, скорее всего, сделает трюк.

Я не знаю, как добавить вещи в /proc за пределами написания модуля (или простого кода ядра). Могут быть некоторые утилиты, хотя.

Если вы можете создавать и вставлять модуль, то это довольно просто: вы можете просто создать еще одну символическую ссылку ( /proc/mounts mounts уже есть символическая ссылка).

Источник ( mnt_link.c ):

 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/proc_fs.h> #define MODULE_VERS "0.0" #define MODULE_NAME "mnt_link" static int __init init_mnt_link(void) { static struct proc_dir_entry *symlink; symlink = proc_symlink("mnt", NULL, "self/mounts"); if(!symlink) return -ENOMEM; return 0; } static void __exit cleanup_mnt_link(void) { remove_proc_entry("mnt", NULL); } module_init(init_mnt_link); module_exit(cleanup_mnt_link); MODULE_AUTHOR("U&L"); MODULE_LICENSE("CC-WIKI"); MODULE_DESCRIPTION("Create a /proc/mnt symlink to /proc/self/mounts"); 

Makefile:

 obj-m := mnt_link.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

(Предполагается, что вы создадите свою текущую систему Linux. Чтобы создать что-то для Android, вы можете обратиться к: Как создать загружаемый модуль ядра для Android? ).

После того, как вы загрузили модуль ( insmod mnt_link.ko ), вы должны получить:

 $ ls -l /proc/m*nt* lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mnt -> self/mounts lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mounts -> self/mounts 

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

Используйте свои риски .

Файловая система / proc существует в памяти, так сказать. См. http://www.kernel.org/doc/Documentation/filesystems/proc.txt для получения дополнительной информации. Ссылки, вероятно, не сработают.

Возможно, вы сможете использовать LD_PRELOAD для перехвата функции open (). См. https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

Вы также можете редактировать двоичный файл, чтобы изменить имя файла из / proc / mnt в / proc_mnt и символическую ссылку на / proc / mounts.

Другой вариант – перекомпилировать ядро ​​и сделать / proc / mnt псевдоним для / proc / mounts.

Вы пробовали жесткую ссылку?

 ln /proc/mnt /proc/mounts 
  • Почему жесткие ссылки на каталоги не разрешены в UNIX / Linux?
  • Есть ли способ создать софт-ссылку, используя относительный путь? (не относительно дома или абсолютного)
  • Исходный контроль и символическая ссылка для .zhistory
  • Найти входящие символические ссылки
  • Копировать дерево каталогов, изменяя цель абсолютных символических ссылок
  • Как отношение / dev / fd относится к / proc / self / fd /?
  • Может ли GNU Stow использовать каталог столов, который является символической ссылкой?
  • Как динамически создавать Symlink для динамически созданного файла в папке
  • Получить список каталогов в иерархии, которые содержат только символические ссылки
  • Создание локальной рабочей области для разработки / тестирования
  • Undeletable символическая ссылка на smbfs / simfs
  • Linux и Unix - лучшая ОС в мире.