繁体   English   中英

无法在根文件系统的INIT的system()中执行echo命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM