本关任务是把bochs虚拟机硬盘文件改成以下形式:
第一步
把之前写的mycat.c,mysh.c和myls.c三个文件拷到/root/os/linux-0.11/b/目录下
打开虚拟机,将他们拷进虚拟机,并编译生成可执行文件
[/usr/root]# mdir b:mycat.c
[/usr/root]# mcopy b:mycat.c .
[/usr/root]# mdir b:mysh.c
[/usr/root]# mcopy b:mysh.c .
[/usr/root]# mdir b:myls.c
[/usr/root]# mcopy b:myls.c .
[/usr/root]# gcc mycat.c -o mycat
[/usr/root]# gcc mysh.c -o mysh
[/usr/root]# gcc myls.c -o myls
第二步
按照要求修改文件结构,这里注意,原先的/usr/bin这个文件夹必须最后处理,因为里面包含了我们操作需要用到的命令,如果将它删除,许多命令就用不了了
完成第一步后,文件目录如下:
先把mycat、myls移到/usr/bin下,把mysh移到/bin下:
[/usr/root]# mv mycat /usr/bin/mycat
[/usr/root]# mv myls /usr/bin/myls
[/usr/root]# mv mysh /bin/mysh
再删除多余的文件:
[/bin]# rm bash fdisk ...(只留下mysh)
[/dev]# rm fd0 ...(只留下tty0)
[/etc]# rm gruop ...(只留下rc)
[/]# rm -r root //-r表示递归删除,可用于删除整个文件夹
[/]# rm -r tmp
[/usr]# rm -r include
[/usr]# rm -r local
[/usr/root]# rm a.out mycat.c myls.c mysh.c
注意先别处理/usr/bin
第三步
按要求修改rc文件,利用uemacs命令,这里就不赘述了
第四步
处理/usr/bin,先删除除了mycat,myls,rm,sync的其他命令,然后执行sync命令,保证我们之前的修改都是有效的,再删除sync,这里有一个bug,既然删除了sync,那该如何保证删除sync这条命令以及之后的命令是有效的呢?(其实亲测/usr/bin下留下sync和rm也是可以过关的)最后再删除rm(我删除我自己?)
[/usr/bin]# rm ...
[/usr/bin]# sync
[/usr/bin]# rm sync
[/usr/bin]# rm rm
第五步
经过以上步骤,文件就处理完了,现在要做的就是修改内核代码,以免运行时报错
用vscode打开版本0内核的main.c文件,修改其中的main函数,把所有的/bin/sh修改成/bin/mysh(现在用的是我们自己写的sh了),同时按照左边教程的提示,增加一个环境变量PATH=/usr/bin(注意envp_rc和envp数组都要改)
最后启动虚拟机验证即可