Có thể cài đặt kernel Linux một mình không?


45

Tôi chỉ tò mò liệu có thể cài đặt kernel Linux một mình hay không, nếu bạn cần sử dụng một trong những hương vị. Nếu có thể, bạn sẽ làm thế nào? Tôi không cần một hướng dẫn chi tiết. Tôi chỉ muốn biết làm thế nào nó sẽ được thực hiện về mặt khái niệm. Tôi không giỏi với những thứ cấp thấp và muốn biết làm thế nào bạn có được một hệ điều hành vào máy tính. Tôi tưởng tượng nó có liên quan đến MBR.

Ồ và tôi nhận thấy rằng rất nhiều câu trả lời cho thấy một sự phân phối nhất định của một số Linux tối thiểu. Tôi có lẽ nên tuyên bố rằng tôi không tìm cách cài đặt Linux tối thiểu hoặc đơn giản. Câu hỏi này hoàn toàn là lý thuyết. Tuy nhiên, tôi thực sự đánh giá cao tất cả các câu trả lời và sẽ tham khảo chúng ngay lập tức, nếu có bao giờ tôi muốn cài đặt một Linux thực sự được cá nhân hóa.


3
Bạn có ý nghĩa gì bởi "một mình" và "hương vị"? Linux không phải là HĐH, nó là kernel, kernel không có HĐH sẽ tốt cho cái gì? Bạn đang cố gắng để tìm ra trình tự khởi động thay thế?
Caleb

3
Nếu bạn muốn hiểu làm thế nào một kernel / OS xâm nhập vào máy tính, đây là nơi để bắt đầu. Chỉ cần đảm bảo không đặt câu hỏi "người mới" ở đó, họ sẽ cắn bạn, hỏi họ về SO thay thế.
Philomath

3
Nói một mình, ý tôi chỉ là kernel, trừ giao diện người dùng và bao gồm các chương trình như OpenOffice. Theo 'hương vị', ý tôi là các bản phân phối khác nhau của linux, như ubfox, redhat, debian và mandriva. Tôi gần như không biết tôi đang nói về cái gì. Tôi đã tưởng tượng rằng nhân Linux có một số khả năng bash cơ bản như DOS. Tôi nghĩ rằng tôi có thể có ý tưởng của tôi về hạt nhân và hệ điều hành bị rối.
mổ lấy thai

4
Có bạn là họ THỰC SỰ bị rối :) Bash chỉ là một chương trình người dùng chạy như một quá trình được quản lý bởi kernel. Một hạt nhân tự nó cung cấp cho bạn không có gì ngoại trừ một nền tảng để chạy những thứ khác. Gợi ý của LFS (Linux From Scratch) trong câu trả lời của Shadur là đúng mục tiêu. Bạn sẽ tìm hiểu rất nhiều về tất cả các phần khác nhau là gì và điều gì tạo ra một bản phân phối và nơi phần nhân kết thúc và vùng đất người dùng bắt đầu bằng cách xây dựng một hệ thống đầu.
Caleb

2
Trên thực tế, DOS kernelcũng không có bất kỳ bashkhả năng cơ bản nào. Giao diện người dùng chuẩn được cung cấp bởi chương trình shell COMMAND.COM. Cách gần nhất mà bạn có thể nhận được với một kernel trần làm bất cứ điều gì hữu ích là khởi động bằng tham số kernel init=/bin/bash(giả sử Linux tối thiểu nằm trên đĩa). Như đã trả lời, nếu bạn chỉ có bộ tải khởi động và kernel, nó sẽ dừng rất nhanh khi không tìm thấy init.
StarNamer

Câu trả lời:


51

Về mặt kỹ thuật, bạn có thể chỉ cài đặt một bộ tải khởi động và kernel, nhưng ngay khi kernel khởi động, nó sẽ phàn nàn về việc không thể khởi động "init", sau đó nó sẽ chỉ ngồi đó và bạn không thể làm gì với nó.

BTW, nó là một phần của bộ tải khởi động có trong MBR. Nhân nằm ở đâu đó trên khu vực thông thường của đĩa. Bộ tải khởi động được cấu hình để biết đó là đâu, vì vậy nó có thể tải kernel và thực thi nó.


Làm thế nào bạn sẽ đặt nó vào MBR?
mổ bụng

Mỗi bộ tải khởi động đi kèm với một công cụ để tự cài đặt vào MBR. Ngoài ra còn có các công cụ thân thiện hơn như Boot-Repair ( help.ubfox.com/community/Boot-Repair ).
Shawn J. Goff

Chà, bạn có thể tạo một initramfs và nhúng nó vào hình ảnh kernel, và sau đó bạn sẽ có một hệ thống hoạt động hoàn toàn chỉ từ một tệp hình ảnh kernel :-)
Patrick

