真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用QEMU搭建Linuxkernel開發(fā)調(diào)試環(huán)境

本篇內(nèi)容主要講解“怎么用QEMU搭建Linux kernel開發(fā)調(diào)試環(huán)境”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么用QEMU搭建Linux kernel開發(fā)調(diào)試環(huán)境”吧!

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出修水免費(fèi)做網(wǎng)站回饋大家。

1. 編譯內(nèi)核

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

內(nèi)核目錄下選擇通用配置文件:

 cp arch/x86/configs/x86_64_defconfig .config

調(diào)整內(nèi)核配置文件適配當(dāng)前內(nèi)核版本:

make menuconfig

編譯內(nèi)核文件:

make bzImage

2. 生成根文件系統(tǒng)

這一步是最重要的,生成一個(gè)調(diào)試環(huán)境的文件系統(tǒng)。這里介紹四種方法。

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

busybox是一個(gè)輕量級(jí)的工具集合,包含了init和大部分常用的Linux工具。官網(wǎng):https://busybox.net 。

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

2.1.1 創(chuàng)建鏡像文件

創(chuàng)建raw格式的鏡像文件:

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

把raw文件掛載到臨時(shí)目錄:

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

進(jìn)入內(nèi)核目錄,把內(nèi)核里的模塊安裝進(jìn)文件系統(tǒng):

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

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

cd busybox
make defconfig
make menuconfig

調(diào)整其中以下選項(xiàng),編譯包含靜態(tài)庫:

Busybox Settings --->

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

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

make CONFIG_PREFIX= install
2.1.4 創(chuàng)建系統(tǒng)文件

配置init環(huán)境:
根目錄下手工創(chuàng)建etc/init.d, dev, proc, sys 這三個(gè)目錄。
/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改為可執(zhí)行文件。

2.1.5 內(nèi)核啟動(dòng)腳本

正常啟動(dòng)內(nèi)核:

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"

查看內(nèi)核串口輸出:

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文件系統(tǒng) (方法二)

這個(gè)方法類似于虛擬機(jī)安裝系統(tǒng),利用系統(tǒng)自帶的安裝引導(dǎo)程序生成文件系統(tǒng)。這樣安裝出來的是一個(gè)完整的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 內(nèi)核啟動(dòng)腳本
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根文件系統(tǒng) (方法三)

這方法是利用debian官方的debootstrap,把debian裝在本機(jī)的一個(gè)目錄里。這個(gè)系統(tǒng)也是完整的debian。

2.3.1 生成鏡像文件

生成raw鏡像文件:

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

掛載文件系統(tǒng):

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

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

sudo debootstrap --arch amd64 stretch 
2.3.3 配置網(wǎng)絡(luò)

這里的網(wǎng)絡(luò)是主機(jī)和虛擬機(jī)之間的網(wǎng)絡(luò)。

讓系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行dhclient:

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

腳本里的網(wǎng)絡(luò)設(shè)備名設(shè)置為eth0。不同的設(shè)備可能不一樣,比如有些電腦會(huì)叫enp0s3。具體網(wǎng)卡名稱可以通過ip link查看。

2.3.4 內(nèi)核啟動(dòng)腳本
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

系統(tǒng)啟動(dòng)后,在本機(jī)上可以用ssh -p 5555 localhost遠(yuǎn)程登錄虛擬機(jī)。

2.4 使用Fedora cloud image (方法四)

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

修改官方鏡像的密碼:

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

修改鏡像容量大?。?/p>

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擴(kuò)容失敗,grub會(huì)在啟動(dòng)時(shí)找不到分區(qū)。只能改用在系統(tǒng)內(nèi)擴(kuò)容:

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

進(jìn)入系統(tǒng)后動(dòng)態(tài)擴(kuò)大根分區(qū):

growpart /dev/sda 1
resize2fs /dev/sda1

進(jìn)入系統(tǒng)之后執(zhí)行:

$ xfs_growfs /dev/sda1

如果程序報(bào)錯(cuò):

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

改為指定目錄擴(kuò)容:

xfs_growfs /

啟動(dòng)官方鏡像:

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服務(wù):

systemctl restart sshd

同時(shí)禁止cloud服務(wù):

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

3 虛擬機(jī)訪問公網(wǎng)

qemu的網(wǎng)絡(luò)配置是一個(gè)比較糾結(jié)的問題,這里用橋接的方式,只能用有線網(wǎng)卡,不支持無線網(wǎng)卡。

沒什么技巧可言,直接用腳本啟動(dòng)橋接,系統(tǒng)中途會(huì)斷網(wǎng)片刻:

#!/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

與此同時(shí),kernel的啟動(dòng)腳本也要有所改變,這里以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

到此,相信大家對(duì)“怎么用QEMU搭建Linux kernel開發(fā)調(diào)試環(huán)境”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章名稱:怎么用QEMU搭建Linuxkernel開發(fā)調(diào)試環(huán)境
網(wǎng)頁地址:http://weahome.cn/article/pehjij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部