我有一些我想模擬的硬件;我想知道我是否可以在這樣的低水平上做到這一點。硬件有許多寄存器,這是我在一個結構安排:如何模擬內存映射I/O
#include <stdint.h>
struct MyControlStruct
{
uint32_t data_reg_1;
uint32_t data_reg_2;
uint32_t dummy[2]; // to make the following registers have certain addresses
uint32_t control_reg_1;
uint32_t control_reg_2;
};
volatile struct MyControlStruct* MyDevice = (struct MyControlStruct*)0xDeadF00;
所以,我想,以支持在Windows硬件訪問和linux的語法如下:
MyDevice->data_reg_1 = 42;
MyDevice->data_reg_2 = 100;
MyDevice->control_reg_1 = 1;
當代碼的最後一行被執行,我想讓硬件模擬器「醒來」並做一些事情。我可以在Windows和/或Linux上實現這個嗎?我想過要捕捉「分段故障」信號,但不知道這是否可以在Windows上完成,或者根本不知道。
我看了一下手冊頁mmap
;它似乎可以幫助,但我不明白我可以如何使用它。
當然,我可以通過定義諸如WriteToMyDevice
之類的函數來抽象化硬件訪問,並且一切都很容易(也許),但是我想了解我是否可以以這種確切方式安排訪問我的硬件。
您的「低級別」過高......在Windows和Linux硬件訪問都是從內核模式完成的。你需要考慮更多的實現細節 - 如何與硬件進行交流。例如,您可以編寫真實的驅動程序和驅動程序仿真。 –
那麼,在用戶模式下使用預定義的內存地址是不可能的? – anatolyg
您無法直接與使用直接內存訪問的Windows/Linux用戶模式硬件設備進行通話。這隻有在內核模式下才有可能。這就是爲什麼我建議你先考慮實施細節。沒有他們,你實際上不知道該效仿什麼。 –