Файлы этого компонента находятся в подкаталоге Libpci Каталога Ехе. Этот компонент отвечает за обнаружение всех устройств PCI в системе и создание объектов для их представления. Основное приложение использует структуру данных, чтобы получить доступ к чипу ROM BIOS через южный мост системы. Этот компонент состоит из нескольких файлов, а именно — access. c, filter. c, generic. с, I386-ports. c, Header. h, internal. h и pci. h. Эта библиотека была портирована из библиотеки PCI утилиты Pciutiis Версии 2.1.11 для Linux, разработанной Мартином Мэйерсом. Чтобы уменьшить размер исходного Кода Утилиты Bios_probe, Я удалил из первоначальной библиотеки файлы, которые не нужны для нормальной работы утилиты. Подробные описания индивидуальных компонентов библиотеки приводятся в последующих подразделах. Вкратце, назначение каждого исходного файла основного приложения еле дующее: Flash_rom. c. Содержит точку входа в Bios_probe, Т. е. функцию Main. Кр° ме того, этот файл содержит процедуру вызова библиотеки PCI для разрешения доступа к чипу флэш-ROM через южный мост и массив объектов, содержащих функции поддержки чипов ROM. Для каждого типа чипа флэш-ROM имеется свой файл поддержки, реализующий обработчик данного чипа ROM. Flash. h. Содержит определение структуры данных, называющейся Flashchip. Эта структура данных хранит указатели на функции и переменные, необходимые для доступа к чипу флэш-ROM. Кроме того, данный файл содержит номер идентификатора производителя и номер идентификатора устройства чипа флэш-ROM, поддерживаемого утилитой Bios_probe. Errorjnsg. h. Заголовочный файл для процедуры, выводящей сообщения об ошибках. Errorjnsg. c. Исходный код процедуры, выводящей сообщения об ошибках. Это вспомогательная процедура, так как она не выполняет никаких операций, специфичных для утилиты Bios_probe Direct_io. h. Содержит объявления функций, связанных с драйвером устройства утилиты Bios_probe, Включая функции для прямого взаимодействия с аппаратным портом необходима задержка в 1 Миллисе Кунду. Для этих транзакций мы и откалибровали цикл на 1 миллисекунДУ Обратите внимание, что тип переменной счетчика в функции
Объявлен как Volatile, Чтобы избежать оптимизации при компилировании. Таким образом, эта переменная будет помещена в RAM. Так как при оптимиЗации Счетчик помещается в регистр, и при компиляции цикл разворачивается, возникает вероятность, что вскоре после запуска операция приращения может вызвать переполнение буфера и сопутствующие этому побочные явления.
После калибровки цикла задержки, функция main вызывает функцию initDriver, чтобы инициализировать драйвер устройства.
Рубрика: Женский интерес