я пытаюсь скомпилировать простую утилиту (ядро 3.4.67), который все это делает пытается использовать системный вызов очень просто следующим образом:Почему сбой системы?
int main(void)
{
int rc;
printf("hello 1\n");
rc = system("echo hello again");
printf("system returned %d\n",rc);
rc = system("ls -l");
printf("system returned %d\n",rc);
return 0;
}
Тем не менее, системный вызов не, как вы можете видеть в следующий журнал:
[email protected]_kk:/ # /sdcard/test
hello 1
system returned 32512
system returned 32512
Я скомпилировать его следующим образом:
arm-linux-gnueabihf-gcc -s -static -Wall -Wstrict-prototypes test.c -o test
Это действительно странно, потому что я использовал систему в прошлом в разных Linux и никогда не имел никаких проблем с ней. Я даже попробовал другой кроссовый cpompiler, но я получаю тот же отказ.
версия ядра & кросс-компилятор:
# busybox uname -a
Linux localhost 3.4.67 #1 SMP PREEMPT Wed Sep 28 18:18:33 CST 2016 armv7l GNU/Linux
arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.7-2013.03-20130313 - Linaro GCC 2013.03) 4.7.3 20130226 (prerelease)
EDIT:
root[email protected]_kk:/ # echo hello again && echo $? && echo $0
hello again
0
tmp-mksh
[email protected]_kk:/ #
Но я нашел кое-что интересное: на вызове test_expander() жгутов главное, это работает ОК. поэтому я подозреваю, что, может быть, системный вызов попытается найти двоичный файл, который не основан?
int test_expander(void)
{
pid_t pid;
char *const parmList[] = {"/system/bin/busybox", "echo", "hello", NULL};
if ((pid = fork()) == -1)
perror("fork error");
else if (pid == 0) {
execv("/system/bin/busybox", parmList);
printf("Return not expected. Must be an execv error.n");
}
return 0;
}
Благодарим за любую идею.
Ran
Что '$ эхо привет again' возвращение в скорлупе? Попробуйте скопировать «hello again» в буфер и передать его в 'system()'. –
Он ничего не возвращает (вот в чем проблема). Кажется, что системный вызов ничего не делает :(, я не знаю, почему – ransh
Я имел в виду, что такое '$?' После выполнения 'echo', как указано в предыдущей команде? –