Linux trên một chiếc 286?


15

Tôi không sở hữu một chiếc 286 cũng không có ý định chạy Linux trên một chiếc. Tuy nhiên, vì 286 có chế độ được bảo vệ, tại sao người ta thường tuyên bố rằng Linux yêu cầu CPU 386 trở lên?

Từ http://tuxmobil.org/286_mobile.html có vẻ như phiên bản ELKS của Linux có thể chạy trên một chiếc 286, điều này có đúng không? Những sửa đổi (nếu có) đã được thực hiện để cho phép kernel chạy trên CPU 286?

Bây giờ rõ ràng tôi hiểu rằng một hạt nhân được biên dịch cho một 386 không thể thực thi trên CPU 286, đó là 16 bit. Vì vậy, câu hỏi của tôi là, tại sao hạt nhân Linux tiêu chuẩn không thể được biên dịch cho một 286, và sau đó được thực thi trên một 286? Linux có yêu cầu hỗ trợ VM86 phần cứng không?


6
16-bit là quá mức cần thiết. 8-bit là đủ để chạy Linux. Xem dự án của Dmitry Grinberg.
Marco


Minix chạy trên 8086 (8 bit, 128KiB RAM IIRC). Xenix của Microsoft đã chạy trên 80286. Một số linh hồn mất trí đã cố gắng chuyển Linux thành 8086 (với một số thành công). Nhưng không, "trải nghiệm Linux đầy đủ" sẽ không thể thực hiện được trên một máy hạn chế như vậy.
vonbrand

Bạn có thể shoehorn Linux để chạy trên các thiết bị rất hạn chế. Nhưng điều này sẽ không hữu ích như một máy tính để bàn. Trừ khi bạn nêu rõ mục tiêu của mình, thật khó để biết liệu 'Linux trên 286' có khả thi với bạn hay không.
9000

Câu trả lời:


4

Chế độ được bảo vệ (PM) 286 khác về cơ bản với những gì mà 386 cung cấp. Hãy nghĩ về 286 PM như một nguyên mẫu, có rất nhiều thiếu sót mà hầu như không ai từng sử dụng nó, và toàn bộ mọi thứ đã được thiết kế lại hoàn toàn từ đầu cho phiên bản 386.

Nó không sử dụng mô hình bộ nhớ phẳng, nó sử dụng mô hình được phân đoạn như chế độ thực, điều đó có nghĩa là bạn phải nhảy qua các vòng để truy cập bộ nhớ trong các khối lớn hơn 64kB một lần.

Nó hoàn toàn không tương thích với tất cả các chương trình (MS-DOS) có sẵn tại thời điểm đó, vì vậy một khi bạn ở trong PM, bạn không thể sử dụng bất kỳ chương trình nào bạn đã từng sử dụng.

Bạn cũng không thể rời khỏi chế độ được bảo vệ một lần nữa trừ khi bạn khởi động lại PC, vì vậy các nhà sản xuất đã đưa ra các giải pháp sáng tạo như đặt cờ vào RAM, sau đó viết một giá trị ma thuật cho bộ điều khiển bàn phím, điều này sẽ ấn vào pin đặt lại trên CPU để khởi động lại máy móc. Điều đầu tiên BIOS sẽ làm là phát hiện cờ được thiết lập trước đó, khi đó nó sẽ quay trở lại chương trình ban đầu thay vì chạy thói quen POST, cho phép chương trình gốc tiếp tục chạy khi đã "thoát" PM.

Điều này có nghĩa là việc sử dụng 286 PM đã ngăn bạn chạy các chương trình DOS bình thường mà không cần nhiều thủ thuật. Vào thời điểm chỉ có các chương trình DOS, nó không đáng để sử dụng PM.

Vì vậy, nó đã trở nên phức tạp hơn khi làm việc với 286 PM hơn là chỉ sống mà không có nó, và dựa vào EMS và XMS để truy cập vào bộ nhớ thêm. Một số bo mạch chủ có 286 hỗ trợ chipset cho EMS để bạn có thể sử dụng tất cả bộ nhớ hệ thống bổ sung mà không cần PM.

