对于某些教育项目,我需要使用user-mode-linux(UML)。
根据UML 的主页,该项目似乎在2004年停止了。但是,该项目的作者于2004年被英特尔聘用,专职从事UML。这个项目是由英特尔(或开放源代码社区)以新名称终止还是继续?
从内核模块,我试图使用call_usermodehelper函数来执行可执行文件sha1,该文件将文件作为参数并将文件的SHA1哈希值写入另一个文件(命名为output)。可执行文件完美运行。
int result=-1;
name = "/home/file"
char *hargv[] = {"/home/sha1", name,NULL };
char *henvp[] = {"HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
result = call_usermodehelper("/home/sha1", hargv, henvp, 1);
Run Code Online (Sandbox Code Playgroud)
但是大多数情况下,call_usermodehelper返回-14并无法执行可执行文件。可能是什么原因?
有时它可以工作,但是随后创建的输出文件被锁定(与直接运行sha1时不同),我必须先运行chown才能正确使用它。如何预防?
无论如何,没有call_usermodehelper可以执行此操作吗?
linux kernel-module linux-kernel user-mode-linux kernel-mode
我使用自定义 initrd 在用户模式下编译了 Linux 内核 5.6,使用以下方法创建:
mkdir initrd
cd initrd
mkdir bin dev etc home mnt proc sys usr
mknod dev/console c 5 1
Run Code Online (Sandbox Code Playgroud)
带initrd/init.c初始化文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/mount.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
printf("init\n");
mount("none", "/proc", "proc", MS_MGC_VAL, "");
mount("none", "/sys", "sysfs", MS_MGC_VAL, "");
mount("none", "/dev", "devtmpfs", MS_MGC_VAL, "");
if (access("/dev/ubda", F_OK) != -1) {
printf("/dev/ubda exists\n");
} else {
printf("/dev/ubda not exists\n");
}
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
该程序检查通过ubd0=...选项传递的磁盘。
与gcc …
我正在制作一个仿真驱动程序,要求我schedule()在ATOMIC上下文中调用以使仿真部分工作.现在我有这个hack,允许我schedule()在ATOMIC(例如自旋锁)上下文中调用:
int p_count = current_thread_info()->preempt_count;
current_thread_info()->preempt_count = 0;
schedule();
current_thread_info()->preempt_count = p_count;
Run Code Online (Sandbox Code Playgroud)
但是这在IRQ中不起作用,系统只是停止调用schedule().
有没有办法以某种方式破解内核以允许我这样做?我正在使用Linux内核4.2.1和用户模式Linux