Se você precisa do Linux, você precisa de um sistema de arquivos.
(refiro-me ao Linux, o sistema operacional aqui, ao invés do Linux, o kernel do sistema operacional. Eu vou chegar a essa interpretação mais estreita abaixo).
Sua observação sobre drivers de dispositivo carregando na inicialização antes do sistema de arquivos existir é um arenque vermelho. Você pode carregar um driver sem ter um sistema de arquivos. O que você não pode fazer é fd = open("/dev/foo", O_RDONLY)
sem um sistema de arquivos.
Isso não significa que você precisa de um meio de armazenamento regravável persistente formatado com um sistema de arquivos tradicional, como no exemplo JFFS2. Tudo o que você precisa para suportar uma árvore tradicional /dev
é uma estrutura de dados que se comporta como uma sistema de arquivos no disco. Os Linuxes modernos usam o udev em um sistema de arquivos na memória para permitir acesso a /dev
nós sem precisar de armazenamento persistente para o /dev
nós, por exemplo.
Você também precisa de um sistema de arquivos para usar vários outros recursos do Linux-the-OS:
-
Precisa de bibliotecas compartilhadas ou módulos de linguagem de script? Você precisa de um sistema de arquivos para armazenar
/lib/libfoo.*
,/usr/lib/perl5/*
,/lib/ld.so
,/etc/ld.so.cache
, etc. -
Precisa de módulos carregáveis do kernel? Você precisa de um sistema de arquivos para
/lib/modules/$(uname -r)/*
-
Precisa de mais de um executável, como um shell ou um editor de texto? Eles precisam de um sistema de arquivos para viver.
-
Precisa que o kernel reforce o controle de acesso? A maior parte disso é feita através de bits de permissão , ACLs e SELinux rotula em um arquivo ou diretório em algum lugar.
Eu provavelmente poderia ter mais exemplos, mas isso será suficiente.
É possível carregar todos os recursos que seu sistema precisa de armazenamento persistente na RAM, para que, uma vez inicializado, o sistema não use armazenamento persistente. Distribuições Live Linux fazem isso. Também é comum que os sistemas operacionais Linux embutidos construam todo o seu sistema de arquivos na RAM ao inicializar, de modo que, uma vez inicializados, eles não continuem mais referenciando o armazenamento persistente, como o dispositivo de armazenamento flash .
Se você está construindo um sistema embarcado de tarefa única com escopo limitado, provavelmente não precisa do Linux-the-OS. Você pode precisar apenas de um SO incorporado menor, com menos recursos, ou talvez seja capaz de escrever direito ao metal .
Algumas das outras respostas aqui falam sobre remover o Linux até o ponto em que tudo o que resta é Linux-o-kernel, ou emparelhado com um único executável - seu programa, rodando sob o kernel - ou rodando como um programa monolítico com o seu código incorporado estaticamente dentro dele. De qualquer maneira, você pode se afastar completamente da necessidade de um sistema de arquivos, mas o que você acaba não é mais o Linux-OS.