Intel đã nhận ra những thiếu sót này và tạo ra một PM hoàn toàn mới khác trong năm 386. Mô hình bộ nhớ phẳng giúp việc truy cập bộ nhớ trong một khối lên tới 4GB đơn giản. CPU có thể ra vào PM với một vài hướng dẫn để không cần các giao thức khởi động lại vụng về. VM86 có nghĩa là hầu hết thời gian bạn thậm chí không cần thoát PM, bạn có thể chạy các chương trình DOS trong khi vẫn ở chế độ PM.

Tất cả những cải tiến này có nghĩa là 386 PM không chỉ có nhiều chức năng hơn mà còn tương thích nhiều hơn.

Nói cách khác, điểm chung duy nhất giữa chế độ được bảo vệ 286 và 386 là tên. Đây là lý do tại sao các hệ điều hành PM thường là 386 hoặc mới hơn. Thêm hỗ trợ cho 286 PM sẽ là một nỗ lực hoàn toàn độc lập, với rất ít hoặc không có mã nào có thể được chia sẻ với 386 PM hoàn toàn khác.

Ngược lại, 386 PM hoạt động theo cách tương tự cho đến lần cuối cùng của CPU 32 bit và thậm chí xa hơn nếu bạn chạy phần mềm 32 bit trên CPU 64 bit.


3

Có những phần trong kernel được viết trong assembly và chúng sẽ phải được viết lại để hỗ trợ cho 286.

Về ELKS, trong Câu hỏi thường gặp của họ, họ chỉ ra rằng đó là một tập hợp con của nhân Linux, vì vậy có lẽ họ chỉ chuyển các nhu cầu tuyệt đối.


1
Có một bộ đồng xử lý toán học cho số 286, 80287.
Renan

3

Tôi nghĩ rằng câu trả lời thực sự cho câu hỏi của tôi là:

Mỗi kiến ​​trúc CPU chính (hoặc sửa đổi chính của nó) yêu cầu một số mã hỗ trợ lắp ráp ngoài mã C.

Ngay cả khi bạn có GCC để biên dịch hạt nhân Linux thành mã máy 16 bit 286, vẫn sẽ thiếu mã lắp ráp tương thích 16 bit cần thiết.

Nói cách khác, hạt nhân tốt nhất chỉ được xây dựng một phần. Bất kỳ mã lắp ráp cụ thể nào của kiến ​​trúc sẽ không thể lắp ráp vì đơn giản là nó không được viết cho kiến ​​trúc đó.

Dựa trên điều này, tôi giả định rằng đây chính xác là những gì, ví dụ ELKS và các dự án tương tự làm khi Linux triển khai trên 286 hoặc các kiến ​​trúc khác - họ thực hiện mã hỗ trợ lắp ráp bị thiếu đó.


3

80386 hỗ trợ phân trang ngoài phân đoạn bộ nhớ trong khi 286 chỉ hỗ trợ phân đoạn bộ nhớ. Linux phụ thuộc rất nhiều vào hỗ trợ phân trang, tức là sử dụng sơ đồ bộ nhớ phẳng, về cơ bản sẽ đặt tất cả các thanh ghi phân đoạn thành 0 và sử dụng phân trang để quản lý các ứng dụng. Để chuyển Linux sang 286, trình quản lý bộ nhớ cơ bản cần thiết kế lại hoàn chỉnh để hoạt động ở chế độ phân đoạn mà không cần phân trang, điều này có thể rất nhiều công việc.


2

Linux có yêu cầu hỗ trợ VM86 phần cứng không?

Tôi không phải là người lắp ráp, nhưng theo điều này :

Là triển khai ban đầu của phần mở rộng 32 bit của kiến ​​trúc 8086, tập lệnh, mô hình lập trình và mã hóa nhị phân 8086 vẫn là mẫu số chung cho tất cả các bộ xử lý x86 32 bit, nên được gọi là x86, IA-32 hoặc i386 -chiến trúc, tùy thuộc vào bối cảnh.

Số 386 đại diện cho một tập lệnh được mở rộng từ số 286, vì vậy ai biết được cổng sẽ khó đến mức nào. Rõ ràng là hầu như không có ai bận tâm để thử nó ... Tôi đoán bạn có thể hỏi những người ELKS về điều đó.


