Mona/仮想化/03.virtio probe


Top / Mona / 仮想化 / 03.virtio probe

03.virtio probe

device の probe

virtio-console は PCI のデバイスとして export されているので普通に見つかる。

PciInf pciInf;
Pci pci;
pci.CheckPciExist(PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_DEVICE_ID_VIRTIO_CONSOLE, &pciInf);

if (pciInf.isExist) {

   _printf("device found\n");
   _printf("base=%x\n", pciInf.baseAdress & ~1);
   _printf("irqLine=%x\n", pciInf.irqLine);

} else {

   _printf("device not found\n");

}
}

このベースアドレスを基準に各 virtio device に対して read/write できる。

_printf("%x", inp32*1;

利用可能なのは

VIRTIO_PCI_HOST_FEATURES
VIRTIO_PCI_GUEST_FEATURES
VIRTIO_PCI_QUEUE_PFN
VIRTIO_PCI_QUEUE_NUM
VIRTIO_PCI_QUEUE_SEL
VIRTIO_PCI_STATUS
VIRTIO_PCI_ISR

config

virtio-net では PCI config で mac address / status が取り出せる。

struct virtio_net_config
{

   /* The config defining mac address (6 bytes) */
   uint8_t mac[6];
   /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
   uint16_t status;

} __attribute__*2;

int main(int argc, char* argv[])
{

   PciInf pciInf;
   Pci pci;
   pci.CheckPciExist(PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_DEVICE_ID_VIRTIO_NET, &pciInf);
   if (pciInf.isExist)
   {
       _printf("device found\n");
       _printf("base=%x\n", pciInf.baseAdress);
       _printf("base=%x\n", pciInf.baseAdress & ~1);
       _printf("irqLine=%x\n", pciInf.irqLine);
       struct virtio_net_config config;
       for (int i = 0; i < sizeof(config); i += 4) {
           (((uint32_t*)&config)[i / 4]) = inp32((pciInf.baseAdress & ~1) + VIRTIO_PCI_CONFIG + i);
       }
       printf("config.mac= %x:%x:%x:%x:%x:%x\n", config.mac[0], config.mac[1], config.mac[2], config.mac[3], config.mac[4], config.mac[5]);
   } else {
       _printf("device not found\n");
   }
   return 0;

}

qemu 起動オプション

% qemu -virtioconsole stdio -net nic,model=virtio -cdrom /home/taro/mona/tool/mkimg/mona.iso -fda /home/taro/mona/tool/mkimg/mona.img -boot d

思い出せない

取り出した baseAdress & ~1 するのはなぜだっけか?思い出せない。

id:Yamami さんならご存じかな。
todo

   * virtio queue の利用方法が分からない
         o pfn って何?これが鍵か?

コメント

コメントはありません。 コメント/Mona/仮想化/03.virtio probe?

お名前:

MENU

now: 4

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 1878, today: 1, yesterday: 0

*1 pciInf.baseAdress & ~1) + VIRTIO_PCI_HOST_FEATURES
*2 packed

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2009-05-05 (火) 19:17:41 (3486d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.038 sec.