首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根文件系统中INIT中的system()中的echo命令执行失败

根文件系统中INIT中的system()中的echo命令执行失败
EN

Stack Overflow用户
提问于 2014-06-07 11:35:25
回答 1查看 140关注 0票数 0

主机:Intel pentium 4,RHEL 6

Target:使用我自己的小型rootffile文件系统运行linux的ARM Cortex A9

我按照下面的说明开发了一个最小的initramfs文件系统:简约主义Initramfs和Initrd

因此,我的个人资料只有以下几点:

1-控制台

2- init

init是具有以下代码的二进制代码:

代码语言:javascript
复制
* 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之后,echo命令应该工作并执行以下操作:

代码语言:javascript
复制
echo 10 > test.txt
echo "$(cat test.txt)"

所以我做的是:

代码语言:javascript
复制
#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;
        }

我使用以下命令交叉编译代码:

代码语言:javascript
复制
  arm-xilinx-linux-gnueabi-gcc -static echotest.c -o init

Hello正在正确打印,但echo没有作为文件的内容工作,也就是说,10没有打印。

注意:请注意,这次我的文件系统中有以下内容,即initramfs:

1-控制台

2- init (二进制表示第二个程序)

3- test.txt (一个空文件)

4-具有二进制echo的文件夹框

5-具有二进制cat的文件夹框

从这些上看,什么都没有。主要的想法是有一个最小的文件系统,只有真正需要的东西,我的应用。

二进制猫和回波我从一个正在工作的linux系统中复制。

请帮助我正确运行回波命令,如上?

更新

我的最新代码与安装/bin的位置相同:

代码语言:javascript
复制
#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;
        }

不幸的是,这也不起作用。引导日志消息中的最后两行是:

代码语言:javascript
复制
mounting successful
Hello world from echotest.c!   
EN

回答 1

Stack Overflow用户

发布于 2014-06-07 12:46:13

system()要求/bin/sh是可用的。

如果您想要最小化,那么使用fork/exec代替。像重定向这样的Shell结构将(很明显)不可用。

作为一种文体评论,总是检查系统调用的错误将是诊断问题的一个良好的第一开始,即使没有正常的恢复方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24096727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档