Python でメモリ マップド デバイス レジスタを操作するための優れたソリューションを思いついた人はいますか? 理想的には、完全にアドホックではない方法で、名前付きレジスタ、さらにはそれらのレジスタの名前付きビットフィールドを操作できるようにするものはありますか? 理想的にはクロスプラットフォームですが、Linux のみで生活できます。
mmap と ctypes 構造体のいくつかの組み合わせで処理できるようですが、a) 構造体ではビットフィールドの場所を指定できないようです (C でも指定できないため...)、b) できますStruct マッピングを mmap の上にドロップする方法がわかりません。
それとも、丸のこをドライバーとして使用する方法を根本的に尋ねていますか? (つまり、それはしませんし、一体なぜそうしたいのですか?)
C での例 (未テスト、使用不可) は次のようになります。
volatile struct {
uint32_t mfr_id;
uint32_t prod_id;
uint32_t ctl;
uint32_t dummy[5];
...
} * pDev;
hFile = open('/dev/bridge', O_RDWR)
pDev = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, hFile, 0);
assert(pDev->mfr_id == 0x12345678);
assert(pDev->prod_id == 0xDEADBEEF);
uint32_t temp = pDev->ctl;
temp &= CTL_ACCESS_MASK | CTL_SHIFT_MASK;
temp |= CTL_ACCESS_RO | CTL_SHIFT_5;
pDev->ctl = temp;