Làm thế nào để bắt đầu thay đổi mã nguồn linux để tạo hệ điều hành tùy chỉnh? [đóng cửa]


14

Tôi đã nghe nói rằng chúng ta có thể tùy chỉnh Linux (nói Ubuntu) theo ý muốn bằng cách thay đổi mã nguồn của nó và có thể tạo ra toàn bộ HĐH mới. Tôi đã tải xuống mã nguồn của kernel linux từ trang web www.kernel.org. Nhưng bằng cách nhìn thấy nó, tôi không thể hiểu bất cứ điều gì, có rất nhiều thư mục, tập tin trong các tập tin (theo tôi nghĩ sẽ có một chương trình lớn duy nhất). Tôi muốn làm điều này như một dự án đại học và tôi cũng muốn đóng góp cho Linux bằng cách thực hiện các thay đổi cần thiết trong đó. Nhưng sau khi đặt câu hỏi này trên một số trang web, họ nói rằng mã nguồn Linux là rất lớn. Bạn có thể thử minix. Bây giờ tôi rất bối rối.

Vui lòng cho tôi đề xuất với chi tiết về cách tôi nên bắt đầu hành trình này (thay đổi mã nguồn để tùy chỉnh Linux) với các bước cần thiết, cùng với một số sách cấp độ cho người mới bắt đầu.


Mục tiêu của bạn là gì? Bạn muốn đóng góp như thế nào?
Spidey

Để tạo hệ điều hành tùy chỉnh của riêng tôi bằng cách thay đổi mã nguồn (linux) của nó ... và để tìm hiểu cách hệ điều hành hoạt động và cũng cho vui
dubex

Hạt nhân có tên Linux không phải là Gnu / Linux (Ubuntu, Debian, RedHat, Suse, v.v. distrowatch.com ) Tuy nhiên, hầu hết mọi người nhầm lẫn sử dụng thuật ngữ Linux có nghĩa là GNU / Linux + X11 +. Tuy nhiên, Linux chỉ là một trong những hạt nhân, có thể được sử dụng với GNU và các hệ điều hành khác. Nếu bạn muốn sửa đổi Ubuntu hoặc tương tự, điều đó không giống như sửa đổi kernel có tên Linux.
ctrl-alt-delor

Câu trả lời:


29

Chào mừng bạn đến với unix.stackexchange.com!

Không có câu trả lời dễ dàng cho câu hỏi của bạn, và cho đến nay người tốt hơn tôi đã viết toàn bộ cuốn sách về chủ đề hạt nhân Linux và các hệ điều hành nói chung.

Về phạm vi của dự án: viết một hệ điều hành không phải là một nhiệm vụ đơn giản! Ngay cả một hệ điều hành tối thiểu có chủ đích như Minix cũng là một điều khá phức tạp! Để cho bạn một ý tưởng về Linux, hãy nghĩ về các chương trình C bạn đã viết cho đến nay. Các khóa học đại học trung bình có xu hướng nhiều nhất là vài nghìn dòng C. Tôi nghĩ rằng dự án năm cuối cùng của tôi là khoảng 30 dòng35.000 dòng C ++. Nhân Linux có khoảng 13.000.000 dòng mã C.

Tại sao tất cả trong các tập tin riêng biệt? Các dự án lớn được lưu trữ trong các tệp riêng biệt vì lý do hậu cần và thực tế. Chỉ cần xem xét tải một tập tin dòng 13.000.000 vào một trình soạn thảo! Trước khi giải quyết một dự án lớn như Linux, bạn chắc chắn nên trau dồi kỹ năng C của mình đến mức câu hỏi 'tại sao nhiều tệp' tự trả lời. Bạn cũng có thể đọc mã C , không chỉ viết nó. (khó hơn lúc đầu)

