qemu建立虛擬機器,gdb除錯及網路配置
阿新 • • 發佈:2019-01-08
準備: 安裝映象iso,qemu source code,安裝編譯qemu必要的庫
準備,主要參考openwrt交叉開發環境,加上常用的軟體
sudo apt-get update
sudo apt-get install gcc g++ gfortran gdb vim cscope ctags git expect openssh-server binutils patch bzip2 flex bison make autoconf automake autogen gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk libexpat1-dev zlib1g-dev libglib2.0-dev pkg-config libtool python perl numactl lrzsz libssl-dev
下面如果需要重新編譯libirt就需要安裝
apt-get install libdevmapper-dev libpciaccess-dev libyajl-dev libxml2-dev libnl-3-dev libnl-route-3-dev
重新編譯libvirt,apt-get source libvirt; ./autogen.sh --system;make
編譯qemu: ./configure --prefix="/usr" --target-list=ppc64-softmmu make make install 建立磁碟: qemu-img create -f qcow2 qemu_ppc64le_system.qcow2 50G qemu-img info qemu_ppc64le_system.qcow2 安裝:
在server 10.100.8.213上執行。
/home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le_system.qcow2 -cdrom /home/chenglin/bake/ubuntu-14.04.2-server-ppc64el.iso -boot once=d -nographic -net nic -net tap,ifname=tap0 -vnc :0
在桌面機器上開啟vncviewer(linux和ubuntu都可以)
vncviewer 10.100.8.213 5900進入安裝介面,和普通一樣安裝, 5900是預設埠
-vnc選項後面後空格,實際上是-vnc ip:port(這裡ip為空)
執行:
原始:
/home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 --enable-kvm -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le_system.qcow2 -nographic -smp cpus=32,cores=4,threads=8,sockets=1 -net nic -net tap,ifname=tap0
-vnc :0
替換kernel:
/home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 --enable-kvm -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le_system.qcow2 -nographic -smp cpus=32,cores=4,threads=8,sockets=1 -net nic -net tap,ifname=tap0
-vnc :0 -kernel /home/chenglin/source/linux-4.2.3/arch/powerpc/boot/zImage -append root=/dev/sda2
雙硬碟: /home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 --enable-kvm -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/ubuntu-ppc64le.img -hdb /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le.img -kernel /home/chenglin/source/linux-4.2.3/arch/powerpc/boot/zImage -append root=/dev/sda2 -nographic -smp cpus=32,cores=4,threads=8,sockets=1 -net nic -net tap,ifname=tap0 -vnc :0
常用的方法是配置好網路後安裝openssh-server
apt-get install openssh-server
在host裡面利用ssh登入qemuvm
ssh [email protected]
如果需要gdb debug,在啟動qemu command中加入-s -S選項。
然後另開一個cmd執行。
gdb /path/vmlinux
進入gdb console,輸入
(gdb) target remote :1234
Remote debugging using :1234
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x0001000000000000 in ?? ()
(gdb)
(gdb) c (這裡沒有打斷點,vm直接起來,可以正常用ssh登入)
Continuing.
qemu command命令視窗同步執行到vm起來,用ssh登入,我這裡的目的是debug kernel trace,可以在特定的函式打斷點然後對kprobe或者加入其它trace debug。
tar xvf linux-4.2.3.tar.xz
cd linux-4.2.3
cp /boot/configxxx .config
make menuconfig
make prepare
sudo apt-cache search linux-headers (搜尋有哪些標頭檔案)
sudo apt-get install linux-headers-4.2.0-23-generic
cd tools/perf
根據編譯perf時的Auto-detecting system features:資訊及apt-cache search搜尋匹配,安裝依賴的安裝perf依賴包:
sudo apt-get install binutils-dev libdw-dev libslang2-dev libelf-dev libaudit-dev libgtk2.0-dev libperl-dev python-dev liblzma-dev libnuma-dev libiberty-dev libssl-dev
還有一個包沒有安裝libunwind在安裝log中是OFF標誌
make
出現:
Auto-detecting system features:
... dwarf: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libaudit: [ on ]
... libbfd: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libslang: [ on ]
... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... lzma: [ on ]
make install(安裝的目錄在/home/目錄
NAT設定
NAT就是虛擬機器裡的guestOS通過host的物理網絡卡eth0,連線上網。該方法方便設定,缺點是其他機器難以訪問到guest。
要求host機器建立虛擬網絡卡tap0,guest機器和該網絡卡tap0設定為統一網段,並以tap0的地址作為閘道器,host機器上的物理網絡卡eth0為該tap0做NAT。
因此需要安裝Uml-utilites以生成虛擬網絡卡tap0,tunctl -t tap0
注:
1. 首先核心中支援tap/tuns裝置,可以通過lsmod |grep tun,檢視輸出有沒有tun,沒有的話就得重新編譯核心模組加入,這個可以從查詢相應資料
2. qemu中在啟動虛擬機器時可以自動生成一個虛擬網絡卡(-net nic -net tap,ifname=tap0,script=/etc/qemu-ipup)
3. 可以在qemu啟動時加上-net user引數,直接讓guest上網
步驟:
1. 首先在qemu啟動時,通過ipconfig查詢到其生成的虛擬網絡卡tapN,手動設定其ip
ifconfig tapN 192.168.25.1 netmask 255.255.255.0
當然也可以在/etc/qemu-ipup指令碼中刪除其他內容加入
ifconfig $1 192.168.25.1 netmask 255.255.255.0 ($1 是qemu傳遞過來的網絡卡名稱,即tap0)
別忘用 ifconfig tapN 檢視設定結果
2. 現在啟動qemu,在gusetOS裡設定網路,和tapN同一網段,網管為tapN的ip,DNS也和host機器一樣
tapN:
ip: 192.168.25.1
broadcast: 192.168.25.255
netmask: 255.255.255.0
guestOS :
ip: 192.168.25.N
broadcast: 192.168.25.255
netmask: 255.255.255.0
getway: 192.168.25.1
DNS: 參照host機器eth0的設定
相關命令 ifconfig eth0 192.168.255.123 netmask 255.255.255.0
route add default gw 192.168.25.1
設定好以後,應該gusetOS就可以和host通訊裡,ping以下host的eth0的ip看看。但是guestOS還不能上網,成裡host-only了。
3.設定NAT
這個其實就是在host裡雙網絡卡,其中eth0為tapN做NAT。
首先開啟ip轉換功能(也可以直接編輯配置檔案ip_forward=1)
echo 1 > /proc/sys/net/ipv4/ip_forward
然後開啟NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.25.0/24 -j MASQUERADE
上句的意思為將所有來自192.168.8.0/24網段的資料包,從eth0介面轉發出去
這樣虛擬機器裡的guestOS就可以上網嘍。
啟動虛擬機器
qemu -hda /imagepath -net nic -net tap,ifname=tapN
橋接設定
基本思想是host機器上,物理網絡卡eth0和虛擬網絡卡tapN建立網橋,guestOS通過tapN連線上網,這樣guestOS和host都處於物理區域網內,其他機器也可以訪問guestOS。
需要安裝以下兩個包,bridge-tils和Uml-utilites,前者用於建立橋接,後者用於生成虛擬網絡卡。
步驟:
1.刪除host上eth0的ip,建立網橋,將eth0加入到網橋中
eth0的ip為192.168.8.123,刪除之
ip addr del 192.168.8.123 dev eth0
生成網橋br0
brctl addbr br0
將eth0加入網橋
brctl addif eth0
將eth0的ip資訊配置到br0中
ifconfig br0 192.168.8.123 。。。
如果時dhcp則
dhclient dr0
2.啟動qemu虛擬機器,之後ifconfig中會出現新的tap裝置tapN,將之加入到br0中
brctl addif br0 tapN
3.虛擬機器gusetOS裡設定網路引數,和eth0最初的一樣,如果時dhcp則將自動獲取到區域網的ip,至此就可以上網嘍。
以上其實可以寫一個指令碼,可以參考下面的文章。
參考
KVM虛擬機器和QEMU
http://jianlee.ylinux.org/Computer/Software/kvm-qemu.html
VisualBox設定橋接的方法
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=172790
Qemu使用Bridge模式讓虛擬機器和主系統互訪和上網
http://www.wangchao.net.cn/bbsdetail_1611042.html
Qemu & Networking
http://ubuntuforums.org/showthread.php?t=457405
準備,主要參考openwrt交叉開發環境,加上常用的軟體
sudo apt-get update
sudo apt-get install gcc g++ gfortran gdb vim cscope ctags git expect openssh-server binutils patch bzip2 flex bison make autoconf automake autogen gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk libexpat1-dev zlib1g-dev libglib2.0-dev pkg-config libtool python perl numactl lrzsz libssl-dev
下面如果需要重新編譯libirt就需要安裝
apt-get install libdevmapper-dev libpciaccess-dev libyajl-dev libxml2-dev libnl-3-dev libnl-route-3-dev
重新編譯libvirt,apt-get source libvirt; ./autogen.sh --system;make
編譯qemu: ./configure --prefix="/usr" --target-list=ppc64-softmmu make make install 建立磁碟: qemu-img create -f qcow2 qemu_ppc64le_system.qcow2 50G qemu-img info qemu_ppc64le_system.qcow2 安裝:
在server 10.100.8.213上執行。
/home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le_system.qcow2 -cdrom /home/chenglin/bake/ubuntu-14.04.2-server-ppc64el.iso -boot once=d -nographic -net nic -net tap,ifname=tap0 -vnc :0
雙硬碟: /home/chenglin/qemu/qemu_debug_run/qemu-2.4.0/ppc64-softmmu/qemu-system-ppc64 --enable-kvm -m 50G -hda /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/ubuntu-ppc64le.img -hdb /home/chenglin/qemu/qemu_debug_kernel/qemu-dir/qemu_ppc64le.img -kernel /home/chenglin/source/linux-4.2.3/arch/powerpc/boot/zImage -append root=/dev/sda2 -nographic -smp cpus=32,cores=4,threads=8,sockets=1 -net nic -net tap,ifname=tap0 -vnc :0
常用的方法是配置好網路後安裝openssh-server
apt-get install openssh-server
在host裡面利用ssh登入qemuvm
ssh [email protected]
如果需要gdb debug,在啟動qemu command中加入-s -S選項。
然後另開一個cmd執行。
gdb /path/vmlinux
進入gdb console,輸入
(gdb) target remote :1234
Remote debugging using :1234
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x0001000000000000 in ?? ()
(gdb)
(gdb) c (這裡沒有打斷點,vm直接起來,可以正常用ssh登入)
Continuing.
qemu command命令視窗同步執行到vm起來,用ssh登入,我這裡的目的是debug kernel trace,可以在特定的函式打斷點然後對kprobe或者加入其它trace debug。
tar xvf linux-4.2.3.tar.xz
cd linux-4.2.3
cp /boot/configxxx .config
make menuconfig
make prepare
sudo apt-cache search linux-headers (搜尋有哪些標頭檔案)
sudo apt-get install linux-headers-4.2.0-23-generic
cd tools/perf
根據編譯perf時的Auto-detecting system features:資訊及apt-cache search搜尋匹配,安裝依賴的安裝perf依賴包:
sudo apt-get install binutils-dev libdw-dev libslang2-dev libelf-dev libaudit-dev libgtk2.0-dev libperl-dev python-dev liblzma-dev libnuma-dev libiberty-dev libssl-dev
還有一個包沒有安裝libunwind在安裝log中是OFF標誌
make
出現:
Auto-detecting system features:
... dwarf: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libaudit: [ on ]
... libbfd: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libslang: [ on ]
... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... lzma: [ on ]
make install(安裝的目錄在/home/目錄
主要有兩種方法,NAT和橋接
NAT設定
NAT就是虛擬機器裡的guestOS通過host的物理網絡卡eth0,連線上網。該方法方便設定,缺點是其他機器難以訪問到guest。
要求host機器建立虛擬網絡卡tap0,guest機器和該網絡卡tap0設定為統一網段,並以tap0的地址作為閘道器,host機器上的物理網絡卡eth0為該tap0做NAT。
因此需要安裝Uml-utilites以生成虛擬網絡卡tap0,tunctl -t tap0
注:
1. 首先核心中支援tap/tuns裝置,可以通過lsmod |grep tun,檢視輸出有沒有tun,沒有的話就得重新編譯核心模組加入,這個可以從查詢相應資料
2. qemu中在啟動虛擬機器時可以自動生成一個虛擬網絡卡(-net nic -net tap,ifname=tap0,script=/etc/qemu-ipup)
3. 可以在qemu啟動時加上-net user引數,直接讓guest上網
步驟:
1. 首先在qemu啟動時,通過ipconfig查詢到其生成的虛擬網絡卡tapN,手動設定其ip
ifconfig tapN 192.168.25.1 netmask 255.255.255.0
當然也可以在/etc/qemu-ipup指令碼中刪除其他內容加入
ifconfig $1 192.168.25.1 netmask 255.255.255.0 ($1 是qemu傳遞過來的網絡卡名稱,即tap0)
別忘用 ifconfig tapN 檢視設定結果
2. 現在啟動qemu,在gusetOS裡設定網路,和tapN同一網段,網管為tapN的ip,DNS也和host機器一樣
tapN:
ip: 192.168.25.1
broadcast: 192.168.25.255
netmask: 255.255.255.0
guestOS :
ip: 192.168.25.N
broadcast: 192.168.25.255
netmask: 255.255.255.0
getway: 192.168.25.1
DNS: 參照host機器eth0的設定
相關命令 ifconfig eth0 192.168.255.123 netmask 255.255.255.0
route add default gw 192.168.25.1
設定好以後,應該gusetOS就可以和host通訊裡,ping以下host的eth0的ip看看。但是guestOS還不能上網,成裡host-only了。
3.設定NAT
這個其實就是在host裡雙網絡卡,其中eth0為tapN做NAT。
首先開啟ip轉換功能(也可以直接編輯配置檔案ip_forward=1)
echo 1 > /proc/sys/net/ipv4/ip_forward
然後開啟NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.25.0/24 -j MASQUERADE
上句的意思為將所有來自192.168.8.0/24網段的資料包,從eth0介面轉發出去
這樣虛擬機器裡的guestOS就可以上網嘍。
啟動虛擬機器
qemu -hda /imagepath -net nic -net tap,ifname=tapN
橋接設定
基本思想是host機器上,物理網絡卡eth0和虛擬網絡卡tapN建立網橋,guestOS通過tapN連線上網,這樣guestOS和host都處於物理區域網內,其他機器也可以訪問guestOS。
需要安裝以下兩個包,bridge-tils和Uml-utilites,前者用於建立橋接,後者用於生成虛擬網絡卡。
步驟:
1.刪除host上eth0的ip,建立網橋,將eth0加入到網橋中
eth0的ip為192.168.8.123,刪除之
ip addr del 192.168.8.123 dev eth0
生成網橋br0
brctl addbr br0
將eth0加入網橋
brctl addif eth0
將eth0的ip資訊配置到br0中
ifconfig br0 192.168.8.123 。。。
如果時dhcp則
dhclient dr0
2.啟動qemu虛擬機器,之後ifconfig中會出現新的tap裝置tapN,將之加入到br0中
brctl addif br0 tapN
3.虛擬機器gusetOS裡設定網路引數,和eth0最初的一樣,如果時dhcp則將自動獲取到區域網的ip,至此就可以上網嘍。
以上其實可以寫一個指令碼,可以參考下面的文章。
參考
KVM虛擬機器和QEMU
http://jianlee.ylinux.org/Computer/Software/kvm-qemu.html
VisualBox設定橋接的方法
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=172790
Qemu使用Bridge模式讓虛擬機器和主系統互訪和上網
http://www.wangchao.net.cn/bbsdetail_1611042.html
Qemu & Networking
http://ubuntuforums.org/showthread.php?t=457405