我不知道有什么方法可以/proc在编写模块(或普通内核代码)之外添加东西。不过可能有一些实用程序。
如果您可以构建和插入一个模块,那么它就非常简单:您只需创建另一个符号链接(/proc/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");
Run Code Online (Sandbox Code Playgroud)
生成文件:
obj-m := mnt_link.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
(这里假设您要为当前的 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
Run Code Online (Sandbox Code Playgroud)
话虽如此,您的实用程序很可能期望得到除此符号链接之外的其他东西。(也许这取决于正在加载的另一个模块以在该位置提供一些信息。)
最简单的方法是更改二进制文件:
sed s-/proc/mtd-/tmp/mntx- < romdump > romdump.new
ln -s /proc/mounts /tmp/mntx
./romdump.new
Run Code Online (Sandbox Code Playgroud)
由于您正在编辑二进制文件,因此这里的技巧是确保原始字符串/proc/mtd与新字符串的长度相同/tmp/mntx,这样您就不会更改二进制文件中任何内容的大小或位置。
这不是万无一失的——如果二进制文件分段构建路径名而不是使用固定字符串,它将无法工作。但它很可能会成功。
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |