Preciso de um sistema de arquivos quando não quero armazenar dados

8

Eu fiz uma pergunta aqui É obrigatório ter um sistema de arquivos

Um dos comentários é:

como um sistema sem sistema de arquivos funcionaria no linux, mesmo que uma impressora ou placa ethernet seja considerada um arquivo? Qual é o seu objetivo aqui? ... Kiwy 24/02 às 14:18

Agora, aqui está uma mensagem de log ao inicializar o linux sem um sistema de arquivos (que está parado no final):

    [Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] U-Boot 2013.07 (Apr 08 2014 - 14:27:03)
[Tue Apr 08 20:07:18.298 2014] 
[Tue Apr 08 20:07:18.298 2014] Memory: ECC disabled
[Tue Apr 08 20:07:18.298 2014] DRAM:  1 GiB
[Tue Apr 08 20:07:18.308 2014] SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
[Tue Apr 08 20:07:18.341 2014] *** Warning - bad CRC, using default environment
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] In:    serial
[Tue Apr 08 20:07:18.341 2014] Out:   serial
[Tue Apr 08 20:07:18.341 2014] Err:   serial
[Tue Apr 08 20:07:18.341 2014] U-BOOT for Xilinx-ZC702-14.7
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] 
[Tue Apr 08 20:07:18.341 2014] SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
[Tue Apr 08 20:07:18.697 2014] Linux
[Tue Apr 08 20:07:18.697 2014]      Load Address: 0x00008000
[Tue Apr 08 20:07:18.697 2014]      Entry Point:  0x00008000
[Tue Apr 08 20:07:18.697 2014]    Verifying Hash Integrity ... OK
[Tue Apr 08 20:07:18.697 2014] ## Loading fdt from FIT Image at 01000000 ...
[Tue Apr 08 20:07:18.697 2014]    Using 'conf@1' configuration
[Tue Apr 08 20:07:18.697 2014]    Trying 'fdt@1' fdt subimage
[Tue Apr 08 20:07:18.697 2014]      Description:  Flattened Device Tree blob
[Tue Apr 08 20:07:18.697 2014]      Type:         Flat Device Tree
[Tue Apr 08 20:07:18.697 2014]      Compression:  uncompressed
[Tue Apr 08 20:07:18.697 2014]      Data Start:   0x0111d344
[Tue Apr 08 20:07:18.697 2014]      Data Size:    11179 Bytes = 10.9 KiB
[Tue Apr 08 20:07:18.697 2014]      Architecture: ARM
[Tue Apr 08 20:07:18.697 2014]      Hash algo:    crc32
[Tue Apr 08 20:07:18.697 2014]      Hash value:   a7a92b47
[Tue Apr 08 20:07:18.697 2014]      Hash algo:    sha1sha1+ OK
[Tue Apr 08 20:07:18.702 2014]    Booting using the fdt blob at 0x111d344
[Tue Apr 08 20:07:18.702 2014]    UncomprOK
[Tue Apr 08 20:07:18.702 2014]    Loading Device Tree to 07ffa000, end 07fffbaa ... OK
[Tue Apr 08 20:07:18.702 2014] 
[Tue Apr 08 20:07:18.702 2014] Starting kernel ...
[Tue Apr 08 20:07:18.702 2014] 
[Tue Apr 08 20:07:19.453 2014] u @c0a7b000 s5568 r8192 d14912 u32768
[Tue Apr 08 20:07:19.453 2014] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
[Tue Apr 08 20:07:19.453 2014] Kernel command line: root=mtd:jffs2 rw rootfstype=jffs2 console=ttyPS0,115200
[Tue Apr 08 20:07:19.453 2014] PID hash table entries: 4096 (order: 2, 16384 bytes)
[Tue Apr 08 20:07:19.453 2014] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[Tue Apr 08 20:07:19.453 2014] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[Tue Apr 08 20:07:19.453 2014] __ex_table already sorted, skipping sort
[Tue Apr 08 20:07:19.453 2014] Memory: 1024MB = 1024MB total
[Tue Apr 08 20:07:19.453 2014] Memory: 1036960k/1036960k available, 11616k reserved, 270339 16




[Tue Apr 08 20:07:19.625 2014] I reach build/linux/kernel/xlnx-3.8/source/net/socket.c:





