0

(ARMでカーネル2.6.29を再起動するために)reboot()システムコールを使用する必要があり、以下のコードを試しました:

#include <stdio.h>
#include <linux/reboot.h>
#include <unistd.h>
int main()
{
    reboot(LINUX_REBOOT_CMD_RESTART);
}

それはうまくいきます!しかし、不思議に思うのは、カーネルを再起動した後、保存されているファイルが失われることです。つまり、このコードを使用すると、再起動後に「url」ファイルは保存されません。

int main()
    {
        FILE *pFile = fopen("url", "a"); // for .txt file
        // write to file/read from file ... etc
        fclose(pFile);

        int fdUART = open("/dev/ttySAC0", O_RDWR | O_NOCTTY | O_NDELAY);
        // some operations on UART port
        close(fdUART);
        /* Ethernet raw package process*/
        /* Char dev driver open and communicate with FPGA fifo */
        /* so on */
        reboot(LINUX_REBOOT_CMD_RESTART);
    }

UART、イーサネット、charドライバーを使用していて、reboot()呼び出しシステムがシステムに与える影響を知りたいだけです。

どんな助けでも大いに感謝します。

4

1 に答える 1

3

コメントに、ファイルシステムはcramfsであると書いています。

cramfsのウィキペディアページから:

圧縮ROMファイルシステム(またはcramfs)は、単純さとスペース効率のために設計された、無料の(GPL化された)読み取り専用のLinuxファイルシステムです。これは主に組み込みシステムと小さなフットプリントシステムで使用されます。

読み取り専用であることに注意してください。つまり、変更は保持されません。

変更を保持するには、永続ストレージに書き込む必要があります。

于 2012-07-16T01:36:44.390 に答える