Bạn chắc chắn phải rất thành thạo C. Hạt nhân được duy trì bởi hàng ngàn người và bạn sẽ được gọi để hiểu các thành ngữ C cá nhân của mỗi người trong số họ (được cấp, trong các tiêu chuẩn mã hóa hạt nhân khá cứng nhắc, nhưng vẫn vậy - mọi người đều có phong cách giải quyết vấn đề của riêng họ).

Sau khi bạn nhận được C fu của mình, hãy chắc chắn rằng bạn hiểu hệ điều hành. Điều này sẽ giúp bạn hiểu mã. Không phải tất cả Linux là cần thiết. Hạt nhân thích hợp là khá nhỏ! Nó nở là gì:

  • Hàng ngàn trình điều khiển phần cứng cho các thiết bị khác nhau.
  • Các lớp trừu tượng cho các lớp thiết bị khác nhau để đơn giản hóa API và viết trình điều khiển. Ví dụ: chúng ta có VFS cho các hệ thống tập tin, lớp Sự kiện cho các thiết bị đầu vào, et cetera.
  • Số lượng mã và tệp được biên dịch có điều kiện phục vụ cho các kiến ​​trúc khác nhau chạy Linux (không phải mọi máy Linux đều là PC của Intel và một số khác biệt đáng kinh ngạc so với những gì bạn có thể mong đợi). Hạt nhân phải đối phó với những khác biệt này, và điều đó có nghĩa là nhiều mã hơn.

Một vấn đề bạn sẽ thấy ngay lập tức là các thành phần này không dễ dàng rút phích cắm, thay đổi và cắm lại với nhau. Có rất nhiều mối liên hệ. Nói tóm lại, việc thay đổi bit của kernel là khó khăn.

Lý do mọi người đề xuất Minix cho bạn rất đơn giản: đó là một hệ điều hành đầy đủ, nhưng nó không bị gánh nặng bởi nhu cầu của một hệ thống phức tạp như Linux. Mã này nhỏ, nhưng vẫn cung cấp đầy đủ chức năng. Rốt cuộc, các phiên bản đầu tiên của Linux được lấy cảm hứng từ Minix.

Chắc chắn, Minix có ít hỗ trợ phần cứng hơn những ngày này. Vậy thì sao? Đó là một lợi ích! Máy tính hiện đại ảo hóa rất tốt. Sử dụng điều đó cho lợi thế của bạn: một VM để chạy Minix rất nhẹ, nó sẽ làm cho sự phát triển trở thành một bước ngoặt.

Nếu dự án của bạn là xây dựng một hệ điều hành, bạn có thể làm điều tồi tệ hơn là bắt đầu bằng cách nghiên cứu Minix. Bạn cũng có thể muốn mua và đọc cuốn sách Minix được viết kèm theo, ' Hệ điều hành hiện đại của Andrew Tanenbaum '.

Bạn cũng nên đặt mục tiêu và xác định chính xác các điều khoản của bạn . Nếu định nghĩa riêng của bạn về HĐH là của Microsoft (HĐH có GUI và bộ phần mềm đầy đủ), bạn có thể tham gia vào một dự án rất dài! Hàng trăm ngàn người đã làm việc kể từ những năm 1960 để đưa chúng ta đến nơi chúng ta đang ở, sau tất cả.

Cuối cùng, hãy nhớ tiếng kêu chiến đấu của Nhà khoa học máy tính: ' không bao giờ phát minh lại bánh xe! '(tất nhiên chúng tôi muốn đưa ra ngoại lệ khi học, và để giải trí :))


1
[link] (www.linuxfromscratch.org) sẽ lấp đầy giấc mơ của tôi ... cảm ơn vì đã thể hiện sự quan tâm đến câu hỏi của tôi
dubex

LFS là tuyệt vời để tìm hiểu làm thế nào không gian người dùng của một hệ thống POSIX hoạt động. Theo như tôi biết thì nó đặc trưng cho Linux, vì vậy nó không giải quyết việc sửa đổi kernel theo hướng bất thường (như bạn làm khi tạo kernel của riêng mình). Nhưng điều đó nằm ngoài vấn đề, bởi vì một khi kernel của bạn rời khỏi POSIX, không gian người dùng sẽ không tương thích và sẽ phải được chuyển hoặc thực hiện lại.
Alexios