[Tue Apr 08 20:07:19.625 2014] DMA: preallocated 256 KiB pool for atomic coherent allocations
[Tue Apr 08 20:07:19.625 2014] xgpiops e000a000.ps7-gpio: gpio at 0xe000a000 mapped to 0xf004e000
[Tue Apr 08 20:07:19.625 2014] GPIO IRQ not connected
[Tue Apr 08 20:07:19.625 2014] XGpio: /amba@0/gpio@41220000: registered, base is 255
[Tue Apr 08 20:07:19.625 2014] GPIO IRQ not connected
[Tue Apr 08 20:07:19.625 2014] XGpio: /amba@0/gpio@41200000: registered, base is 251
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new interface driver usbfs
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new interface driver hub
[Tue Apr 08 20:07:19.625 2014] usbcore: registered new device driver usb
[Tue Apr 08 20:07:19.625 2014] Switching to clocksoutyPS0 at MMIO 0xe0001000 (irq = 82) is a xuartps
[Tue Apr 08 20:07:19.629 2014] console [ttyPSxusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000
[Tue Apr 08 20:07:19.670 2014] xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00
[Tue Apr 08 20:07:19.675 2014] hub 1-0:1.0: USB hub found
[Tue Apr 08 20:07:19.675 2014] hub 1-0:1.0: 1 port detected
[Tue Apr 08 20:07:19.681 2014] xi2cps e0004000.ps7-i2c: 400 kHz mmio e0004000 irq 57
[Tue Apr 08 20:07:19.686 2014] xadcps f8007100.ps7-xadc: enabled:   yes reference:  external
[Tue Apr 08 20:07:19.709 2014] xwdtps f8005000.ps7-wdt: Xilinx Watchdog Timer at f00ea000 with timeout 10s
[Tue Apr 08 20:07:19.709 2014] sdhci: Secure Digital Host Controller Interface driver
[Tue Apr 08 20:07:19.709 2014] sdhci: Copyright(c) Pierre Ossman
[Tue Apr 08 20:07:19.709 2014] sdhci-pltfm: SDHCI platform and OF driver helper
[Tue Apr 08 20:07:19.729 2014] usbcore: registered new interface driver usbhid
[Tue Apr 08 20:07:19.729 2014] usbhid: USB HID core driver


[Tue Apr 08 20:07:19.729 2014]  I am at build/linux/kernel/xlnx-3.8/source/drivers/hid/usbhid/hid-core.c



[Tue Apr 08 20:07:19.729 2014] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[Tue Apr 08 20:07:19.781 2014] MTD: MTD device with name "jffs2" not found.
[Tue Apr 08 20:07:19.781 2014] List of all partitions:
[Tue Apr 08 20:07:19.781 2014] No filesystem could mount root, tried:  jffs2
[Tue Apr 08 20:07:19.781 2014] Kernel panic - not syncing: VFS: Unable to mount root fs on mtd:jffs2
[Tue Apr 08 20:07:19.781 2014] CPU1: stopping
[Tue Apr 08 20:07:19.781 2014] Backtrace: 
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c0011094>] from [<c01c6408>]
[Tue Apr 08 20:07:19.781 2014]  r6:c0246418 r5:00000000 r4:00000001 r3:60000193
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c01c63f0>] from [<c0011fbc>]
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c0011f78>] from [<c0012270>]
[Tue Apr 08 20:07:19.781 2014]  r4:c0247ef4 r3:c0011f78
[Tue Apr 08 20:07:19.781 2014] Function entered at [<c001220c>] from [<c00084e4>]
[Tue Apr 08 20:07:19.781 2014]  r5:ef07bf68 r4:f8f00100
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c0008484>] from [<c000da00>]
[Tue Apr 08 20:07:19.824 2014] Exception stack(0xef07bf68 to 0xef07bfb0)
[Tue Apr 08 20:07:19.824 2014] bf60:                   c0a838d0 00000000 00000003 00000000 ef07a000 c01cd528
[Tue Apr 08 20:07:19.824 2014] bf80: ef07a000 c025c418 0000406a 413fc090 00000000 ef07bfbc ef07bfc0 ef07bfb0
[Tue Apr 08 20:07:19.824 2014] bfa0: c000e94c c000e950 60000113 ffffffff
[Tue Apr 08 20:07:19.824 2014]  r6:ffffffff r5:60000113 r4:c000e950 r3:c000e94c
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c000e924>] from [<c000eacc>]
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c000ea40>] from [<c01c4208>]
[Tue Apr 08 20:07:19.824 2014]  r5:00000001 r4:c024cf68
[Tue Apr 08 20:07:19.824 2014] Function entered at [<c01c4118>] from [<001c37c8>]
[Tue Apr 08 20:07:19.844 2014]  r6:10c03c7d r5:00000015 r4:2f06406a r3:c01c37b0
[Tue Apr 08 20:07:19.844 2014] MTD: MTD device with name "jffs2" not found.
[Tue Apr 08 20:07:19.844 2014] List of all partitions:
[Tue Apr 08 20:07:19.844 2014] No filesystem could mount root, tried:  jffs2
[Tue Apr 08 20:07:19.844 2014] Kernel panic - not syncing: VFS: Unable to mount root fs on mtd:

