linux 内核为了在shell中,调用各种二进制文件,提供了binfmt_misc这个功能。为了实现此目的,用户需要告诉 binfmt_misc 二进制文件需要调用哪个解释器。 Binfmt_misc 会通过将文件开头的一些字节与用户提供的屏蔽指定位进行匹配,来识别二进制类型。 Binfmt_misc 还可以识别一些文件扩展名,即 .com 或 .exe 。
使用binfmt_misc需要先挂载
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
用户可以将二进制文件的配置,已字符串的形式写入/proc/sys/fs/binfmt_misc/register
字符串需要遵守一定的格式,详细见Kernel Support for miscellaneous Binary Formats (binfmt_misc) — The Linux Kernel documentation
systemd加载了一系列守护进程来实现binfmt_misc
- proc-sys-fs-binfmt_misc.automount
自动挂载单元,将binfmt_misc自动挂载在/proc/sys/fs/binfmt_misc
- proc-sys-fs-binfmt_misc.mount
挂载单元,被proc-sys-fs-binfmt_misc.automount触发
关于自动挂载单元与挂载单元的细节见
- systemd-binfmt.service
将不同路径下的配置文件,写入到register
注:
自动挂载依赖kernel config, CONFIG_AUTOFS4_FS=m,CONFIG_AUTOFS_FS=m