GEM5制作新镜像
几乎完全参考自:https://blog.csdn.net/u012822903/article/details/64506037
-
下载所需系统的Minimal(最小版本),或者Cloud Image(云镜像),不用安装的那种
-
使用
util
目录下的gem5img.py
生成镜像:python2 util/gem5img.py init /path/to/your/img <size>
其中size表示镜像大小,一般单位为MB。根据原文,使用了root权限建立镜像。 -
挂载镜像: 先用
losetup
将文件挂载为系统可识别的设备,然后再用mount
命令挂载为磁盘分区。gem5img.py
可以自动完成这一系列工作:sudo util/gem5img.py mount /path/to/your/img /mount/folder
-
把Linux系统上的文件树复制过去,如果是压缩文件的话直接解压到根目录即可
-
设置串口作为GEM5与虚拟系统的默认通信方式: 建立
etc/init/tty-gem5.conf
:# ttyS0 - getty # #This service maintains a getty on ttyS0 from the point the system is # started until it is shut down again, unless there is a script passed to gem5. # If there is a script, the script is executed then simulation is stopped. start on stopped rc RUNLEVEL=[12345] stop on runlevel [!12345] console owner respawn script # Create the serial tty if it doesn't already exist if [ ! -c /dev/ttyS0 ] then mknod /dev/ttyS0 -m 660 /dev/ttyS0 c 4 64 fi # Try to read in the script from the host system /sbin/m5 readfile > /tmp/script chmod 755 /tmp/script if [ -s /tmp/script ] then # If there is a script, execute the script and then exit the simulation exec su root -c '/tmp/script' # gives script full privileges as root user in multi-user mode /sbin/m5 exit else # If there is no script, login the root user and drop to a console # Use m5term to connect to this console exec /sbin/getty --autologin root -8 38400 ttyS0 fi end script
-
按照目标架构,编译好m5文件放到
sbin
目录下: 由于不同架构下的编译方式可能不一样,make的时候要用-f
选项指定目标平台所对应的Makefile。 -
系统内安装应用 不知道为啥要链接三个目录,但是这里不是用
ln
,因为非系统底层的文件系统映射,并不是所有软件都能较好支持。 这里用mount
的bind选项:sudo /bin/mount -o bind /dev dev sudo /bin/mount -o bind /sys sys sudo /bin/mount -o bind /proc proc
然后用chroot来模拟对另一套文件系统的操作:
sudo chroot /path/to/mounted/root /bin/bash
这时的bash就会按照新的伪根目录进行操作了,有root权限。内核还是宿主系统的,显然。 操作完成之后要卸载镜像,在此之前需要先把上面的三个目录umount
一下。 - 关于启动
最小版本的Ubuntu内部是不含有启动内核的。一般来说,内核文件是放在
/boot
目录下的。Ubuntu的最小版本可以通过apt下载对应的内核,但是这个方法并不适用于GEM5。GEM5的启动方式是直接执行内核,因而内核必须是一个完整的文件,静态编译且保留符号才可运行,所以在镜像外部准备一个未经压缩的完整Linux内核,在启动时指定为参数即可。现在发行版提供的大多是vmlinuz
,是将原始版本vmlinux
脱去符号、再经gzip压缩后的版本,还原后由于没有符号不能用于GEM5,还原方法打算另开一文简述(已经写好了->参见这里)。所以考虑一下自己编译吧。