Estou inicializando a partir do flash.

Agora, a partir do log, é muito claro que muitos dos drivers já estão carregados, apesar de o carregamento do sistema de arquivos falhar (porque eu intencionalmente não coloquei o sistema de arquivos rootfs.jffs2 em flash).

Agora, referindo-se ao comentário acima, se tudo está no arquivo linux, como é que os drivers são carregados com sucesso? Você pode ver tudo o que vem por USB, GPIO, SD antes de solicitar o sistema de arquivos (e falhar).

Então, é tecnicamente correto dizer que

Linux deve ter um sistema de arquivos

Alguns antecedentes O que estou tentando obter é ter o linux em execução em um sistema em que um aplicativo de controle estará em execução. O aplicativo apenas captura alguns dados e os envia para alguns escravos. Não há dúvida de armazenamento de dados. Então, gostaria de se livrar completamente do sistema de arquivos. De acordo com meu entendimento, o sistema de arquivos é necessário para o armazenamento de dados e, como não armazenarei dados, por que o sistema de arquivos e aumenta o uso de recursos?

Atualizar

Embora eu tenha mencionado isso em segundo plano , mas, para ser específico, o envio dos dados ocorreria usando USB ou Ethernet, por isso é natural ter drivers correspondentes.

user2799508
fonte
1
É bom ser citado em B-)
Kiwy
Onde você gostaria de armazenar seu aplicativo de controle?
#
@ el.pescado no mesmo local em que manterei o SO, basicamente memória flash.
precisa saber é o seguinte
@ user2799508 in initrd?
#

Respostas:

15

Se você precisa do Linux, precisa de um sistema de arquivos.

