흔한 함정에 빠졌다..
리눅스 커널에서 C라이브러리를 사용하려고 했다. 바로 stdlib.h ...
아래는 웹서핑으로 발견한 글,..
얼마전 커널에서 동작하는 간단한 프로그램을 만들었다.
컴파일 하는데..앵.. 왠걸.. 엄청난 애러가 났다.
kernel/syscall_interpret/auditex_string.c:1:20: error: stdlib.h: No such file or directory
결론부터 말하면 kernel 에서는 stdlib 들을 사용할 수 없다.
standard library 는 glibc 에 연동되어서 돌아가는데, kernel 에서는 이를 이용할 수 없기 때문이다.
따라서 kernel 쪽에서는 이를 대비한 간단한 lib들을 따로 재공 하고 있는데 그 위치는 컴파일 환경마다 다르겠지만 보통 다음과 같다.
linux-버전명\lib
출처 http://decdream.tistory.com/63
해결방법은 아래와 같다
execute a shell command from kernel
hi,
i am trying to run a shell command from kernel with the function do_execve, but i get always the error "no a file or directory". follow is the code.
############# code #####################
char *cmd[]={//set the command to be use
/*"sh",*/
"-c",
"ls /",
NULL
};
char *env[]={ //set the environment
"HOME=/",
"PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/sawacom/bin",
"SHELL=/bin/bash",
"TERM=xterm",
NULL
};
struct pt_regs *regs;
int a= do_execve("sh", cmd, env, regs); //execute the shell command
printk("<1>##### a=%d #####\n",a);
################# end code ########################
perhaps someone can tell me what i am doing wrong.
thanks
- Login to post comments
'Embedded Lab > linux, x86' 카테고리의 다른 글
[ioctl시 CPU관점에서 커널 lock] (0) | 2013.01.08 |
---|---|
[쉘 명령 후 출력 결과의 라인 세기] (0) | 2013.01.03 |
[LVM NTFS 포맷 및 확장] (0) | 2013.01.01 |
[커널에서 쉘명령하기 system()함수] (0) | 2013.01.01 |
[커널에서 유저 어플리케이션 실행시키기 call_usermodehelper API] (0) | 2013.01.01 |
tried with full path?
Like execve() in user space do_execve() may want the absolute path of the file to execute (execlp is not a syscall..). In your case "/bin/sh" instead of "sh". In fact, what the error "no a file or directory" says is exactly "you passed the wrong file name"...