11 - Proces w przestrzeni użytkownika

app.c

app.c
/* W taki sposób jądro może uruchomić proces w przestrzeni użytkownika */
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kmod.h>
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Marcin Bis");
MODULE_DESCRIPTION("Uruchomienie procesu");
 
static int umh_test(void)
{
  struct subprocess_info *sub_info;
  char *argv[] = { "/usr/bin/logger", "help!", NULL };
  static char *envp[] = {
        "HOME=/",
        "TERM=linux",
        "PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };
 
  sub_info = call_usermodehelper_setup(argv[0], argv, envp, GFP_ATOMIC);
  if (sub_info == NULL) return -ENOMEM;
 
  return call_usermodehelper_exec(sub_info, UMH_WAIT_PROC);
}
 
/* Można jeszcze prościej
 
static int umh_test( void )
{
  char *argv[] = { "/usr/bin/logger", "help!", NULL };
  static char *envp[] = {
        "HOME=/",
        "TERM=linux",
        "PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };
 
  return call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
}
*/
 
static int __init app_init(void)
{
  return umh_test();
}
module_init(app_init);
 
 
static void __exit app_exit(void)
{
  return;
}
module_exit(app_exit);

Makefile

Makefile
obj-m += app.o
 
all:
	make -C /lib/modules/$(shell uname -r)/build \
		SUBDIRS=$(shell pwd) modules
 
clean:
	make -C /lib/modules/$(shell uname -r)/build \
		SUBDIRS=$(shell pwd) clean
ostatnio zmienione: 2011/06/16 16:03