[英]Failed to execute echo command in system() in INIT in root file system
主机 :英特尔奔腾4,RHEL 6
目标 :使用我自己的小型rootffile文件系统运行Linux的ARM Cortex A9
我按照此处的说明开发了一个最小的initramfs文件系统: 极简主义的Initramfs和Initrd 。
所以我的initrmafs只有以下几件事:
1-控制台
2-初始化
init是具有以下代码的二进制文件:
* myinit.c
* Build instructions:
* ${CROSS_COMPILE}gcc -static init.c -o init
* */
#include <stdio.h>
int
main ()
{
printf ("\n");
printf ("Hello world from %s!\n", __FILE__);
while (1) { }
return 0;
}
这在Linux内核上运行良好,并且在最后的日志消息中,我收到了hello world消息。
但是我想要的是在打印hello world之后, echo
命令应该起作用并执行以下操作:
echo 10 > test.txt
echo "$(cat test.txt)"
所以我所做的是:
#include <stdlib.h>
#include <stdio.h>
int main ()
{
printf ("\n");
printf ("Hello world from %s!\n", __FILE__);
system("echo 10 > test.txt");
system("echo \"$(cat test.txt)\"");
while (1) { }
return 0;
}
我正在使用以下命令交叉编译代码:
arm-xilinx-linux-gnueabi-gcc -static echotest.c -o init
Hello world正在正确打印,但是由于文件的内容(例如10未在打印),所以echo无法正常工作。
注意:请注意,这次我的文件系统中有以下内容,即initramfs:
1-控制台
2-init(第二程序的二进制)
3- test.txt(一个空文件)
4-具有二进制echo
的文件夹箱
5-具有二进制cat
的文件夹箱
从这些声音中,什么都没有。 主要思想是拥有一个最小的文件系统,仅包含我的应用程序真正需要的东西。
我从正常的linux系统复制的二进制cat和echo。
请帮助我正确运行上述echo命令?
更新资料
我最新的代码是在我挂载/ bin的地方:
#include <stdlib.h>
#include <sys/mount.h>
#include <errno.h>
#include <stdio.h>
void mount_sys() {
if (0 != mount("none", "/bin", "sysfs", 0, "")) {
perror("there is an error in mounting \n"); /* handle error */
}
printf("mounting successful");
}
int main ()
{
mount_sys();
printf ("\n");
printf ("Hello world from %s!\n", __FILE__);
system("echo 10 > test.txt");
system("echo \"$(cat test.txt)\"");
while (1) { }
return 0;
}
不幸的是,这也不起作用。 引导日志消息中的最后两行是:
mounting successful
Hello world from echotest.c!
system()
要求/bin/sh
可用。
如果您真的希望最小,请使用fork
/ exec
代替。 诸如重定向之类的Shell构造将(显然)不可用。
作为一种风格上的评论,即使没有理智的恢复方法,始终检查系统调用中的错误将是诊断问题的良好起点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.