2

Lý do lớn nhất là dự án GNU gốc nhắm vào các máy 32 bit (như máy trạm Unix giữa những năm 1980) thay vì bận tâm hỗ trợ bất cứ điều gì nhỏ hơn, vì vậy toàn bộ chuỗi công cụ GNU không phù hợp để tạo mã 16 bit. Chuyển nhân Linux sớm, lắp ráp, sử dụng nhiều phân đoạn sang 286 sẽ dễ dàng hơn bất kỳ mục tiêu chuyển nào khác - nếu GCC có khả năng tạo mã chế độ được bảo vệ 286. Nhưng việc nhắm GCC ở chế độ được bảo vệ là 286 sẽ là một dự án lớn để hỗ trợ bộ xử lý lỗi thời.


1

Gần đây, hạt nhân linux đã từ bỏ nền tảng 386 làm nền tảng được hỗ trợ và nhân Linux KHÔNG hỗ trợ bộ xử lý Intel 286..80286 không phải là cpu 32 bit, được yêu cầu để khởi động.


5
Linux ban đầu được viết vào năm 386 vào năm 1991. Đến lúc đó, 286 đã cũ và cây hạt nhân chính không bao giờ có bất kỳ mã nào được hỗ trợ để hỗ trợ cho 286.
Flukas88

Đó có thể là, nhưng câu hỏi vẫn là tại sao lại như vậy? Không phải lý do tại sao quyết định được đưa ra để giảm hỗ trợ cho 286/386 (điều này là hiển nhiên) nhưng những lý do kỹ thuật nào hỗ trợ bộ xử lý cũ như vậy có thể dễ dàng được thực hiện. Tức là tại sao kernel YÊU CẦU CPU 32 bit? Tại sao kernel không thể được biên dịch cho một 286?
ioctlvoid

Không phải kernel cũng có bộ đồng xử lý số học như yêu cầu của nó sao?
Bonsi Scott

Không, kernel hỗ trợ mô phỏng toán học, ít nhất là nó đã làm điều đó trước đây. Do đó, bạn thậm chí có thể chạy nhân Linux trên CPU với một FPU bị hỏng. Tuy nhiên, 286 vẫn hỗ trợ bộ đồng xử lý toán học, 80287.
ioctlvoid

Trong phần chỉnh sửa câu trả lời của tôi, tôi đã chỉ ra rằng việc mô phỏng được triển khai trong nhân Linux. Nó thậm chí còn được sử dụng để chuyển Linux sang S / 390 (còn gọi là Mainframe của IBM) vì nó không có đơn vị dấu phẩy động tại thời điểm nó được chuyển.
Didi Kohen

1

Linux x86 không thể dễ dàng chuyển ngược sang 80286 vì đây là bộ xử lý 16 bit và Linux x86 yêu cầu bộ xử lý 32 bit.

Cụ thể hơn, các thanh ghi trên 286 vẫn chỉ rộng 16 bit. Không có đăng ký EX có sẵn. Ngoài ra, các phân đoạn bộ nhớ và độ lệch vẫn chỉ dài 16 bit. Các chương trình vẫn phải xử lý mã và dữ liệu gần / xa.

Điều này có nghĩa là Linux / 286 sẽ cần một hạt nhân và API người dùng hoàn toàn khác so với Linux / 386. Mỗi tệp nguồn lắp ráp và nhiều tệp nguồn C sẽ cần phải được viết lại. Nó sẽ giống như sự khác biệt giữa lập trình cho Win16 so với Win32.

Nói tóm lại, bạn không thể chỉ bảo GCC biên dịch cho CPU khác. Mỗi bit mã sẽ cần phải được viết lại cho môi trường 16 bit.


1
Vui lòng xem xét việc sử dụng markdown để tăng mức độ dễ đọc.
lord.garbage

0

Từ những gì tôi đã đọc theo cách kinh điển để khiến Linux chạy trên 80286 sẽ là chạy nó trong một máy ảo. Đây là những gì Fabrice Bellard đã làm ở đây . Bạn phải tự thực hiện máy ảo hoặc cổng một.

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.