Xin lỗi vì sự hiểu lầm ... Nhưng tôi không có nghĩa là tôi sẽ tạo ra hạt nhân của riêng mình (vì tôi không có nhiều tài năng :)). Tôi muốn thay đổi mã nguồn để nó có thể trông khác với những người khác và có vẻ như đó là sự sáng tạo của riêng tôi. Ví dụ: Tôi muốn một số loại hoạt hình có âm thanh (mà tôi đã thực hiện), trên màn hình khi linux (giả sử ubfox) đang khởi động với một số phần mềm nhận dạng giọng nói được cài đặt trong đó. Một lần nữa cảm ơn.
dubex

1
Trong trường hợp đó, bạn đang tự phân phối Linux chứ không phải hệ điều hành khác. LFS công cụ phù hợp cho điều đó. Chúc may mắn!
Alexios

1
@Alexios, câu trả lời rất hay và mô tả, cảm ơn.
0xAF

7

Kiểm tra dự án Linux From Scratch . Như tên cho thấy, nó chứa tất cả các chi tiết cần thiết để xây dựng bản phân phối Linux của riêng bạn


4

Tôi nghĩ điều đầu tiên bạn cần xác định là "những thay đổi bạn muốn mang đến cho HĐH là gì". Cho đến khi bạn quyết định điều này, bạn sẽ không thực sự nhận được bất cứ nơi nào. Không có "một con đường" học tập.

Hơn nữa, tôi nghĩ bạn nên xác định rõ hơn về ý nghĩa của hệ điều hành. Một phần lớn (một phần chính) của mã nguồn Ubuntu nằm ngoài Linux. Linux chỉ là hạt nhân , (đôi khi nó được gọi là Hệ điều hành , đặc biệt là trong giới học thuật, do đó gây nhầm lẫn), và do đó, nó có công việc "đơn giản" là:

  • quản lý tài nguyên.
  • giao tiếp với phần cứng.

Bất kỳ sự thay đổi khác sẽ xảy ra trên một mức độ khác nhau, cho dù đó là các tiện ích lõi Userland (thường được gọi là utils ), GUI, các ứng dụng cơ bản của một distro vv

Tuy nhiên, nếu bạn vẫn tiếp tục học cách hack kernel, có lẽ bạn nên bắt đầu với câu hỏi này , câu hỏi được bình chọn cao nhất trên trang web này;)


xin lỗi vì không quá cụ thể trong việc đặt câu hỏi ... nhưng thực tế tôi không biết gì về tất cả những điều này một cách chi tiết. Trên thực tế tôi muốn một số loại hoạt hình (có âm thanh) trên màn hình khi linux (nói ubfox) đang khởi động ... xin vui lòng cho tôi biết về việc khám phá tất cả các lĩnh vực này và cách di chuyển xa hơn trong bất kỳ lĩnh vực cụ thể nào (giả sử gui với việc giao tiếp với phần cứng ) ...
dubex

@dubex bắt đầu với plymouth và xem các thư viện Linux để phát âm thanh. SDL_mixer có thể là một dễ dàng.
sourcejedi

2

Điều này có thể là một chút bên cạnh quan điểm, nhưng nếu bạn muốn tìm hiểu về nhân Linux và bắt đầu phát triển nó, bạn thực sự nên xem xét những người mới sử dụng kernel . Đây là một trang web cung cấp cho bạn cái nhìn sâu sắc về cơ chế hạt nhân (giống như Alexios đã làm một cách xuất sắc), nhưng cũng cho phép bạn chọn một nhiệm vụ nhỏ để xử lý (được gọi là janitor kernel). Đó là một cách tuyệt vời để học hỏi, và tôi đánh giá cao nó!

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.