여기에 질문을 했는데요파일 시스템이 필요합니까?
댓글 중 하나는 다음과 같습니다.
파일 시스템이 없는 시스템은 Linux에서 어떻게 작동합니까? 심지어 프린터나 이더넷 카드도 파일로 간주됩니까? 여기서 당신의 목표는 무엇입니까? ...뉴질랜드 2월 24일, 14:18
이제 파일 시스템 없이 Linux를 부팅할 때 나타나는 로그 메시지는 다음과 같습니다(끝 부분에 있음).
[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:
플래시에서 부팅합니다.
이제 파일 시스템이 로드되지 않았음에도 불구하고 많은 드라이버가 로드되었다는 것이 로그에서 분명해졌습니다(의도적으로 파일 시스템 rootfs.jffs2를 플래시에 넣지 않았기 때문입니다).
이제 위의 설명을 참조하면 Linux의 모든 것이 파일인 경우 드라이버가 어떻게 성공적으로 로드됩니까? 파일 시스템을 요청하기 전에(그리고 실패하기 전에) USB, GPIO, SD 모든 것이 완료된 것을 볼 수 있습니다.
기술적으로 말하면 다음과 같은 말이 맞습니까?
Linux에는 파일 시스템이 있어야 합니다.
일부 배경 내가 달성하고 싶은 것은 제어 애플리케이션을 실행하는 시스템에서 Linux를 실행하는 것입니다. 애플리케이션은 일부 데이터를 캡처하여 일부 슬레이브로 보냅니다. 데이터 저장에는 전혀 문제가 없습니다. 그래서 파일 시스템을 완전히 없애고 싶습니다. 제가 이해한 바로는 데이터를 저장하려면 파일 시스템이 필요한데, 데이터를 전혀 저장하지 않을 텐데 왜 파일 시스템을 갖고 리소스 사용량을 늘리겠습니까?
고쳐 쓰다
비록 나는배경하지만 구체적으로 USB나 이더넷을 통해 데이터를 보내기 때문에 해당 드라이버가 있는 것은 당연하다.
답변1
Linux가 필요하면 파일 시스템이 필요합니다.
(여기서는 리눅스 운영체제 커널이 아닌 리눅스 운영체제를 지칭합니다. 아래에서 좀 더 구체적으로 설명하겠습니다.)
파일 시스템이 존재하기 전에 부팅 시 로드되는 장치 드라이버에 대한 관찰은 빨간색 청어입니다. 파일 시스템 없이 드라이버를 로드할 수 있습니다. 너 뭐야할 수 없다do에는 fd = open("/dev/foo", O_RDONLY)
파일 시스템이 없습니다.
이는 JFFS2 예와 같이 기존 파일 시스템으로 포맷된 영구 재기록 가능 저장 매체를 사용해야 한다는 의미는 아닙니다. 전통적인 트리를 지원하는 데 필요한 /dev
것은데이터 구조저것성능디스크의 파일 시스템과 같습니다. 최신 Linux 사용법우데브/dev
예를 들어, 노드의 영구 저장소 없이도 메모리 내 파일 시스템의 노드에 대한 액세스를 허용합니다 ./dev
또한 Linux 운영 체제의 여러 다른 기능을 활용하려면 파일 시스템이 필요합니다.
공유 라이브러리나 스크립팅 언어 모듈이 필요합니까?
/lib/libfoo.*
, , 등을 저장하려면 파일 시스템이 필요합니다/usr/lib/perl5/*
./lib/ld.so
/etc/ld.so.cache
로드 가능한 커널 모듈이 필요합니까? 파일 시스템이 필요하다
/lib/modules/$(uname -r)/*
셸이나 텍스트 편집기와 같은 여러 실행 파일이 필요합니까? 생존하려면 파일 시스템이 필요합니다.
커널이 액세스 제어를 시행해야 합니까? 대부분은 다음을 통해 수행됩니다.허가 비트,ACL, 그리고SELinux 태그파일이나 디렉토리 어딘가에 있습니다.
아마도 더 많은 예를 들 수 있겠지만 이 정도로 하겠습니다.
시스템에 필요한 모든 리소스는 영구 저장소에서 RAM으로 로드될 수 있으므로 일단 시작되면 시스템은 영구 저장소를 전혀 사용하지 않습니다.라이브 Linux 배포판이 작업을 수행. 또한 임베디드 Linux 운영 체제는 부팅 시 RAM에 전체 파일 시스템을 구축하는 것이 일반적이므로 일단 부팅되면 더 이상 영구 저장소를 참조하지 않습니다.플래시 메모리 장치.
제한된 단일 목적, 단일 작업 임베디드 시스템을 구축하는 경우에는 Linux 운영 체제가 필요하지 않을 것입니다. 더 작고 기능이 덜 풍부한 것이 필요할 수도 있습니다.임베디드 운영체제또는 다음과 같이 쓸 수도 있습니다.금속에 직접.
여기에 있는 다른 답변 중 일부는 단일 실행 파일(커널에서 실행되는 프로그램)과 쌍을 이루거나 코드가 정적으로 병합되는 모놀리식 프로그램으로 실행하여 Linux를 Linux 커널로만 제거하는 방법에 대해 설명합니다. 어느 쪽이든 파일 시스템의 필요성을 완전히 없앨 수 있지만 결국에는 더 이상 Linux-the-OS가 아닙니다.
답변2
나는 썼다관련 질문에 답변파일 개념이 Unix 작동 방식의 중심이 되는 방법을 자세히 설명하고, 일종의 파일 시스템 없이는 파일을 가질 수 없기 때문에 파일 시스템이 반드시 필요하다는 의미입니다.
하지만영구 저장 매체에 파일 시스템이 없어도 생존할 수 있습니다. 이미지 initramfs
는 커널 자체로 컴파일될 수 있습니다(또는 부트로더가 액세스할 수 있는 어딘가에 배치될 수 있습니다). 기술적으로 저장 매체에 기록된 이미지는 파일 시스템이 아닌 아카이브이며 로드된 후에만 그렇게 됩니다. 필요한 모든 바이너리를 여기에 넣으면 저장 매체의 파일 시스템에 넣을 필요가 없습니다. 이렇게 하면 시스템이 작동하는 데 필요한 모든 파일 시스템이 메모리에만 존재하도록 보장할 수 있습니다.
물론 단점은 시스템에 필요한 모든 것이 메모리에 존재해야 하기 때문에 원하는 작업을 수행하기에는 메모리가 충분하지 않을 수 있다는 것입니다. 또한 재부팅 후에도 유지하려는 데이터를 작성하는 데 어려움을 겪게 됩니다.
답변3
실제로 기술적으로는 파일 시스템이 필요하지 않습니다. 기본 동작은 부팅할 파일 시스템을 갖는 것입니다. (예: /sbin/init
거기에서 시작). 하지만 원한다면, do_basic_setup()
무슨 일이 일어나고 있는지 살펴볼 수 있습니다 .linux-source/init/main.c
. 이 루틴이 호출되면 코어와 CPU0은 실제 작업을 수행할 준비가 됩니다. initramfs를 시작하는 데 필요한 모든 작업을 분쇄할 수 있습니다. 이는 파일 시스템이기도 합니다! - 그 이후의 모든 항목을 파일 시스템 없이 작동하려면 자신의 코드로 바꾸세요.
그런 다음 사용할 수 있습니다커널 스레드원하는 프로세스를 생성하세요. 그러나 이 모든 것은 매우 추악한 것입니다.
답변4
파일 시스템은 운영 체제가 데이터의 영구 저장소를 구성하는 수단입니다. 특히 이를 통해 운영 체제는 데이터를 효율적으로 저장하고 검색할 수 있습니다. 플래시 드라이브에서 부팅했다고 말하면 플래시 드라이브에 확실히 파일 시스템이 있다는 뜻입니다. 커널이 드라이버를 로드했다는 사실은 드라이버를 어딘가에서 찾을 수 있는 방법이 있어야 함을 의미합니다. "어딘가에서 찾기"는 파일 시스템에 의해 구현됩니다. 그러나 커널이 모놀리식이고 모든 것을 컴파일하더라도 최소한부트 로더커널을 찾을 수 있는 방법이 있어야 합니다.
이론적으로는 복잡한 파일 시스템 없이 이 작업을 수행할 수 있으며 모든 것을 고정된 위치에 넣고 해당 위치를 하드코드하기만 하면 됩니다. 하지만 그게 무슨 소용이 있을까요? 우리가 말하는 것은 그렇지 않습니다.당신의이메일 및 기타 모든 것과 같은 데이터 파일. 파일 시스템이 없으면 이러한 파일을 저장하고 나중에 찾을 수 있는 올바른 방법이 없습니다. 파일을 저장하고 싶지 않더라도 운영 체제는 단순한 커널 그 이상이며 파일에 저장된 다양한 서비스와 사용자 공간 프로그램도 포함합니다.
간단히 말해서, 당신은~ 해야 하다어딘가에 파일 시스템이 있습니다. 왜냐하면 커널이 파일 시스템을 찾을 수 없으면(귀하의 예에서와 같이) 패닉 상태가 되기 때문입니다(로그에 표시됨). 즉, 아무것도 하지 않는다는 의미입니다. 그러나 플래시 드라이브(파일 시스템 포함)에서 Linux 설치를 실행하는 것이 요구 사항에 적합하다면 디스크나 다른 곳에 파일 시스템이 필요하지 않습니다.