Tôi có yêu cầu hệ thống tệp khi tôi không muốn lưu trữ bất kỳ dữ liệu nào không


8

Tôi đã hỏi một câu hỏi ở đây Có bắt buộc phải có một hệ thống tập tin không

Một trong những ý kiến ​​là:

Làm thế nào một hệ thống không có hệ thống tệp sẽ hoạt động trên linux vì ngay cả máy in hoặc thẻ ethernet cũng được coi là một tệp? Mục tiêu của bạn ở đây là gì? ... Kiwy ngày 24 tháng 2 lúc 14:18

Bây giờ đây là một thông điệp tường trình khi khởi động linux mà không có hệ thống tệp (được treo ở cuối):

    [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:

Tôi đang khởi động từ flash.

Bây giờ từ nhật ký, rất rõ ràng rằng nhiều trình điều khiển đã được tải ngay cả khi tải hệ thống tệp không thành công (vì tôi cố tình không đưa hệ thống tệp rootfs.jffs2 vào flash).

Bây giờ hãy tham khảo bình luận ở trên, nếu mọi thứ đều là tệp trong linux, làm thế nào để trình điều khiển được tải thành công? Bạn có thể thấy USB, GPIO, SD mọi thứ đang đến trước khi nó yêu cầu hệ thống tệp (và không thành công).

Vậy là đúng về mặt kỹ thuật để nói rằng

linux PHẢI có một hệ thống tập tin

Một số nền tảng Những gì tôi đang cố gắng đạt được là để linux chạy trên một hệ thống mà ứng dụng điều khiển sẽ chạy. Ứng dụng chỉ cần thu thập một số dữ liệu và gửi nó đến một số nô lệ. Không có câu hỏi về việc lưu trữ dữ liệu TẠI TẤT CẢ. Vì vậy, muốn hoàn toàn thoát khỏi hệ thống tập tin. Theo hiểu biết của tôi, hệ thống tệp là cần thiết để lưu trữ dữ liệu và vì tôi sẽ không lưu trữ bất kỳ dữ liệu nào, vậy tại sao có hệ thống tệp và tăng mức sử dụng tài nguyên?

Cập nhật

Mặc dù tôi đã đề cập đến vấn đề này trong nền , nhưng để cụ thể việc gửi dữ liệu sẽ diễn ra bằng USB hoặc Ethernet, do đó, việc có các trình điều khiển tương ứng là điều tự nhiên.


1
Rất vui được trích dẫn B-)
Kiwy

Bạn muốn lưu trữ ứng dụng điều khiển của mình ở đâu?
el.pescado

@ el.pescado ở cùng một nơi tôi sẽ giữ HĐH, về cơ bản là bộ nhớ flash.
dùng2799508

@ user2799508 trong initrd?
el.pescado

Câu trả lời:


15

Nếu bạn cần Linux, bạn cần một hệ thống tập tin.

(Ý tôi là Linux hệ điều hành ở đây, chứ không phải Linux là nhân hệ điều hành. Tôi sẽ hiểu cách giải thích hẹp hơn bên dưới.)

Quan sát của bạn về trình điều khiển thiết bị đang tải khi khởi động trước khi hệ thống tập tin tồn tại là một cá trích đỏ. Bạn có thể tải trình điều khiển mà không cần có hệ thống tập tin. Những gì bạn không thể làm là fd = open("/dev/foo", O_RDONLY)không có hệ thống tập tin.

Điều đó không có nghĩa là bạn cần một phương tiện lưu trữ có thể ghi lại liên tục được định dạng bằng hệ thống tệp truyền thống, như với ví dụ JFFS2 của bạn. Tất cả bạn cần để hỗ trợ một truyền thống /devcây là một cấu trúc dữ liệucư xử giống như một hệ thống tập tin trên đĩa. Các Linux hiện đại sử dụng udev trên một hệ thống tệp trong bộ nhớ để cho phép truy cập vào /devcác nút mà không cần lưu trữ liên tục cho các /devnút, chẳng hạn.