@ ShawnJ.Goff Tại sao kernel lại phàn nàn về việc không thể khởi động init, nếu chúng tôi cung cấp initramfs?
Pratik Singhal

4
@ ps06756 Nếu bạn có initramfs, đó không phải là kernel "một mình" như câu hỏi được hỏi. Nếu initramfs có init, kernel sẽ không phàn nàn.
Shawn J. Goff

18

Tôi không nghĩ bạn hiểu chính xác những gì bạn đang hỏi, nhưng bạn có thể muốn xem dự án Linux From Scratch .


LFS sẽ là một ý tưởng tốt để tìm ra cách xây dựng một hệ thống tối thiểu. Hoặc bạn có thể nhìn vào MINIX (và đọc cuốn sách ). Hoặc, để có phần giới thiệu khác (ít công việc hơn, nhưng ít thông tin hơn), hãy xem các gói được gắn thẻ Essential Essential (( aptitude search '?essential') trên Debian hoặc Ubuntu và hiểu những gì chúng làm (có nhiều hơn một chút so với mức tối thiểu).
Gilles 'SO- ngừng trở nên xấu xa'

12

Nếu bạn đang hỏi liệu bạn có thể chỉ cần cài đặt hoặc nâng cấp kernel "qua" một hệ thống hiện có mà không cần cài đặt một loạt các chương trình khác không?

Nhân Linux là một tệp nhị phân thường được đặt tên vmlinuz-x.x.x-x-nametrong bootthư mục (thường là một phân vùng nhỏ riêng biệt ở đầu ổ cứng) trong đó x's là một số phiên bản. "name" chỉ là tên được chọn cho kernel có thể được đặt tại thời gian biên dịch, bạn có thể sử dụng nó để xác định loại máy hoặc kiến ​​trúc mà kernel dành cho hoặc vì bất kỳ lý do nào khác.

Nó được tải vào lúc khởi động bởi bộ tải khởi động, thường GRUBđược gọi bằng mã khởi động trong MBR, được gọi bởi ROM ROM. Khi nó được tải, nó không "giữ mở" hoặc được bảo vệ đặc biệt. Vì vậy, bạn có thể thay thế tập tin đó bằng một kernel làm việc khác. Nhưng, GRUBcó một tính năng thú vị cho phép bạn chọn nhiều hạt nhân để khởi động. Vì vậy, sẽ rất thông minh khi thêm kernel bổ sung của bạn vào danh sách đó, nhưng hãy giữ kernel hoạt động ban đầu đã biết chỉ trong trường hợp có sự cố.

Hầu như tất cả các bản phân phối tôi tin rằng tạo một hạt nhân "mô-đun" trong đó trình điều khiển thiết bị nằm trong các tệp riêng biệt. Vì vậy, hầu hết các hạt nhân đều cần một hệ thống tập tin chứa các trình điều khiển có sẵn cho nó khi khởi động và đó là những gì một "initrd" (đĩa RAM ban đầu) hoặc "initramfs" dành cho. GRUBsẽ tải kernel tại một vị trí trong bộ nhớ và initrd ở một vị trí khác và nhảy đến kernel nói với nó ở vị trí initrd, khởi động Linux.

Trình điều khiển cũng có thể được "tích hợp" vào kernel và do đó được tự động tải và khả dụng khi bộ tải khởi động tải vmlinuzhình ảnh. Các hạt nhân có nghĩa là hoạt động trên các hệ thống khác nhau (chẳng hạn như hầu hết các bản phân phối) thường giảm thiểu những gì được tích hợp trong kernel vì phần cứng có sẵn sẽ được quét sau trong quá trình khởi động và chỉ các mô-đun đại diện cho phần cứng hiện tại sẽ được tải.

Có các công cụ để sửa đổi và tạo initrd. Debian có các công cụ hay và tôi tưởng tượng các bản phân phối khác cũng vậy.

Vì vậy, nếu bạn tải xuống một kernel mới hơn từ kernel.org và biên dịch nó để tạo một hình ảnh nhị phân kernel mới, bạn cần tạo hoặc cập nhật initrd với các trình điều khiển hoạt động với kernel đó. Các initrd cũ sẽ không hoạt động vì các trình điều khiển phải khớp với phiên bản kernel đang chạy.

Tệp initrd được đặt tên initrd.img-x.x.x.x-nametương tự như kernel và có thể được thay thế sau khi khởi động giống như kernel, và cách tốt nhất là cho biết bạn không xóa initrd hoạt động đã biết cho đến khi bạn biết bạn có thể khởi động thành công kernel + initrd mới.

Tôi hy vọng rằng cung cấp một số bối cảnh.

Nếu bạn đang tìm kiếm bản cài đặt Linux "barebones" có ít hoặc không có chương trình bổ sung nào được cài đặt cùng với nó, thì lựa chọn yêu thích của tôi luôn là cài đặt netinsthình ảnh Debian . Khá nhiều bạn chỉ có các công cụ cơ bản nhất cần thiết để chạy bảng điều khiển văn bản dòng lệnh và nanolàm trình soạn thảo văn bản.


5

Rootfs thực thi duy nhất

Hệ thống tối thiểu tuyệt đối chạy một /initchương trình như tôi đã giải thích tại Single Application Linux | Siêu người dùng

Tối thiểu Linux Live

https://github.com/ivandavidov/minimal

Đối với một hệ thống tương tác thú vị hơn, đây là một kịch bản nhỏ (chủ yếu là giáo dục):

  • tải nguồn cho kernel và busybox
  • biên dịch chúng
  • tạo ra ISO 8Mb có thể khởi động cùng với chúng

ISO sau đó để bạn trong một vỏ tối thiểu với busybox.

Với QEMU bạn có thể dễ dàng khởi động vào hệ thống.

Tôi đã sửa đổi nó để cho phép chạy nó từ thư mục nguồn kernel: https://github.com/cirosantilli/runlinux

Sử dụng:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

và bạn sẽ được để lại bên trong Cửa sổ QEMU cùng với hệ thống tối thiểu mới. Tuyệt vời.

Vì nó nhỏ, đây là một lựa chọn tốt để đọc nguồn và hiểu những gì đang xảy ra.

Đã thử nghiệm trên Ubuntu 16.04.

Xây dựng

https://buildroot.org/

Tập hợp lớn các tập lệnh Makefile quản lý:

  • Công cụ biên dịch chéo GCC
  • biên dịch kernel
  • trình biên dịch bootloader
  • thế hệ rootfs
  • có hàng tấn công thức tải xuống / xây dựng gói trong cây nguồn, bao gồm những thứ phức tạp như GTK. Có một hệ thống phụ thuộc.

Ví dụ tối thiểu:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user
# You are now in a shell with BusyBox utilities.

Nó thậm chí còn có các công thức để xây dựng X11 từ đầu: Làm cách nào để cài đặt X11 trên hệ thống Linux Buildroot của riêng tôi?

Công cụ chuyên nghiệp.

Núi cao Linux

https://github.com/gliderlabs/docker-alpine

Phân phối nhúng với trình quản lý gói cung cấp các tệp nhị phân được biên dịch sẵn từ một trang web.

Xem thêm


3

Tôi muốn đề nghị thứ hai của Shadur, bạn nên làm bẩn tay Linux từ đầu.
Ngoài ra, một cái gì đó tương tự, hãy thử Pocket Linux .

Hướng dẫn Pocket Linux trình bày cách xây dựng một hệ thống GNU / Linux nhỏ dựa trên bàn điều khiển chỉ sử dụng mã nguồn và một vài đĩa. Nó được dành cho người dùng Linux, những người muốn hiểu sâu hơn về cách hệ thống của họ hoạt động bên dưới lớp vỏ của các tính năng và công cụ cụ thể phân phối.


2
Mặc dù lưu ý rằng không ai trong tâm trí của họ khuyến nghị / hoặc / LFS hoặc PocketLinux cho bất kỳ loại nhiệm vụ sản xuất quan trọng nào - chúng tốt cho việc tìm hiểu cách thức hoạt động của công cụ, nhưng có một lý do hầu hết các bản phân phối đi kèm với một bộ công cụ và tiền đề đầy đủ cho hầu hết mọi thứ.
Shadur

3

Có thể cài đặt kernel Linux mà không cần các công cụ không gian người dùng thông thường. Điều này thường được thực hiện trong các hệ thống nhúng như bộ định tuyến. Thông thường, kernel được tải từ ROM hoặc bộ nhớ Flash và đã được tùy chỉnh cho thiết bị được đề cập (thường là với các trình điều khiển được yêu cầu được biên dịch vào kernel thay vì được tải dưới dạng mô-đun).

Ít nhất một chương trình không gian người dùng cần tồn tại, để trở thành quy trình 'init' (không nhất thiết phải được gọi init, nhưng được khởi động bởi kernel như quy trình 1 và cha mẹ tự động của bất kỳ quy trình mồ côi nào) - trừ khi kernel đã được sửa đổi (thay vì hơn chỉ đơn giản là tùy chỉnh) để không yêu cầu này.

Chắc chắn không cần thiết phải có vỏ để có một thiết bị chạy Linux hoạt động, mặc dù nó có thể giúp phát triển dễ dàng hơn nhiều!


2

Nhiều distro cung cấp cài đặt "cốt lõi". Đây là cái bạn muốn. Xem ubfox-Minimal, debian net-install, archlinux (mặc định chỉ là cốt lõi).

Các câu trả lời khác hữu ích nếu bạn muốn tìm hiểu, nhưng đó có thể không phải là trường hợp = p

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.