一、Prepare
-
Download and decompress an Ubuntu ISO image.
//最好新建一个文件夹在其文件夹下面解压 mkdir fenglin cd fenglin 7z x ****.ISO -
Enter the casper file, there should be an initrd.lz, an vmlinuz.efi, and filesystem.squashfs. They are the files we need to modify.
cd casper/
二、Update squashfs
-
Decompress filesystem.squashfs
unsquashfs filesystem.squashfs -
进行挂载
mount --bind /run ./squashfs-root/run mount --bind /dev ./squashfs-root/dev mount --bind /proc ./squashfs-root/proc mount --bind /sys ./squashfs-root/sys -
切换成root
chroot ./squashfs-root -
备份一个本机的源,后面还要更改回来,并更新
cd etc/apt/ mv sources.list sources.list.bak //备份一个本机的源 //重新登录host主机将在Tools目录下将source.list拷贝到casper这个系统 cp /Tools/18.04-sources.list fenglin/casper/squashfs-root/etc/apt/sources.list //拷贝一个内部Intel的源 //在casper这个系统执行 apt-get update -
安装一些必要的包
apt install vim gcc git -y -
vim /etc/environment添加:
export GIT_PROXY_COMMAND=/usr/local/bin/git-proxy.sh export no_proxy="localhost,127.0.0.1,.intel.com" export http_proxy="http://child-prc.intel.com:913/" export https_proxy="http://child-prc.intel.com:913/" export ftp_proxy="http://child-prc.intel.com:913/" -
配置git 代理
cp /Tools/git-proxy.sh fenglin/casper/squashfs-root/usr/local/bin/ source /etc/environment -
编译connect.c文件
cp /Tools/connect.c fenglin/casper/squashfs-root/usr/local/bin/connect.c gcc /usr/local/bin/connect.c -o /usr/bin/connect
三、Build Kernel
-
Install packages here
apt-get install libepoxy-dev libdrm-dev libgbm-dev spice-client-gtk libegl1-mesa-dev libgtk2.0-dev bin86 bcc iasl uuid-dev libncurses-dev libyajl-dev libc6-dev-i386 -y -
Build the initrd (initial ramdisk)
Use Ubuntu as example, modify /etc/initramfs-tools/modules, like below(加入如下命令):
vim /etc/initramfs-tools/modules kvmgt xengt vfio-iommu-type1 vfio-mdevFor Fedora or RHEL you should make the similar changes in “dracut”.
-
Build Kernel Source
在/root目录下操作最好 git clone https://github.com/intel/gvt-linux.git cd gvt-linux git checkout gvt-stable-4.17 apt install bison flex -y echo ""|make oldconfig //如果这个步骤有错需要安装依赖包 apt install bison flex -y 有错误也没事,只要出现下面的就可以了 # # configuration written to .config # -
Then make sure to enable these parameters in “.config”
CONFIG_OVERLAY_FS=y CONFIG_DRM_I915_GVT=y CONFIG_DRM_I915_GVT_KVMGT=y CONFIG_DRM_I915_GVT_XENGT=y CONFIG_XEN_PVHVM=n CONFIG_VFIO_MDEV=y CONFIG_VFIO_MDEV_DEVICE=y -
安装依赖包
apt-get install git libfdt-dev libpixman-1-dev libssl-dev vim socat libsdl1.2-dev libspice-server-dev autoconf libtool xtightvncviewer tightvncserver x11vnc libsdl1.2-dev uuid-runtime uuid uml-utilities bridge-utils python-dev liblzma-dev libc6-dev libegl1-mesa-dev libepoxy-dev libdrm-dev libgbm-dev libelf-dev libsdl2-dev -y -
生成 Kernel 并安装的两种方法
一:
make -j8 && make modules_install && make install二:If you use Ubuntu, you can generate the kernel debian package directly and install it with below commands:
make -j8 deb-pkg cd .. dpkg -i linux-image-4.17.0+_4.17.0+-2_amd64.deb //注意安装的是生成的linux-image-xxxxx
四、Build Qemu
-
Build Qemu for KVMGT
//put igvtg-qemu and igvtg-xen directory right under `/root`, otherwise some path problems would occur later cd /root git clone https://github.com/intel/igvtg-qemu cd igvtg-qemu git checkout stable-2.12.0 git submodule update --init roms/seabios ./configure --prefix=/usr \ --enable-kvm \ --disable-xen \ --enable-debug-info \ --enable-debug \ --enable-sdl \ --enable-vhost-net \ --enable-spice \ --disable-debug-tcg \ --enable-opengl \ --target-list=x86_64-softmmu make -j8 cd roms/seabios make -j8 cd - make install cp roms/seabios/out/bios.bin /usr/bin/bios.bin cd /root rm -rf igvtg-qemu -
Build Qemu & Xen for XenGT
cd /root git clone https://github.com/intel/igvtg-xen cd igvtg-xen git checkout xengt-stable-4.10 git clone https://github.com/intel/igvtg-qemu cd igvtg-qemu git checkout stable-2.12.0 cd .. sed -i 's/\(QEMU_UPSTREAM_REVISION ?= \).*/\1origin\/stable-2.12.0/g' Config.mk sed -i 's/\(QEMU_UPSTREAM_URL ?= \).*/\1file:\/\/localhost\/root\/igvtg-xen\/igvtg-qemu/g' Config.mk ./autogen.sh ./configure --prefix=/usr make -j8 xen tools make install-tools cp xen/xen.gz /boot/xen-gvt.gz -
Delete
gvt-linux, andigvtg-xendirectories. -
Delete old kernels and bash history, then exit and umount everything.
查询系统中装了多少内核 dpkg --get-selections|grep linux 多余的内核可以通过命令删除 需要删除header和image sudo apt-get remove linux-image-*.*.*-**(*号用你想删除的实际情况改写) sudo apt-get remove linux-headers-*.*.*-**(*号用你想删除的实际情况改写) 执行完上面命令后再次执行 dpkg --get-selections | grep linux 查看内核是否都删除干净了。没干净继续删除。有的内核后面会显示是deinstall 那需要通过 sudo dpkg --get-selections | grep deinstall | sed 's/deinstall/\lpurge/' | sudo dpkg --set-selections; sudo dpkg -Pa 通过上面方法就可以。 -
在
/etc/apt/目录下换成默认的sources.list,将之前 备份的改回来。 -
apt-get update -
vim /etc/environment删掉添加的:export GIT_PROXY_COMMAND=/usr/local/bin/git-proxy.sh export no_proxy="localhost,127.0.0.1,.intel.com" export http_proxy="http://child-prc.intel.com:913/" export https_proxy="http://child-prc.intel.com:913/" export ftp_proxy="http://child-prc.intel.com:913/" -
删掉
/usr/local/bin/git-proxy.sh -
删掉
/usr/bin/connect、/usr/local/bin/connect.c -
清除历史,并退出,然后取消挂载。
history -c exit umount squashfs-root/run umount squashfs-root/dev umount squashfs-root/proc umount squashfs-root/sys //不能取消挂载直接重启即可 -
拷贝/Tools/下面的grub.d 到
fenglin/casper/squashfs-root/etc/grub.d来替换.cd /Tools cp grub.d /home/fei/fenglin/casper/squashfs-root/etc/ -r -
拷贝/Tools/下面的scripts 到
fenglin/casper/squashfs-root/usr/share/script, 并且将/Tools/Launch_Guest.desktop 拷贝到fenglin/squashfs-root/usr/share/applications/.cp script /home/fei/fenglin/casper/squashfs-root/usr/share/ -r cp Launch_Guest.desktop /home/fei/fenglin/casper/squashfs-root/usr/share/applications/ -
Copy out
fenglin/casper/squashfs-root/lib/modules/$YOUR_MODULES //cp fenglin/casper/squashfs-root/lib/modules/4.17.0+ /root -r fenglin/casper/squashfs-root/usr/lib/syslinux/modules/efi64/mboot.c32 //find ./ -name mboot.c32 注意是efi64 fenglin/casper/squashfs-root/boot/vmlinuz-4.17.0+ fenglin/casper/squashfs-root/boot/xen-gvt.gz -
删除以前的filesystem.squashfs
进入 fenglin/casper下面删掉filesystem.squashfs
-
压缩现在修改好的squashfs-root
mksquashfs squashfs-root filesystem.squashfs
-
删掉
squashfs-rootrm -rf squashfs-root/
Update initrd
-
将fenglin/casper/下面的initrd.lz拷贝出来然后将拷贝出来的重命名
cp initrd.lz /root/ cd /root mv initrd.lz initrd.lzma //在目录下新建一个目录,下一步会解压很多文件出来 lzma -d initrd.lzma cpio -idmv < initrd rm initrd -
Remove
lib/modules/*, and then copy$YOUR_MODULESthere.rm -rf lib/modules/* cp ../4.17.0+ ./lib/modules/ -r -
In
scripts/casper-bottom/25adduser, around line 81, add the files you want to copy to the desktop.vim scripts/casper-bottom/25adduser for file in /usr/share/applications/ubiquity.desktop /usr/share/applications/kde4/ubiquity-kdeui.desktop \ /usr/share/script/GVT-g_Setup_Guide.md /usr/share/applications/Launch_Guest.desktop /usr/share/script/README /usr/share/script/Combined_boot.sh; do if [ -f "/root/$file" ]; then sed -i "s/RELEASE/$RELEASE/" "/root$file" chroot /root install -d -o $USERNAME -g $USERNAME /home/$USERNAME/Desktop chroot /root install -D -o $USERNAME -g $USERNAME $file /home/$USERNAME/Desktop/$(basename "$file") break fi done -
Repackage initrd.lz
find ./* | cpio -H newc -o > ../initrd lzma initrd mv initrd.lzma initrd.lz
Update files in /casper
-
用新的替换fenglin/casper下面的文件
mv vmlinuz-4.17.0+ vmlinuz.efi //更改之后就不需要修改后面的配置文件了,然后再替换到fenglin/casper下面 filesystem.squashfs //前面已经替换过 initrd.lz 注意删除fenglin/casper下面以前的vmlinuz -
在目录fenglin/casper下面添加刚刚拷贝出去的两个文件
xen-gvt.gz mboot.c32
Modify ISO GRUB
-
将/Tools下面的
grub.cfg、txt.cfg替换到如下目录,并注意修改其中的内容:切换到 fenglin目录下 cp /Tools/grub.cfg ./boot/grub/grub.cfg //注意一定是/boot下面的grub cp /Tools/txt.cfg ./isolinux/txt.cfg 按照需求修改grub.cfg //修改4处 txt.cfg //修改3处
Repackage ISO
-
将
my.bin拷贝到fenglin目录的上一层Find my.bin to support booting from ISO. -
在
fenglin目录下,利用上一层的my.bin,并将ISO文件生成到上一层目录,执行如下命令:xorriso -as mkisofs -isohybrid-mbr ../my.bin -D -r -V "Intel GVT-g" -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -o ../ISO_NAME.iso . //注意修改ISO_NAME.iso是你行要生成的ISO文件名字。
制作U盘启动,在Linux上利用Startup Disk 工具:
1. CD-Driver/image 选择制作好的ISO
2. Device 选择U盘
3. Make Startup Disk
装系统
选择 Install Intel GVT-g