91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用QEMU搭建Linux kernel開發調試環境

發布時間:2021-08-31 11:01:21 來源:億速云 閱讀:581 作者:chen 欄目:互聯網科技

本篇內容主要講解“怎么用QEMU搭建Linux kernel開發調試環境”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用QEMU搭建Linux kernel開發調試環境”吧!

1. 編譯內核

內核需要事先編譯出來,這里展示的是通用的內核編譯方法。

內核目錄下選擇通用配置文件:

 cp arch/x86/configs/x86_64_defconfig .config

調整內核配置文件適配當前內核版本:

make menuconfig

編譯內核文件:

make bzImage

2. 生成根文件系統

這一步是最重要的,生成一個調試環境的文件系統。這里介紹四種方法。

2.1 制作busybox根文件系統 (方法一)

busybox是一個輕量級的工具集合,包含了init和大部分常用的Linux工具。官網:https://busybox.net 。

這個方法編譯出來的根文件系統是最小的,起動速度也是最快的。就是自帶工具可能比較少,有些東西需要自己編譯。

2.1.1 創建鏡像文件

創建raw格式的鏡像文件:

qemu-img create -f raw disk.raw 512M
mkfs -t ext4 ./disk.raw

把raw文件掛載到臨時目錄:

sudo mount -o loop ./disk.raw ./img
2.1.2 安裝模塊

進入內核目錄,把內核里的模塊安裝進文件系統:

sudo make modules_install \ # 安裝內核模塊
INSTALL_MOD_PATH=./img # 指定安裝路徑
2.1.3 busybox

下載busybox的源碼,編譯之前需要配置。busybox的配置方式和內核類似:

cd busybox
make defconfig
make menuconfig

調整其中以下選項,編譯包含靜態庫:

Busybox Settings --->

--- Build Options
[*] Build BusyBox as a static binary (no shared libs)

然后編譯busybox,這里的path_to_disk_img_mount_point就是剛才raw文件掛載的臨時目錄:

make CONFIG_PREFIX=<path_to_disk_img_mount_point> install
2.1.4 創建系統文件

配置init環境:
根目錄下手工創建etc/init.d, dev, proc, sys 這三個目錄。
/etc/inittab:

::sysinit:/etc/init.d/rcS
::askfirst:/bin/ash
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init

/etc/init.d/rcS:

#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys

并把/etc/init.d/rcS改為可執行文件。

2.1.5 內核啟動腳本

正常啟動內核:

qemu-system-x86_64 \
-m 512 \
-kernel ../kernel/arch/x86_64/boot/bzImage \
-drive format=raw,file=./disk.raw \
-append "init=/linuxrc root=/dev/sda rw"

查看內核串口輸出:

qemu-system-x86_64 \
-m 512 \
-kernel ../kernel/arch/x86_64/boot/bzImage \
-drive format=raw,file=./disk.raw \
-append "init=/linuxrc root=/dev/sda rw console=ttyS0" \
-serial file:./serial.out

2.2 用ISO文件制作debian文件系統 (方法二)

這個方法類似于虛擬機安裝系統,利用系統自帶的安裝引導程序生成文件系統。這樣安裝出來的是一個完整的debian,可以用apt安裝工具。

2.2.1 生成鏡像文件

生成raw鏡像文件:

qemu-img create -f raw debiam-10G.img 10G

安裝debian:

qemu-system-x86_64 -m 512 -boot d -hda ./debiam-10G.img -cdrom iso/debian-9.4.0-amd64-netinst.iso
2.2.2 內核啟動腳本
qemu-system-x86_64 -m 512 -boot c -kernel ../kernel/arch/x86_64/boot/bzImage -append root=/dev/sda1 -hda ./debiam-10G.img -hdb ./fat.img -net nic -net user,hostfwd=tcp::10022-:22

2.3 用debootstrap制作Debian根文件系統 (方法三)

這方法是利用debian官方的debootstrap,把debian裝在本機的一個目錄里。這個系統也是完整的debian。

2.3.1 生成鏡像文件

生成raw鏡像文件:

qemu-img create -f raw debiam-10G.img 10G

掛載文件系統:

sudo mount -o loop ./debiam-10G.img ./img
2.3.2 安裝debian

安裝debian,這里的path_to_disk_img_mount_point就是剛才鏡像文件的掛載點:

sudo debootstrap --arch amd64 stretch <path_to_disk_img_mount_point>
2.3.3 配置網絡

這里的網絡是主機和虛擬機之間的網絡。

讓系統啟動時自動運行dhclient:

