2009-02-14 34 views
5

Gần đây, tôi đã nghiên cứu một số mã khởi động được thiết kế để sử dụng với một ổ đĩa mềm. Mục tiêu của tôi là sửa đổi chương trình để nó sử dụng ổ USB flash của tôi. Bây giờ tôi thấy chức năng INT 13H đã được sử dụng như thế nào với thiết bị đĩa mềm, nhưng tôi đoán câu hỏi của tôi là, cách giao tiếp với ổ USB khác nhau như thế nào?Làm thế nào để thực hiện IO mức thấp với ổ flash USB trong BIOS (so với đĩa mềm)?

Ví dụ, đây là một đoạn mã mềm (GNU lắp ráp):

movb $0x00,%dl  /* select 1st floppy */ 

    /* later */ 

    movw sec,%cx  /* get sector number */ 
    movw head,%dx /* get head number */ 

    movw $0x0201,%ax /* read 1 sector */ 
    int $0x13 

Bây giờ tôi đã đọc mà di chuyển 0x80 vào% dl sẽ chọn HDD đầu tiên trong BIOS. Trong bios cụ thể của tôi tôi có thể thay đổi thứ tự ổ đĩa, trong đó sẽ bao gồm một ổ đĩa USB. Tôi khá chắc chắn điều này đang trở thành phụ thuộc BIOS, nhưng tôi đã nghĩ rằng thứ tự được liệt kê trong BIOS có thể tương ứng với giá trị tôi di chuyển vào% dl. Tôi cần theo dõi một số tài liệu ...

Tôi thực sự không quen với việc làm việc với các thiết bị khối như vậy, ai đó có thể chỉ cho tôi một nơi tốt để bắt đầu tìm hiểu thêm?

Cảm ơn!

Trả lời

0

Ổ flash chỉ khả dụng nếu BIOS hỗ trợ. Và nếu có, nó có lẽ sẽ cho phép bạn khởi động từ nó rồi. Hầu hết điều này được thực hiện bằng cách mô phỏng, vì vậy các cuộc gọi để khởi động ổ đĩa flash có thể giống nhau.

Tôi đã loại bỏ các khối khởi động từ ổ USB của mình và đã tìm thấy cả định dạng ổ đĩa mềm và đĩa cứng.

Có thể bạn chỉ nên thử một loạt các số để truy cập ổ đĩa và xem số nào trả lời.

Tôi nghĩ Google là bạn của bạn ở đây. Bắt đầu với "INT 13H". Và đặt thêm câu hỏi.

4

Câu trả lời đơn giản là nếu BIOS có thể khởi động từ ổ đĩa flash USB, các chức năng BIOS tương tự để truy cập đĩa mềm/ổ cứng có thể được sử dụng.

Câu trả lời hạnh phúc là một kỹ thuật đơn giản cho phép cùng một mã boot sector để truy cập vào một hình ảnh đĩa mềm trên một ổ đĩa USB flash dù nó được khởi động với thi đua đĩa mềm hoặc thi đua ổ cứng. Nếu dl = 80h (ổ thi đua cứng)

GET Ổ THÔNG SỐ
int 13h, ah = 8
Return:
ch = số ngành tối đa (giống như số ngành cho mỗi track)
dh = số đầu tối đa (chỉ cần thêm 1 để nhận số đầu)

Thông tin trả về này mô tả hình học của thiết bị mô phỏng (nếu là 0).Điều này có thể được sử dụng để tính toán các thông tin Cylinder Head ngành đòi hỏi cần thiết cho:

NGÀNH READ (S)
int 13h, ah = NGÀNH VIẾT 2

(S)
int 13h, ah = 3

Xem Ralf Brown's Interrupt List - int 13h

Xem bài của tôi ở đây: USB Booting Secrets

+0

OK, có loại revisited này tôi đã nhìn vào một số mã (mã làm việc) mà tải một cách rõ ràng dl = 0x00 mặc dù nó được sử dụng một ổ đĩa flash USB. Bây giờ tôi đoán đây là hành vi phụ thuộc BIOS, có lẽ BIOS khác 'sẽ không cho phép bạn xử lý ổ đĩa flash dưới dạng đĩa mềm. –

+1

Có thể và thuận tiện để khởi động và chạy hình ảnh đĩa mềm FAT12 từ ổ flash USB trên bất kỳ BIOS/phiên bản nào sẽ khởi động từ ổ flash USB. Giá trị dl phải được sử dụng. Ngay cả khi dl = 80h (sẽ là trường hợp trên tất cả các phiên bản BIOS/phiên bản muộn) hình học ổ đĩa cứng được lấy lại từ int 13h, ah = 8 có thể được sử dụng. Định dạng 1.44 MB, mặc dù hạn chế, rất nhiều để bắt đầu và phổ biến. –

3

Nếu BIOS "nhìn thấy" các thiết bị USB như một ổ cứng nó sẽ gán một số cho nó. Số được chỉ định bắt đầu ở 0x80 cho ổ đĩa cứng đầu tiên, 0x81 cho lần thứ hai, v.v. Vì vậy, tùy thuộc vào số lượng hdd được cài đặt, ổ USB của bạn sẽ ở 0x81 trở lên. Ngoài ra nếu bạn thay đổi thứ tự trong BIOS, số ổ USB sẽ thay đổi để phản ánh điều này.

+0

Thực sự đã giúp. Ngoài ra, không phải là một số BIOS gắn nhãn ổ flash 0x80 trực tiếp, theo [câu hỏi của tôi] (http://stackoverflow.com/questions/4703595/nasm-load-code-from-usb-drive). – new123456

+0

Thay vào đó, ** lưu ý ** (nút chỉnh sửa vắng mặt rõ ràng). – new123456

Các vấn đề liên quan