Page 217 - Hướng Dẫn Cách Phòng Thủ Và Khắc Phục Sự Cố Máy Tính
P. 217
một lúc đưỢc patch thành 36 - 36 là số sector trong một track
của ô đĩa 2.88M, set cao như vậy nhưng tuy loại ổ đĩa giá trị
thực tế sẽ khác; trích từ chú thích của người lập trình “high
doesn’t hurt but low does”.
4. Tính toán số sector trên một track. Hồi xa xưa đây
là phần nhức đầu với các bác viết bootvirus. Gần như
không có cách chính xác cái này với cái xác định FAT12 và
FAT16. Tuy nhiên cách giải quyết của mấy tay Linux
programmer này cũng hay. Lần lựa đọc các sector cao nhất
của ổ đĩa. 36 là 2.88M. 18 là 1.44M thường dùng. 15 là
1.2M đĩa to như bánh tráng và 9 là 760K cũng to như vậy
như chỉ có một mặt thôi. Có điều nếu đĩa 1.44M bị lỗi tại
sector 18, chẳng lẽ Linux lại hiểu nó là 1.2M sao :).
Lúc này Linux sẽ in dòng chữ : “Loading” lên màn hình.
5. Chương trình Setup của Linux nằm ở các sector tiếp
theo bootsector sẽ được tải lên ngay sau bootsector:
0x90200. Sô" sector cho phần Setup mặc định là 4. Mỗi lần
đọc một track nó in dấu chấm ra màn hình.
6. Tiếp theo chương trình System ở dạng nén
(compressed kernel image) sẽ được tải ở vị trí 0x10000 -
chừa 64K low memory. Kích thước mặc định là 0x7F00
tính theo đơn vị 16-bytes = 508K. Linux còn có che độ big-
kernel khi này kernel image sẽ vượt quá bộ nhớ quy ước
640K. Khi đó trong code của phần Setup có hàm
bootsect_kludge nằm tại offset 0x220 chịu trácn nhiệm tải
kernel vào bộ nhớ cao.
7. Kết thúc quá trình tải Setup và System, chương
trình Setup sẽ được thực hiện tại segment 0x9020.
Mở file: arch/i386/boot/setup.S. Đây là source code
viết bằng ngôn ngữ assembly cho Linux Setup.
1. Phần Setup này có thể được tải hỏi các loader khác
nhau bootsect.S chỉ là loader chuẩn của Linux thôi ngoài
218