Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将内核参数传递给Apple';s电喷环境_Linux_Macos_Kernel_Boot_Efi - Fatal编程技术网

Linux 将内核参数传递给Apple';s电喷环境

Linux 将内核参数传递给Apple';s电喷环境,linux,macos,kernel,boot,efi,Linux,Macos,Kernel,Boot,Efi,大家好。 我试图尽可能缩短iMac双启动OS-X和Ubuntu的启动过程。到目前为止,我设法通过苹果的EFI引导管理器直接引导grub(以及之后的Ubuntu)。我通过伪装(通过硬链接、别名、文件夹树等)grub二进制文件来实现这一点,就像苹果的固件期望引导OsX本身一样。(例如: $>sudo ln EFI/ubuntu/grubx64.efi System/Library/CoreServices/boot.efi ) 现在我正试图更进一步,那就是,消除GRUB。我知道现代Linux

大家好。 我试图尽可能缩短iMac双启动OS-X和Ubuntu的启动过程。到目前为止,我设法通过苹果的EFI引导管理器直接引导grub(以及之后的Ubuntu)。我通过伪装(通过硬链接、别名、文件夹树等)grub二进制文件来实现这一点,就像苹果的固件期望引导OsX本身一样。(例如:

$>sudo ln EFI/ubuntu/grubx64.efi System/Library/CoreServices/boot.efi
)
现在我正试图更进一步,那就是,消除GRUB。我知道现代Linux发行版确实在内核中包含了EFI存根,因此,原则上,人们可以直接引导到内核(通过EFI/UEFI固件),而不需要(辅助)引导管理器,例如GRUB2。(例如:

$>sudo ln vmlinuz System/Library/CoreSerivces/boot.efi
) 苹果的问题在于其“独特”的EFI实现。为了让Linux内核的EFI存根工作,必须能够向其传递参数(根路径、初始ram磁盘等)。好的,这可以通过使用辅助引导管理器(GRUB、rEFInd、ELILO等)轻松实现。它们确实会向EFI二进制文件传递命令行字符串,但这正是我想要绕过的。有没有办法将参数传递给任意EFI二进制文件,由苹果的EFI固件加载?(我试过使用com.apple.Boot.plist,但没有效果。) 或者,在引导过程中,是否有一些方法可以在不使用命令行的情况下(可能通过一些文本文件)将参数传递给linux内核?

Bingo!!!! 苹果的EFI正在运行,解决方案比预期的简单。不需要复杂的文件夹层次结构。 只需创建一个小的HFS+分区,复制linux内核efi存根(例如vmlinuz-3.13.0-46-generic.efi.signed),重命名文件,使其以.efi结尾(苹果的efi拒绝启动任何不以.efi扩展名结尾的文件),比如vmlinuz.efi,也复制初始ram磁盘(例如initrd.img-3.13.0-46-generic),可能会将其重命名为类似initrd.img这样更简单的名称,然后使用efibootmgr创建一个新的引导条目,如下所示(假设X是创建HFS+分区的硬盘驱动器,Y是分区本身的编号):

您还可以选择创建一个图标和一个标签,当您在按住“alt”键的同时打开系统电源时,该图标和标签将显示出来。 它工作得很好,也值得付出努力。显示驱动程序由EFI直接配置,如果通过GRUB引导,则显示不可见的详细信息

更新

在Ubuntu版本升级到16.10之后,不知何故,一切都不再有效了。X无法检测到KMS设置,因此启动时失败。幸运的是,有了Ubuntu 17.04,一切又恢复了正常。 对于内置引导管理器中显示的图标,请执行以下操作:

1) 引导到OSX

2) 以您喜欢的方式在Linux引导加载程序(在我们的示例中为vmlinuz.efi)所在的HFS+分区上挂载

3) 从网上抓取一个.icns格式的Ubuntu徽标(注意,它的大小不能超过512x512 px),并将其放在启动加载程序所在的文件夹中。它必须命名为.VolumeIcon.icns

4) 像这样祝福引导加载程序:

sudo bless --folder /Volumes/<MyBootPartitionMountPoint> --file /Volumes/<MyBootPartitionMountPoint>/vmlinuz.efi --label 'Ubuntu 17.10' 
sudobless--folder/Volumes/--file/Volumes//vmlinuz.efi--label'Ubuntu 17.10'

完成了

现在,在开机时按住alt键将启动内置的EFI启动管理器,在苹果旁边有一个漂亮的Ubuntu徽标

最后两件事

1) 为内置引导管理器设置图标的过程实际上是可选的。没什么用处。实际上,如果你试图通过点击启动管理器屏幕上的Ubuntu图标来启动Ubuntu,相关的EFI启动变量将不会被读取,因此Linux不会启动。这只不过是漂亮的赏心悦目罢了

2) 重要提示:不要忘记将root=UUID=blahblah替换为/Linux分区的真实UUID。示例代码中的这个只是一个示例


享受

Raffaele的解决方案用于在MacBookPro12,1上安装Debian Buster,但有一个警告:我必须从其他启动参数中删除
rootflags
参数,以便命令变成:

efibootmgr -d /dev/sdX -p Y -c -L "Debian (EFI-Stub)" -l /vmlinuz.efi -u "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash initrd=\initrd.img"

如何创建图标和标签,使其显示在加载程序中?我甚至不想把它展示出来。你能澄清一下吗?@AlexGoldstein嗨,Alex,很抱歉你的问题回答得很晚,但是Ubuntu版本高达16.10,X服务器停止检测KMS设置,因此X无法启动。现在,随着版本17.04的改变,X再次检测KMS设置。至于你的问题,请看我的更新。
efibootmgr -d /dev/sdX -p Y -c -L "Debian (EFI-Stub)" -l /vmlinuz.efi -u "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash initrd=\initrd.img"