一,环境
$ cat /etc/issue
Ubuntu 20.04.2 LTS n l
$ uname -a
Linux lenky-HP 5.10.0-1057-oem #61-Ubuntu SMP Thu Jan 13 15:06:11 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
二,确保软件源OK
$ sudo apt-get update
$ sudo apt-get upgrade — 这步可不做
三,准备源码
1,准备EDK2的源码
https://github.com/tianocore/edk2/releases/tag/vUDK2018
https://github.com/tianocore/edk2/releases/download/vUDK2018/edk2-vUDK2018.tar.gz
2,准备OpenSSL_1_1_0g源码
https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.zip
四,切换到Ubuntu 16.04 LTS
备注:尝试了在Ubuntu 20.04上直接编译vUDK2018,但发现需要gcc-4.8,但在Ubuntu 20.04上安装gcc-4.8比较麻烦,主要是各种依赖包难搞。所以用docker试试。
1,删除Ubuntu 20.04上自带的旧版本docker
$ sudo apt-get remove docker docker.io docker-engine containerd runc
2,安装Docker Engine-Community版本,也就是docker-ce
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable”
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world
3,安装docker-compose
$ sudo curl -L “https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose version
4,给docker添加国内镜像原
$ sudo vi /etc/docker/daemon.json $ cat /etc/docker/daemon.json { "bip": "128.128.0.1/16", "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } $ sudo systemctl daemon-reload $ sudo systemctl restart docker
registry-mirrors那一行是新加的(注意上一行末尾的逗号)。/etc/docker/daemon.json文件不存在,则新建即可。
五,创建Ubuntu 16.04的docker镜像
1,准备单独目录
$ mkdir docker-ubuntu1604
$ cd docker-ubuntu1604/
2,准备1604的源
$ vim sources.list $ cat sources.list deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
3,创建run.sh文件
$ vim run.sh $ cat run.sh #!/bin/bash /usr/sbin/sshd -D
4,创建dockerfile文件
$ vim dockerfile $ cat dockerfile # 以最新的Ubuntu镜像为模板 FROM ubuntu:16.04 # 将本目录下的sources.list作为容器的一个文件 ADD sources.list /root/sources.list # 使用阿里Ubuntu源,更新快 RUN mv /etc/apt/sources.list /etc/apt/sources.list_bak RUN cp /root/sources.list /etc/apt/sources.list RUN apt-get update # 安装vim RUN apt-get install -y vim # 安装ssh RUN apt-get install -y openssh-server RUN mkdir -p /var/run/sshd # 修改root密码,便于远程登录 RUN echo root:Software2020 | chpasswd # 配置ssh可以使用root登陆 RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # 复制配置文件到相应位置,并赋予脚本可执行权限 ADD run.sh /run.sh RUN chmod 755 /run.sh # 开放22端口 EXPOSE 22 #设置自启动命令 CMD ["/run.sh"]
5,编译Ubuntu16.04的docker镜像
$ ls dockerfile run.sh sources.list $ sudo docker build -t base_env:16.04 . $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE base_env 16.04 c3c97c924bbc 52 seconds ago 279MB hello-world latest feb5d9fea6a5 5 months ago 13.3kB ubuntu 16.04 b6f507652425 5 months ago 135MB
运气不错,一切OK,base_env成功创建。
6,启动Ubuntu 16.04的docker镜像
$ sudo docker run -d -v /home/lenky/vUDK2018-build:/home/vUDK2018-build:rw -p 12306:22 --name=vUDK2018-build base_env:16.04 6fe9be375d644169150cd7460cb87a93bc1695b7c1fd8c9d263c03c3f56781d1 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fe9be375d64 base_env:16.04 "/run.sh" 21 seconds ago Up 21 seconds 0.0.0.0:12306->22/tcp, :::12306->22/tcp vUDK2018-build
说明:
-d:表示在后台运行
-v:挂载宿主机硬盘,表示将宿主机的/home/lenky/vUDK2018-build挂载到容器的/home/vUDK2018-build目录,主要为了数据持久化。
-p:端口映射,将宿主机的12306端口映射进容器的22端口,这样访问宿主机的12306端口等于访问容器的22端口。
–name=vUDK2018-build:指定容器的名称
7,停止,重启,删除等操作
停止:
$ sudo docker stop vUDK2018-build vUDK2018-build $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
重启:
$ sudo docker start vUDK2018-build vUDK2018-build $ sudo docker restart vUDK2018-build vUDK2018-build $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fe9be375d64 base_env:16.04 "/run.sh" 25 minutes ago Up 3 seconds 0.0.0.0:12306->22/tcp, :::12306->22/tcp vUDK2018-build
删除:
$ sudo docker rm vUDK2018-build vUDK2018-build $ sudo docker start vUDK2018-build Error response from daemon: No such container: vUDK2018-build Error: failed to start containers: vUDK2018-build
删除后,名为vUDK2018-build的container就没有了,再使用需要重新执行如下类似命令:
$ sudo docker run -d -v /home/lenky/vUDK2018-build:/home/vUDK2018-build:rw -p 12306:22 –name=vUDK2018-build base_env:16.04
六,使用docker进行vUDK2018编译
1,在宿主机上用ssh连接容器的sshd
$ ssh root@127.0.0.1 -p 12306 root@127.0.0.1's password: Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 5.10.0-1057-oem x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Last login: Wed Feb 23 04:01:12 2022 from 128.128.0.1 root@44de964494ed:~#
2,在宿主机里,把edk2-vUDK2018.tar.gz和openssl-openssl_1_1_0g.zip拷贝到/home/lenky/vUDK2018-build,然后在docker容器的/home/vUDK2018-build目录就能看到这两个源码包了。
# pwd /home/vUDK2018-build # ls edk2-vUDK2018.tar.gz openssl-openssl_1_1_0g.zip
【备注】以下操作都在docker容器里进行。
3,安装编译工具
# apt-get install build-essential uuid-dev iasl git gcc-4.8 nasm make python2.7 unzip
说明:Gcc需要安装4.8,Python需要安装2.x,高版本会导致后续编译出错。
# update-alternatives –list python
# ls /usr/bin/python*
# update-alternatives –install /usr/bin/python python /usr/bin/python2.7 1
# python –version
Python 2.7.12
说明:确保默认Python为2.x版本。
4,解压&准备源码
# tar xf edk2-vUDK2018.tar.gz
# unzip openssl-openssl_1_1_0g.zip
# ls openssl-OpenSSL_1_1_0g/
# ls edk2-vUDK2018/CryptoPkg/Library/OpensslLib/openssl/
# mv openssl-OpenSSL_1_1_0g/* edk2-vUDK2018/CryptoPkg/Library/OpensslLib/openssl/
5,编译BaseTools
# cd edk2-vUDK2018/BaseTools/
# make clean
# make -C ./
6,编译开放虚拟机固件OVMF(X64架构)
# cd ..
# source edksetup.sh BaseTools
# build -a X64 -t GCC48 -p OvmfPkg/OvmfPkgX64.dsc
7,在宿主机里,使用qemu运行固件
$ pwd
/home/lenky/vUDK2018-build/edk2-vUDK2018
$ qemu-system-x86_64 -bios Build/OvmfX64/DEBUG_GCC48/FV/OVMF.fd -M pc -m 256 -cpu qemu64 -vga cirrus -name UEFI -boot order=dc
等好一会,就会进入到一个Shell界面,输入exit即可进入到uefi配置界面。
可以Ctrl+Alt组合键来退出Qemu界面,但我没试成功,只能按Ctrl+Alt+F2进入控制台文本界面,kill掉qemu进程,再按Ctrl+Alt+F7回到图形界面。
参考:
https://blog.csdn.net/shangyexin/article/details/103910923
https://ay123.net/share/668/
https://blog.csdn.net/qq_28643619/article/details/105097059
https://blog.csdn.net/qq_44929785/article/details/109446225
https://ay123.net/mystudy/uefi/955/
https://www.cnblogs.com/ruiyang-/p/10162581.html
网友评论已有0条评论, 我也要评论