Bạn cũng cần một hệ thống tập tin để sử dụng một số khả năng khác của Linux-the-OS:

  • Cần thư viện chia sẻ hoặc các mô-đun ngôn ngữ kịch bản? Bạn cần một hệ thống tập tin để lưu trữ /lib/libfoo.*, /usr/lib/perl5/*, /lib/ld.so, /etc/ld.so.cachevv

  • Cần các mô-đun hạt nhân có thể tải? Bạn cần một hệ thống tập tin cho/lib/modules/$(uname -r)/*

  • Cần nhiều hơn một tệp thực thi, như trình bao hoặc trình soạn thảo văn bản? Họ cần một hệ thống tập tin để sống.

  • Cần kernel để thực thi kiểm soát truy cập? Hầu hết điều đó được thực hiện thông qua các bit cho phép , ACLnhãn SELinux trên một tệp hoặc thư mục ở đâu đó.

Tôi có thể có thể đưa ra nhiều ví dụ hơn, nhưng điều đó sẽ làm được.

Có thể tải tất cả các tài nguyên mà hệ thống của bạn cần từ bộ lưu trữ liên tục vào RAM, do đó, khi đã khởi động, hệ thống hoàn toàn không sử dụng bộ lưu trữ liên tục. Phân phối Linux trực tiếp làm điều này. Các hệ điều hành Linux nhúng cũng thường xây dựng toàn bộ hệ thống tệp của họ trong RAM khi khởi động, do đó, khi đã khởi động, họ không còn tiếp tục tham chiếu bộ lưu trữ liên tục như thiết bị lưu trữ flash .

Nếu bạn đang xây dựng một hệ thống nhúng một nhiệm vụ đơn mục đích có phạm vi hẹp, có lẽ bạn không cần Linux-the-OS. Bạn có thể chỉ cần một hệ điều hành nhúng nhỏ hơn, ít tính năng hơn hoặc bạn có thể viết thẳng vào kim loại .

Một số câu trả lời khác ở đây nói về việc tước Linux xuống đến điểm mà tất cả những gì bạn còn lại là Linux-the-kernel, được ghép nối với một tệp thực thi duy nhất - chương trình của bạn, chạy trong kernel - hoặc chạy như một chương trình nguyên khối với mã của bạn được kết hợp tĩnh trong nó. Dù bằng cách nào, bạn có thể hoàn toàn thoát khỏi nhu cầu về một hệ thống tập tin, nhưng những gì bạn kết thúc không còn là Linux-the-OS.


4
Cần thư viện chia sẻ? Không - bạn có thể sử dụng nhị phân tĩnh. Cần các mô-đun có thể tải? Không - bạn có thể biên dịch một hạt nhân nguyên khối. Cần nhiều hơn một thực thi? Không - đặt mọi thứ vào init. Oh, nhưng nơi nào sẽ initđược tải? Chơi lô tô!
Gilles 'SO- đừng trở nên xấu xa'

1
@Gilles: Đi đủ xa trên con đường đó, và bạn kết thúc với câu trả lời của Achmed, và vấn đề hậu quả của nó.
Warren Young

1
Không, có một sự khác biệt lớn giữa việc có initvà sửa đổi kernel để làm một cái gì đó khác hơn là tải init.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi biết. Bạn đang mô tả bước cuối cùng trong quá trình tiến tới câu trả lời của Achmed. Tôi chỉ cảnh báo về một hậu quả tiềm tàng của việc đưa ý tưởng đi quá xa.
Warren Young

Tôi không đồng ý với ý kiến ​​cho rằng có thể có một khoảng cách quá xa . Toàn bộ điểm của hạt nhân nguồn mở là nguồn của nó được mở để thay đổi. Điều chỉnh phần mềm nguồn mở cho các mục đích thay thế là mục đích của phần mềm nguồn mở. Nếu bạn làm một công việc tồi tệ hoặc nếu mục đích của bạn quá kỳ dị thì những thay đổi của bạn sẽ chết với bạn, nhưng nếu sự thay đổi của bạn đáng giá thì những người khác sẽ được hưởng lợi từ những nỗ lực của bạn và có thể bạn từ họ khi họ đóng góp.
mikeerv

7

Tôi đã viết một câu trả lời cho một câu hỏi liên quan , chi tiết cách khái niệm tệp là cốt lõi đối với cách thức hoạt động của Unix và vì bạn không thể có một tệp mà không có một loại hệ thống tệp nào đó, điều đó có nghĩa là bạn chắc chắn cần một tệp.

Tuy nhiên , có thể tồn tại mà không cần hệ thống tập tin tồn tại trên bất kỳ phương tiện lưu trữ liên tục nào. initramfsHình ảnh của bạn có thể được biên dịch vào chính kernel (hoặc nếu không thì đặt ở đâu đó nơi bộ nạp khởi động có thể truy cập nó). Về mặt kỹ thuật, hình ảnh được ghi vào phương tiện lưu trữ là một kho lưu trữ chứ không phải là một hệ thống tập tin; nó chỉ trở thành như vậy sau khi nó được tải. Nếu bạn đặt tất cả các tệp nhị phân mà bạn cần bên trong này, thì không cần phải đặt chúng trong một hệ thống tệp trên phương tiện lưu trữ. Bằng cách này, bạn có thể đảm bảo rằng tất cả các hệ thống tệp cần thiết mà hệ thống cần chạy tồn tại hoàn toàn trong bộ nhớ.

Tất nhiên nhược điểm là vì mọi thứ hệ thống cần phải tồn tại trong bộ nhớ, bạn có thể thấy rằng bạn không có đủ cho những gì bạn muốn làm. Ngoài ra, bạn sẽ có một thời gian khó khăn để viết bất kỳ dữ liệu nào bạn muốn tiếp tục sau khi khởi động lại.


Một điểm rất nổi bật về initramfshình ảnh là bạn không bị giới hạn chỉ 1. Đơn giản là cpiomột hình ảnh khác nằm trên đỉnh đầu tiên và bạn rất tuyệt. HOẶC biên dịch trong lần đầu tiên và thêm phần còn lại sau khi khởi động. Khả năng là vô tận, Cũng lưu ý rằng vì các cpiocông cụ được bao gồm trong kernel, nên không thể lưu các thay đổi theo cách này, mặc dù bạn sẽ bị hạn chế ghi cpiohình ảnh đã lưu vào thiết bị thô nếu bạn không có hệ thống tệp khác.
mikeerv

Ngoài ra, về mặt kỹ thuật, cpiohình ảnh không trở thành một hệ thống tập tin mà được giải nén vào hệ thống tập tin - initramfshoặc rootfsnhư bạn thích.
mikeerv

5

Trên thực tế, về mặt kỹ thuật, bạn không cần một hệ thống tập tin. Hành vi mặc định là có một hệ thống tệp để khởi động. (ví dụ /sbin/initđược đưa ra từ đó). Tuy nhiên, nếu bạn thích bạn có thể nhìn vào những gì xảy ra do_basic_setup()trong linux-source/init/main.c. Vào thời điểm mà thường trình được gọi, kernel và CPU0 đã sẵn sàng cho công việc thực sự. Bạn có thể hủy tất cả các công việc cần thiết để khởi động initramfs - cũng là một hệ thống tập tin! - và bất cứ điều gì sau đó và thay thế nó bằng mã của riêng bạn để làm việc mà không cần hệ thống tập tin.

Sau đó, bạn có thể sử dụng các chuỗi nhân để sinh ra bất kỳ quy trình nào bạn muốn. Tuy nhiên, tất cả những điều này sẽ là siêu xấu xí.


1
Mặc dù điều này hoàn toàn đúng, nhưng nó sẽ không đòi hỏi bạn phải GPL hệ thống của bạn chứ? Bạn không thể sử dụng lỗ cấp phép mô-đun hạt nhân vì không có hệ thống tệp nào có nghĩa là không có mô-đun hạt nhân có thể tải động.
Warren Young

+1 cho ngắn gọn, đúng kỹ thuật và là câu trả lời duy nhất để trả lời đúng câu hỏi cho đến nay. Linux chỉ là một cơ sở mã, bạn có thể sử dụng nó theo cách bạn muốn, bao gồm loại bỏ sự cần thiết của nhiều thành phần cơ bản.
Vality

@Ahmed Masud Ý bạn là tôi vẫn cần một tập tin hệ thống - initramfs? (Tôi sẽ cần ethernet và usb trong ứng dụng của mình)
user2799508

@mikeerv, hạt nhân trước 2,6 không cần initramfs- họ sử dụng initrd.
Graeme

@Graeme Điều này cũng đúng, như tôi biết và thậm chí đã ghi chú mình ở nơi khác trên trang web này. Tôi có xu hướng nghĩ nhiều hơn thế, ngay cả khi làm như vậy là ngụy biện. Nhưng, trong sự bảo vệ của tôi - tôi không đơn độc. Ngay cả OpenWRT đã sử dụng 2.6+ trong vài năm, mặc dù các trình điều khiển Broadcom ban đầu ban đầu có mục đích và một cái tên không bao giờ thấy bản cập nhật tương thích chính thức 2.6.
mikeerv

1

Một hệ thống tập tin cung cấp nhiều hơn là một nơi để lưu trữ các tập tin. Đó là nơi thực thi (chương trình), thư viện và tệp cấu hình cho hệ thống của bạn. Tối thiểu, hạt nhân linux yêu cầu một hệ thống tập tin để cho phép nó tìm / thực thi quy trình " init " chịu trách nhiệm đảm bảo rằng các quy trình khác được khởi động phù hợp với hệ thống của bạn.

Về tất cả mọi thứ là một tệp mà cụm từ có nghĩa là các hệ thống Linux / Unix cung cấp quyền truy cập vào các thiết bị, tài nguyên, tệp thông qua một bản tóm tắt tệp. Điều đó có nghĩa là có một giao diện nhất quán (mở, đóng, đọc, viết, ...) cho (gần như!) Mọi thứ.

Sự nhầm lẫn của bạn với trình điều khiển thiết bị xuất hiện do bạn nhầm lẫn nguồn hướng dẫn trình điều khiển thiết bị với hướng dẫn máy thực thi thực tế thực hiện trình điều khiển thiết bị. Trong ví dụ bạn đã cung cấp trình điều khiển thiết bị được tích hợp trực tiếp vào kernel và có thể chạy khi hình ảnh kernel đã được tải vào bộ nhớ. Nếu trình điều khiển thiết bị được xây dựng dưới dạng các mô-đun, chúng được chứa trong các tệp trong hệ thống tệp và các hướng dẫn máy thực thi được tải từ tệp vào bộ nhớ kernel nơi chúng được thực thi. Khi trình điều khiển thiết bị được tải và chạy, nó thường làm cho các thiết bị mà nó điều khiển có sẵn trong / dev thông qua hệ thống tệp.

Khi kernel đang chạy tiến trình init và tất cả các con của nó cần truy cập tệp để tương tác với các tiến trình khác, truy cập thiết bị, để yêu cầu bộ nhớ ảo, để lấy nguồn số ngẫu nhiên, gửi tin nhắn cho nhau. Đây là phần chính được thực hiện thông qua truy cập hệ thống tập tin. Gửi / nhận qua mạng là một ngoại lệ để yêu cầu quyền truy cập hệ thống tệp nhưng bạn có thể sẽ thấy cần phải truy cập hệ thống tệp rất nhanh.

Thực sự đưa ra trường hợp sử dụng của bạn, bạn nên xem xét việc sử dụng một bản phân phối có thể định cấu hình nhỏ như OpenWrt . Với điều đó, bạn có thể xây dựng một hệ thống có cài đặt một bộ phần mềm tối thiểu và về cơ bản chạy từ RAM mà không cần phải ghi bất cứ điều gì vào bộ nhớ ổn định. Khi bạn đã chạy xong, bạn luôn có thể loại bỏ các thành phần không cần thiết nhưng đừng đánh giá thấp sự trợ giúp có phân phối có công cụ gỡ lỗi và cơ sở người dùng tích cực mang lại.


0

Hệ thống tệp là phương tiện để hệ điều hành tổ chức dữ liệu được lưu trữ liên tục. Cụ thể, họ cho phép HĐH lưu trữ và truy xuất dữ liệu hiệu quả. Khi bạn nói rằng bạn đã khởi động từ ổ đĩa flash, điều đó có nghĩa là ổ đĩa flash này chắc chắn có một hệ thống tệp. Thực tế là kernel đã tải trình điều khiển có nghĩa là nó phải có cách để tìm thấy nó ở đâu đó. Hệ thống tập tin "tìm thấy nó ở đâu đó" đạt được. Nhưng ngay cả khi kernel là nguyên khối và có mọi thứ được biên dịch, thì ít nhất bộ tải khởi động phải có cách để tìm kernel.

Về lý thuyết, bạn có thể làm điều đó mà không cần một hệ thống tệp tinh vi, chỉ cần đặt mọi thứ ở một vị trí cố định và mã cứng vị trí đó, nhưng mục đích đó sẽ phục vụ cho mục đích gì? Và chúng tôi không nói về các tệp dữ liệu của bạn như e-mail và mọi thứ khác. Không có hệ thống tập tin, không có cách nào để lưu trữ (và sau đó tìm thấy) chúng. Ngay cả khi bạn không muốn lưu trữ bất kỳ tệp nào, HĐH không chỉ là kernel, nó bao gồm các dịch vụ khác nhau và các chương trình đất người dùng được lưu trữ trong các tệp.

Để làm cho một câu chuyện dài ngắn, bạn phải có một hệ thống tệp ở đâu đó, vì nếu kernel không tìm thấy (như trong ví dụ của bạn) thì nó hoảng loạn (như nhật ký của bạn hiển thị) - có nghĩa là nó từ chối làm bất cứ điều gì. Nhưng nếu chạy cài đặt linux ra khỏi ổ đĩa flash (có hệ thống tệp) phù hợp với nhu cầu của bạn, thì bạn không cần hệ thống tệp trên đĩa hoặc bất kỳ nơi nào khác.


1
Hệ điều hành Unixy sử dụng hệ thống tập tin không chỉ là dữ liệu liên tục. Có những cây impersistent (devfs, /proc, /sys...), nó là xương sống của hầu hết các điều khiển truy cập, vv
Warren Young

/ Proc và / sys chỉ là người trợ giúp, hệ thống có thể - về nguyên tắc - hoạt động tốt mà không có họ. / sys là dành riêng cho linux, / Proc có thể được thay thế bằng một cái gì đó giống như sysctl như FreeBSD.
biện pháp đối phó

0

Nếu bạn muốn HĐH Linux hoạt động thì nó phải có một hệ thống tệp.

Nhưng không có yêu cầu rằng hệ thống tập tin phải nằm trên đĩa cứng (hoặc SSD, v.v.). Trong thực tế, thậm chí không có yêu cầu nào về Linux trên thiết bị.

Bạn có thể sử dụng giao thức BOOTP để tải HĐH qua mạng. Bạn cần khá nhiều RAM mặc dù điều này có hiệu quả. Bộ tải khởi động là một ROM tiêu chuẩn trên card mạng. Mọi thứ khác được chuyển qua mạng và được lưu trữ trong Hệ thống tệp ảo được tạo trong RAM.

Tuy nhiên, đối với một thiết bị chuyên dụng, tốt hơn là cài đặt bộ nhớ flash tương đương với đĩa USB Live Boot và chạy chương trình của bạn từ đó. Có vẻ như bạn đã cố gắng để làm một cái gì đó như thế. Khi chạy từ Flash Disk hoặc ROM, Hệ thống tệp ảo cũng được tạo trong RAM, nhưng sau đó bạn cần ít RAM hơn nếu sử dụng phương pháp BOOTP.

Không giống như Ubuntu, Debian sử dụng hình ảnh Hybrid Boot có thể được sao chép trực tiếp vào đĩa flash USB bằng dd, bạn có thể thấy việc này dễ dàng hơn để làm việc, đặc biệt vì Ubuntu yêu cầu sử dụng một chương trình đặc biệt để tạo USB có thể khởi động và chương trình đó là hơi lỗi.

Bạn có thể thêm các chương trình của riêng mình vào hình ảnh HĐH bằng nhiều công cụ khác nhau để gắn ISO dưới dạng hệ thống tệp đọc / ghi. Bạn có thể sử dụng RC.local để khởi động chương trình, nhưng hãy cẩn thận khi RC.local được chạy nhiều lần trong khi khởi động. Bạn cũng có thể tạo tập lệnh /etc/init.d/ nhưng điều đó phức tạp hơn.

Tóm lại: Chương trình của bạn không cần hệ thống tệp, nhưng HĐH thì không, tuy nhiên không cần đĩa thực / vật lý.


0

Các máy tính trước đó (và một số hệ thống nhúng hiện đại) không có hệ thống tệp. Apple của tôi] [(và Commodore PET của trường) đã có HĐH trong ROM và sẵn sàng lăn khoảng 2 giây sau khi khởi động lạnh. Bạn muốn tải phần mềm? Nhập nguồn theo cách thủ công hoặc nhập LOAD, nhấn enter và sau đó CHƠI trên máy băng. Sau đó, chúng tôi có một ổ đĩa - và có rất nhiều niềm vui.

Tuy nhiên, cốt lõi của linux giả định có một hệ thống tập tin và hầu hết mọi thứ khác đều được xây dựng trên đó. Nếu bạn muốn triển khai một hệ điều hành không có hệ thống thực sự thì chắc chắn là có thể, nhưng cả phần cứng và hệ điều hành của bạn sẽ phải được xây dựng xung quanh khái niệm này.

Phương pháp của Apple là kết nối hệ điều hành trong 16k bộ nhớ cuối cùng, bộ xử lý (MC6502) được thiết lập để nhảy đến vị trí được lưu trữ vĩnh viễn trong 2 byte bộ nhớ cuối cùng.


-3

Không, linux không cần phải có một hệ thống tập tin theo nghĩa rất nghiêm ngặt. Trong trường hợp của bạn, bạn có một vấn đề khác.

"Không có hệ thống tập tin nào có thể gắn kết root, đã thử: jffs2" "Thiết bị MTD: MTD có tên" jffs2 "không tìm thấy."

Tôi đoán là một phần của quá trình tải hoặc không tìm thấy / nơi để gắn kết hoặc không có khả năng gắn kết hệ thống tập tin đó.


2
Câu trả lời của bạn nói rằng "bạn không cần một hệ thống tập tin nhưng vấn đề của bạn là bạn cần một hệ thống tập tin". Nó không có ý nghĩa và không nhất quán trong nội bộ.
casey

Tôi không hiểu điều này ... lỗi đó là do không có hệ thống tập tin để gắn kết, bởi vì anh ta không có hệ thống tập tin. Công cụ tìm kiếm đang hoạt động tốt, anh ta không có fs hợp lệ trên đĩa flash của mình.
Vality
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.