2009-11-21 57 views
7

Tôi đã tự hỏi liệu có cách nào để viết chương trình C để thay đổi dung lượng bộ nhớ đang được chia sẻ giữa RAM và thẻ GFX hay nói chung làm cách nào để liên hệ với Cài đặt BIOS?Thay đổi cài đặt BIOS bằng ngôn ngữ C

+0

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.vc .language & tid = f5c02216-01e2-46d4-8c99-ac6a5981313c & cat = & lang = & cr = & sloc = & p = 1 – Xinus

+1

Tôi nghĩ điều này không tốt khi thực hiện điều đó, "Đừng làm điều đó" –

+0

Có thể gây nguy hiểm cho sức khỏe của máy. Đừng làm thế. – ty812

Trả lời

10

Câu trả lời ngắn: Số

Câu trả lời dài: Không gây rối với BIOS của người dùng. Có một lý do tại sao không có API hoặc tương tự để làm điều đó. Máy tính của tôi, cài đặt của tôi.

13

Bạn có thể truy cập cài đặt BIOS qua cổng I/O 70h và 71h. (Một số chipset cũng có CMOS mở rộng ở 72/73 hoặc tương tự.)

Bạn đang sử dụng hệ điều hành nào? Nếu bạn đang chạy Windows, bạn sẽ không thể thực hiện cổng I/O trực tiếp từ một ứng dụng, bạn sẽ phải viết trình điều khiển chế độ hạt nhân hoặc sử dụng bộ công cụ của bên thứ ba như WinIO. Trong Linux, bạn có thể sử dụng/dev/nvram để nhận các cài đặt CMOS. (Giả sử trình điều khiển nvram Linux có hỗ trợ chipset của bạn. Nếu không sử dụng/dev/port.)

Khi bạn nhận được các bit CMOS, nhiệm vụ tiếp theo sẽ tìm ra vị trí nào trong CMOS tương ứng với Cài đặt bộ nhớ video.

Đây là một (woefully không đầy đủ) bản đồ của vị trí bộ nhớ CMOS: http://ivs.cs.uni-magdeburg.de/~zbrog/asm/cmos.html

Bản đồ địa điểm CMOS là rất cụ thể cho các bo mạch chủ, BIOS, và rev BIOS. (Bản đồ CMOS có thể thay đổi giữa các vòng quay BIOS khi các tùy chọn menu mới được thêm vào/gỡ bỏ.) Có thể nhà cung cấp bo mạch chủ của bạn có thể cung cấp cho bạn bản đồ CMOS. Họ có các công cụ để tạo ra một bản đồ như vậy (nó là một phần của quá trình biên dịch BIOS), nhưng họ có thể không sẵn lòng chia sẻ nó.

Không có bản đồ, có các phương pháp khác để xác định bit nào trong CMOS đại diện cho Kích thước bộ nhớ video. Hãy thử bán các thiết lập CMOS với các kích thước bộ nhớ khác nhau và tìm ra bit nào thay đổi.

Một số chi tiết khác:

  1. Bên ngoài của một vài bit "chuẩn" CMOS, hầu hết trong số họ là cực kỳ nền tảng phụ thuộc, tôi hy vọng bạn không có kế hoạch thực hiện một ứng dụng có mục đích chung trong số này .

  2. Có tổng kiểm tra tại các khoảng bù nhất định trong CMOS. Sau khi bạn thay đổi giá trị CMOS, bạn sẽ phải sửa chữa tổng kiểm tra để phản ánh các thay đổi.

  3. Khi bạn thay đổi cài đặt, nó sẽ không có hiệu lực cho lần khởi động lại tiếp theo (khi BIOS đọc cài đặt CMOS và khởi tạo chipset).

  4. Đây có phải là chipset Intel không? Các lõi đồ họa Intel có một tính năng kỳ diệu được gọi là Công nghệ bộ nhớ video động (DVMT), điều chỉnh mức sử dụng bộ nhớ video dựa trên mức độ ứng dụng đang chạy của đồ họa. http://www.intel.com/support/graphics/sb/cs-010488.htm Tôi không chắc liệu các nhà cung cấp chipset khác có công nghệ tương tự hay không.

  5. Vứt bỏ tất cả điều này ngoài cửa sổ trên hệ thống UEFI hiện đại, thường sử dụng phân vùng lưu trữ không biến đổi trong chip flash BIOS cho cài đặt. (Một số vị trí CMOS được điền để tương thích kế thừa trên hệ thống UEFI.)

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