$ cat > <path_to_disk_img_mount_point>/etc/systemd/network/eth.network <<__END__
[Match]
Name=eth0
[Network]
DHCP=yes
__END__
$ systemctl enable systemd-networkd
$ systemctl start systemd-networkd

腳本里的網絡設備名設置為eth0。不同的設備可能不一樣,比如有些電腦會叫enp0s3。具體網卡名稱可以通過ip link查看。

2.3.4 內核啟動腳本
qemu-system-x86_64 \
    -m 512 \
    -kernel ../../kernel/arch/x86_64/boot/bzImage \
    -drive format=raw,file=./debian-stretch-x86_64.img,index=0 \
    -drive format=raw,file=./../fat/fat.winxp.img,index=1 \
    --append "console=ttyS0 root=/dev/sda rw" \
    -enable-kvm \
    -nographic \
    -device e1000,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::5555-:22

系統啟動后,在本機上可以用ssh -p 5555 localhost遠程登錄虛擬機。

2.4 使用Fedora cloud image (方法四)

Fedora官方有相應的的鏡像,叫cloud image,可以直接下載:https://alt.fedoraproject.org/

修改官方鏡像的密碼:

virt-customize -a Fedora-Cloud-Base-30-1.2.x86_64.raw --root-password password:123456

修改鏡像容量大小:

qemu-img resize Fedora-Cloud-Base-30-1.2.x86_64.raw +10G
qemu-img create -f qcow2 Fedora-Cloud-Base-30-1.2.x86_64.qcow2 20G
virt-resize --expand /dev/sda1 Fedora-Cloud-Base-30-1.2.x86_64.qcow2 Fedora-Cloud-Base-30-1.2.x86_64-20G.qcow2

ubuntu 20.04使用virt-resize擴容失敗,grub會在啟動時找不到分區。只能改用在系統內擴容:

qemu-img resize ubuntu-20.04-server-cloudimg-amd64.img +10G

進入系統后動態擴大根分區:

growpart /dev/sda 1
resize2fs /dev/sda1

進入系統之后執行:

$ xfs_growfs /dev/sda1

如果程序報錯:

xfs_growfs: /dev/sda is not a mounted XFS filesystem

改為指定目錄擴容:

xfs_growfs /

啟動官方鏡像:

sudo qemu-system-x86_64 -m 512 -drive format=raw,file=./Fedora-Cloud-Base-30-1.2.x86_64.raw -nographic -enable-kvm  -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

如果要ssh登陸,需要修改/etc/ssh/sshd_config:

PermitRootLogin yes
PasswordAuthentication yes

重啟sshd服務:

systemctl restart sshd

同時禁止cloud服務:

# systemctl disable cloud-config
# systemctl disable cloud-final
# systemctl disable cloud-init-local
# systemctl disable cloud-init

3 虛擬機訪問公網

qemu的網絡配置是一個比較糾結的問題,這里用橋接的方式,只能用有線網卡,不支持無線網卡。

沒什么技巧可言,直接用腳本啟動橋接,系統中途會斷網片刻:

#!/bin/bash
ETH_DEV=enp3s0
USERNAME=myname

brctl addbr br0
ip addr flush dev ${ETH_DEV}
brctl addif br0 ${ETH_DEV}
tunctl -t tap0 -u ${USERNAME}
brctl addif br0 tap0

ip link set ${ETH_DEV} up
ip link set tap0 up
ip link set br0 up

brctl show

dhclient -v br0

與此同時,kernel的啟動腳本也要有所改變,這里以debian鏡像為例:

qemu-system-x86_64 \
    -m 512 \
    -enable-kvm \
    -kernel ../../kernel/arch/x86_64/boot/bzImage \
    -drive format=raw,file=./debian-stretch-x86_64.img,index=0 \
    --append "root=/dev/sda rw" \
    -device e1000,netdev=network0 \
    -netdev tap,id=network0,ifname=tap0,script=no,downscript=no

到此,相信大家對“怎么用QEMU搭建Linux kernel開發調試環境”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芒康县| 博罗县| 安义县| 夏邑县| 永修县| 杂多县| 武功县| 淳安县| 贵德县| 正镶白旗| 竹北市| 勃利县| 安岳县| 出国| 三门峡市| 泾阳县| 镇安县| 金华市| 祁门县| 泰州市| 安化县| 宝兴县| 宜宾市| 蒙自县| 红原县| 樟树市| 磴口县| 和静县| 云安县| 临朐县| 京山县| 沁水县| 湟源县| 沾化县| 靖州| 鲁山县| 临漳县| 古丈县| 特克斯县| 阳新县| 犍为县|