(Refiro-me ao Linux o sistema operacional aqui, em vez do Linux, o kernel do sistema operacional.

Sua observação sobre o carregamento de drivers de dispositivo na inicialização antes da existência do sistema de arquivos é 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ê precise de uma mídia de armazenamento regravável persistente formatada com um sistema de arquivos tradicional, como no exemplo do JFFS2. Tudo o que você precisa para suportar uma /devárvore tradicional é uma estrutura de dados que se comporta como um sistema de arquivos em disco. Os Linux modernos usam o udev em um sistema de arquivos na memória para permitir o acesso aos /devnós sem precisar de armazenamento persistente para os /devnós, por exemplo.

Você também precisa de um sistema de arquivos para fazer uso de vários outros recursos do Linux, o SO:

  • 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 do kernel para aplicar o controle de acesso? A maior parte disso é feita por meio de bits de permissão , ACLs e etiquetas SELinux em um arquivo ou diretório em algum lugar.

Eu provavelmente poderia ter mais exemplos, mas isso serve.

É possível carregar todos os recursos que o seu sistema precisa do armazenamento persistente na RAM, para que, uma vez inicializado, o sistema não use armazenamento persistente. As distribuições do Live Linux fazem isso. Também é comum que os sistemas operacionais Linux incorporados criem todo o sistema de arquivos na RAM durante a inicialização, para que, uma vez inicializados, não continuem fazendo referência ao armazenamento persistente, como um dispositivo de armazenamento flash .

Se você estiver construindo um sistema incorporado de tarefa única de escopo restrito, provavelmente não precisará do sistema operacional Linux. Você pode precisar apenas de um sistema operacional menor e com menos recursos , ou conseguir escrever diretamente no metal .

Algumas das outras respostas aqui falam sobre reduzir o Linux até o ponto em que tudo o que resta é o Linux-kernel, emparelhado com um único executável - seu programa, executando sob o kernel - ou executando como um programa monolítico com seu código estaticamente incorporado nele. De qualquer forma, você pode se livrar completamente da necessidade de um sistema de arquivos, mas o que você acaba usando não é mais o Linux-OS.

Warren Young
fonte
4
Precisa de bibliotecas compartilhadas? Nah - você pode usar binários estáticos. Precisa de módulos carregáveis? Nah - você pode compilar um núcleo monolítico. Precisa de mais de um executável? Nah - coloque tudo dentro init. Ah, mas onde seria initcarregado? Bingo!
Gilles 'SO- stop be evil'
1
@ Gilles: Vá longe o suficiente por esse caminho e você acaba com a resposta de Achmed e seu conseqüente problema.
21814 Warren Young
1
Não, há uma enorme diferença entre ter inite modificar o kernel para fazer outra coisa além de carregar init.
Gilles 'SO- stop be evil'
Eu sei. Você está descrevendo o último passo na progressão em direção à resposta de Achmed. Estou apenas alertando sobre uma conseqüência potencial de levar a idéia longe demais.
Warren Young
Não concordo com a ideia de que possa haver algo longe demais . O ponto principal de um kernel de código aberto é que sua fonte está aberta a alterações. Adaptar o software de código aberto a propósitos alternativos é o objetivo do software de código aberto. Se você faz um mau trabalho ou se seu objetivo é muito singular, suas alterações morrem com você, mas se sua alteração vale a pena, outras pessoas se beneficiarão com seus esforços e provavelmente com as delas quando elas contribuírem.
mikeserv
7

Eu escrevi uma resposta para uma pergunta relacionada que detalha como o conceito de um arquivo é essencial para o funcionamento do Unix e, como você não pode ter um arquivo sem algum tipo de sistema de arquivos, isso significa que você definitivamente precisa de um.

No entanto , é possível sobreviver sem um sistema de arquivos existente em qualquer mídia de armazenamento persistente. Sua initramfsimagem pode ser compilada no próprio kernel (ou então colocada em algum lugar onde o gerenciador de inicialização possa acessá-lo). Tecnicamente, a imagem que é gravada na mídia de armazenamento é um arquivo e não um sistema de arquivos; só se torna tal depois de carregado. Se você colocar todos os arquivos binários necessários dentro deste, não há necessidade de colocá-los em um sistema de arquivos na mídia de armazenamento. Dessa forma, você pode garantir que todos os sistemas de arquivos necessários que o sistema precisa executar existam puramente na memória.

É claro que as desvantagens são que, como tudo o que o sistema precisa tem que existir na memória, você pode achar que simplesmente não tem o suficiente para o que deseja fazer. Além disso, você terá dificuldade em escrever os dados que deseja persistir após uma reinicialização.

Graeme
fonte
Um ponto muito importante sobre as initramfsimagens é que você não está limitado a apenas 1. Simplesmente cpiooutra imagem no topo da primeira e pronto. OU compile no primeiro e adicione o restante após a inicialização. As possibilidades são infinitas. Observe também que, como as cpioferramentas estão incluídas no kernel, não é inconcebível salvar as alterações dessa maneira, embora você esteja limitado a gravar a cpioimagem salva em um dispositivo bruto, se você não tiver outro sistema de arquivos.
mikeserv
Além disso, tecnicamente, a cpioimagem não se torna um sistema de arquivos, mas é descompactada em um sistema de arquivos - initramfsou rootfscomo você preferir.
precisa saber é o seguinte
5

Na verdade, tecnicamente falando, você não precisa de um sistema de arquivos. O comportamento padrão é ter um sistema de arquivos do qual inicializar. (por exemplo, /sbin/inité lançado a partir daí). No entanto, se você quiser, pode ver o que acontece do_basic_setup()em linux-source/init/main.c. No momento em que a rotina é chamada, o kernel e a CPU0 estão prontos para o trabalho real. Você pode destruir todo o trabalho necessário para inicializar o initramfs - que também é um sistema de arquivos! - e qualquer coisa depois e substitua-o por seu próprio código para funcionar sem os sistemas de arquivos.

Você pode usar os threads do kernel para gerar os processos que desejar. No entanto, tudo isso seria super feio.

Ahmed Masud
fonte
1
Embora tudo isso seja verdade, não seria necessário que você GPL seu sistema? Você não pode usar o furo de licenciamento do módulo do kernel porque nenhum sistema de arquivos significa que não há módulos do kernel carregáveis ​​dinamicamente.
21814 Warren Young
+1 por ser conciso, tecnicamente correto e a única resposta para responder corretamente à pergunta até o momento. O Linux é apenas uma base de código, você pode usá-lo como desejar, incluindo a remoção de muitos componentes básicos.
Validade 10/04
@ Ahmed Masud Você quer dizer que ainda preciso de um sistema de arquivos - initramfs? (Eu precisarei de ethernet e usb no meu aplicativo)
#
@mikeserv, os kernels anteriores a 2.6 não precisam initramfs- eles usam initrd.
Graeme
@ Graeme Isso também é verdade, como eu sei e até me notei em outras partes deste site. Atualmente, penso mais do que isso, mesmo que isso seja uma falácia. Mas, em minha defesa - eu não estou sozinho. Até o OpenWRT usa o 2.6+ há vários anos, apesar dos drivers originais da Broadcom que originalmente lhe deram um objetivo e um nome que nunca viu uma atualização oficialmente compatível com o 2.6.
precisa saber é o seguinte
1

Um sistema de arquivos fornece mais do que apenas um local para armazenar arquivos. É onde estão os executáveis ​​(programas), bibliotecas e arquivos de configuração do seu sistema. No mínimo, o kernel do linux requer um sistema de arquivos para permitir que ele encontre / execute o processo " init " responsável por garantir que outros processos sejam iniciados conforme apropriado para o seu sistema.

Quanto a tudo, há um arquivo que significa que os sistemas Linux / Unix fornecem acesso a dispositivos, recursos e arquivos por meio de uma abstração de arquivo. Isso significa que existe uma interface consistente (abrir, fechar, ler, escrever, ...) para (quase!) Tudo.

Sua confusão com os drivers de dispositivo ocorre porque você está confundindo a fonte das instruções do driver de dispositivo com as instruções reais da máquina executável que implementam o driver de dispositivo. No exemplo, você forneceu os drivers de dispositivo embutidos diretamente no kernel e pode executar uma vez que a imagem do kernel foi carregada na memória. Se os drivers de dispositivo são construídos como módulos, eles estão contidos nos arquivos do sistema de arquivos e as instruções da máquina executável são carregadas do arquivo na memória do kernel onde são executadas. Depois que o driver do dispositivo é carregado e em execução, normalmente os dispositivos que ele controla estão disponíveis no / dev por meio do sistema de arquivos.

Depois que o kernel está executando o processo init e todos os seus filhos precisam acessar o arquivo para interagir com outros processos, acessar dispositivos, solicitar memória virtual, obter fontes de números aleatórios e enviar mensagens um ao outro. Isto é para a parte principal feita através do acesso ao sistema de arquivos. Enviar / receber pela rede é uma exceção para exigir o acesso ao sistema de arquivos, mas você provavelmente encontrará uma necessidade de acessar um sistema de arquivos muito rapidamente de qualquer maneira.

Dado o seu caso de uso, você deve considerar uma pequena distribuição configurável, como o OpenWrt . Com isso, você pode criar um sistema que tenha um conjunto mínimo de software instalado e que basicamente execute a partir da RAM sem precisar gravar nada no armazenamento estável. Depois de executá-lo, você sempre pode remover componentes desnecessários, mas não subestima a ajuda que traz uma distribuição que possui ferramentas de depuração e uma base de usuários ativa.

Richm
fonte
0

Os sistemas de arquivos são um meio para os sistemas operacionais organizarem dados persistentemente armazenados. Especificamente, eles permitem que o sistema operacional armazene e recupere dados com eficiência. Quando você diz que inicializou a partir de uma unidade flash, isso significa que essa unidade flash certamente possui um sistema de arquivos. O fato de o kernel carregar um driver significa que ele deve ter encontrado uma maneira de encontrá-lo em algum lugar. Este "encontre em algum lugar" é alcançado pelo sistema de arquivos. Mas mesmo que o kernel seja monolítico e tenha tudo compilado, pelo menos o gerenciador de inicialização deve ter conseguido encontrar o kernel.

Em teoria, você poderia fazer isso sem um sistema de arquivos sofisticado, basta colocar tudo em um local fixo e codificar esse local, mas que finalidade isso serviria? E não estamos falando sobre seus arquivos de dados, como e-mails e tudo mais, ainda. Sem um sistema de arquivos, não há uma maneira sólida de armazená-los (e depois encontrá-los). Mesmo que você não queira armazenar nenhum arquivo, o sistema operacional é mais do que apenas o kernel, inclui vários serviços e programas de usuários que são armazenados em arquivos.

Para resumir uma longa história, você deve ter um sistema de arquivos em algum lugar, pois se o kernel não encontrar nenhum (como no exemplo), ele entra em pânico (como mostra o seu log) - o que significa que ele se recusa a fazer qualquer coisa. Mas se a execução de uma instalação Linux a partir de uma unidade flash (com um sistema de arquivos) atender às suas necessidades, você não precisará de um sistema de arquivos em disco ou em qualquer outro lugar.

contra-modo
fonte
1
Os sistemas operacionais Unixy usam o sistema de arquivos para mais do que apenas dados persistentes. Há árvores impersistent (devfs, /proc, /sys...), é a espinha dorsal da maioria de controle de acesso, etc.
Warren Young
/ proc e / sys são apenas auxiliares, o sistema poderia - em princípio - funcionar bem sem eles. / sys é específico do linux, / proc pode ser substituído por algo como sysctl como o FreeBSD.
countermode
0

Se você deseja que o sistema operacional Linux funcione, ele precisa ter um sistema de arquivos.

Mas não há exigência de que o sistema de arquivos esteja em um disco rígido (ou SSD etc). De fato, não existe nem um requisito de que o Linux esteja no dispositivo.

Você pode usar o protocolo BOOTP para carregar o sistema operacional pela rede. Você precisa de bastante RAM para que isso seja eficaz. O carregador de inicialização é uma ROM padrão na placa de rede. Todo o resto é transferido pela rede e armazenado em um sistema de arquivos virtual criado na RAM.

No entanto, para um dispositivo dedicado, seria melhor instalar a memória flash com o equivalente a um disco USB Live Boot e executar o programa a partir daí. Parece que você já está tentando fazer algo assim. Ao executar a partir de um disco flash ou ROM, um sistema de arquivos virtual também é criado na RAM, mas você precisa de menos RAM se estiver usando o método BOOTP.

Ao contrário do Ubuntu, o Debian usa uma imagem de inicialização híbrida que pode ser copiada diretamente para um disco flash USB usando dd, você pode achar mais fácil trabalhar com isso, especialmente porque o Ubuntu exige o uso de um programa especial para criar o USB inicializável e esse programa é um pouco buggy.

Você pode adicionar seus próprios programas a uma imagem do sistema operacional usando várias ferramentas para montar o ISO como um sistema de arquivos de leitura / gravação. Você pode usar o rc.local para iniciar o programa, mas tenha cuidado para que o rc.local seja executado várias vezes durante a inicialização. Você também pode criar um script /etc/init.d/, mas isso é mais complicado.

Em resumo: o seu programa não precisa de um sistema de arquivos, mas o sistema operacional, no entanto, nenhum disco físico / real é necessário.

codeslinger
fonte
0

Os computadores anteriores (e alguns sistemas embarcados modernos) não possuem um sistema de arquivos. My Apple] [(e o Commodore PET da escola) tinha o sistema operacional em ROM e estava pronto para rodar cerca de 2 segundos após uma inicialização a frio. Deseja carregar software? Digite a fonte manualmente ou digite LOAD, pressione enter e, em seguida, PLAY na máquina de fita. Então nós adquirimos uma unidade de disco - e houve muita alegria.

No entanto, o próprio núcleo do linux assume que um sistema de arquivos está presente, e quase tudo o mais se baseia nisso. Se você deseja implementar um verdadeiro sistema operacional sem sistema de arquivos, é certamente possível, mas seu hardware e sistema operacional terão que ser construídos em torno do conceito.

O método da Apple era conectar o sistema operacional nos últimos 16k de memória, o processador (MC6502) foi conectado para pular para o local permanentemente armazenado nos últimos 2 bytes de memória.

Paulo
fonte
-3

Não, o linux não precisa ter um sistema de arquivos em um sentido muito estrito. No seu caso, você tem um problema diferente.

"Nenhum sistema de arquivos conseguiu montar o root, tentou: jffs2" "MTD: dispositivo MTD com o nome" jffs2 "não encontrado."

Meu palpite é que parte do processo de carregamento não é encontrar o local para montar ou não tem a capacidade de montar esse sistema de arquivos.

jefro
fonte
2
Sua resposta diz "você não precisa de um sistema de arquivos, mas seu problema é que você precisa de um sistema de arquivos". Não faz sentido e não é internamente consistente.
casey
Eu não entendo isso ... esse erro é porque não há sistema de arquivos para montar, porque ele não tem sistema de arquivos. O montador está funcionando bem, ele simplesmente não tem fs válidos em seu disco flash.
Vality