这里的实现有一些技巧,我们先写一个编译脚本 。注意是直接放在项目文件夹 os 中,而不是源码文件夹 src

    然后在 init.rs 中加入:

    段中。这段汇编被生成到 src/link_user.S 文件中,然后我们在 里把它导入进来。此后可以在其它地方通过 _user_img_start_user_img_end 这两个符号得知它所在的虚拟地址。

    最后让我们关注一开始的两条奇怪语句:

    这是编译脚本发送给构建工具 cargo 的特殊指令,含义是:当检测到环境变量 USER_IMG 或者它所指向的文件发生变化时,就强制重新编译。并且每次编译时,都会生成一个新的 link_user.S 文件。

    现在,我们每次更新并编译生成用户程序执行文件后,都可以放心地直接 make run 了!