使用GRUB引导Android,但是如何?


9

我有一个小问题。我有七个分区:

Device    Boot   Begin       End         Blocks     Id   System
/dev/sda1   *      206848   219013119   109403136    7  HPFS/NTFS/exFAT     <-- wINDOWS 7
/dev/sda2       219013120   735516671   258251776    7  HPFS/NTFS/exFAT     <--Musik,....
/dev/sda3       735516672   815638527    40060928    7  HPFS/NTFS/exFAT     <-- Android
/dev/sda4       815640574   976771071    80565249    5  Erweiterte          <-- No Idea:D
Partition 4 does not start at a physical sector boundary.
/dev/sda5       815640576   872494091    28426758   83  Linux               <--Kali Linux
/dev/sda6       970151936   976771071     3309568   82  Linux Swap / Solaris
/dev/sda7       872495104   970149887    48827392   83  Linux               <-- Ubuntu

我找到了一个教程,但是我尝试了一下,但是没有用。这里是链接:

http://www.webupd8.org/2012/03/how-to-dual-boot-android-x86-and-ubuntu.html

我从android-x86.org和版本android-x86-4.4-r1.iso使用了这个Android。

这是我的40_Costum文件:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Android-x86" {
set root='(hd0,3)'
linux /android-x86-4.4-r1/kernel quiet root=/dev/ram0 androidboot_hardware=eeepc acpi_sleep=s3_bios,s3_mode SRC=/android-x86-4.4-r1
initrd /android-x86-4.4-r1/initrd.img}

如果启动我的PC,GRUB引导管理器将出现,并且我可以选择Android,但是它不能引导Android。背景为紫色,没有任何反应。

什么是完整且有效的40_Customm脚本?


如果我在Grub Customizer中创建脚本并将其保存,将无法正常工作。如果再次打开Grub自定义程序,该脚本不会显示在启动菜单上。

这是我的代码:

set root='(hd0,3)' 
`search --no-floppy --fs-uuid --set=root 28D9FDF951298246  
linux android-x86/kernel root=UUID=28D9FDF951298246  quiet 
androidboot.hardware=generic_x86 SRC=/android-x86 acpi_sleep=s3_bios,s3_mode 
initrd Android-x86/android-4.4-r1/initrd.img

现在我还有一个问题:

如果我启动我的笔记本电脑,它会显示Ubuntu,Windows,Kali Linux和Android(这不起作用),但是如果我启动GRub Costumizer,则未列出Windows?但为什么?

Answers:


3

关于Android x86 6.0

“ EEEPC”分配仅适用于ASUS EEEPC,如果有,则仅使用它,否则使用android_x86请不要使用generic_x86,否则会卡在启动动画中,并且必须使用CTRL+ 重新启动F1以访问终端并reboot以GUI将不会加载。我之所以知道这一点,是因为我花了好几个小时来听取一些不好的建议,尽管它们是出于好意。

set root='(hd0,4)'
linux /android-6.0-rc1/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 acpi_sleep=s3_bios,s3_mode SRC=/android-6.0-rc1
initrd /android-6.0-rc1/initrd.img

这是在三重启动设置的老式老式SONY VAIO 64位上对我有用的最终配置。

'(0,4)'是我的硬盘驱动器和Android x86分区的安装位置,请相应地进行更改。您不需要您的UUID,只需要我上面所说的,安装位置就是唯一的更改。


2

这是来自XDA开发人员的

对于GRUB 1.97-1.99&2.00 +

  1. 为简便起见,安装GRUB Customizer将这些键入终端仿真器:代码:

    sudo add-apt-repository ppa:danielrichter2007/grub-customizer
    sudo apt-get update
    sudo apt-get install grub-customizer
    
  2. 打开GRUB定制器,然后输入一个新的GRUB条目。

  3. 打开“来源”标签,输入以下内容:

    set root='(hd0,4)'
    search --no-floppy --fs-uuid --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3
    linux androidx86/kernel root=UUID=e1f9de05-8d18-48aa-8f08-f0377f663de3 quiet      androidboot.hardware=generic_x86 SRC=/androidx86 acpi_sleep=s3_bios,s3_mode
    initrd androidx86/initrd.img
    

这是要更改的内容:

  1. set root='(hd0,4)':将(hd0,4)更改为partiton已安装Android x86。hd0表示sda,因此如果将其安装到sdb,它将为hd1,依此类推。hd0,4表示分区号,在我的情况下,hd0,4表示sda4。因此,如果将其安装在sda6上,它将为hd0,6。

  2. --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3:这里的随机数是已安装Android x86分区的UUID。您必须对其进行更改以更正UUID,可以通过在GRUB Customizer中创建新条目然后转到“选项”选项卡,然后在下拉列表中选择“ Linux”选项来轻松获得UUID。您会看到“分区”下拉列表,选择您的分区。打开“源”选项卡,您将在此处看到UUID。

  3. androidx86/:Android x86的根目录将其更改为Android x86根目录。您可以通过导航到Android x86分区来查看Android x86的根目录,然后会看到以'android'开头的文件夹名称,这是Android x86的根目录

  4. androidboot.hardware:当然是您的设备。注意:如果您使用的是Android 2.3-4.0.3,请将其更改为androidboot_hardware。这是硬件列表:

  • generic_x86 :如果未列出您的硬件,请使用此
  • eeepc :EEEPC笔记本电脑
  • asus_laptop :华硕笔记本电脑(仅支持华硕笔记本电脑)

我必须使用绝对路径,即/androidx86/kernel。否则,我收到有关找不到文件的错误。
banan3'14

1

这是一个十个月大的问题,但我想无论如何我都会帮助。实际上,这是一个非常简单的修复。我把答案扔在我的答案中,而不是在上面的答案上点击“编辑”,因为我不想等待同行评审或其他任何事情。

无论如何,得票最多的答案指出您应该使用以下代码:

set root='(hd0,4)'
`search --no-floppy --fs-uuid --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3
linux androidx86/kernel root=UUID=e1f9de05-8d18-48aa-8f08-f0377f663de3 quiet      androidboot.hardware=generic_x86 SRC=/androidx86 acpi_sleep=s3_bios,s3_mode
initrd androidx86/initrd.img

问题在第二行。第二行的开头有一个流浪的坟墓(`)。从字面上看就这么简单。有时候,最简单的事情会使一切停止工作。

我想您已经找到一种将Android x86添加到GRUB的方法,或者只是不在乎,是的。所以这是正确的代码:

set root='(hd0,4)'
search --no-floppy --fs-uuid --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3
linux androidx86/kernel root=UUID=e1f9de05-8d18-48aa-8f08-f0377f663de3 quiet      androidboot.hardware=generic_x86 SRC=/androidx86 acpi_sleep=s3_bios,s3_mode
initrd androidx86/initrd.img

这是我的整个/etc/grub.d/40_custom文件(不包括exec tail开头的和注释掉的行):

menuentry "Android x86 4.4 R2" --class android --class gnu-linux --class gnu --class os {
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root a47b5fe5-8969-4774-be9c-72c32a3fd14b
    linux /android-4.4-r2/kernel root=UUID=a47b5fe5-8969-4774-be9c-72c32a3fd14b quiet      androidboot.hardware=generic_x86 SRC=/android-4.4-r2 acpi_sleep=s3_bios,s3_mode
    initrd /android-4.4-r2/initrd.img
}
menuentry "Android x86 5.0.2 UNOFFICIAL" --class android --class gnu-linux --class gnu --class os {
    set root='(hd0,msdos4)'
    search --no-floppy --fs-uuid --set=root d2edeae9-3dc8-41b1-b775-25d0a8028092
    linux /android-2014-12-25/kernel root=UUID=d2edeae9-3dc8-41b1-b775-25d0a8028092 quiet      androidboot.hardware=generic_x86 SRC/android-2014-12-25 acpi_sleep=s3_bios,s3_mode
    initrd /android-2014-12-25/initrd.img
}

显然hd0,msdos2是我安装了Android 4.4 R2 a47b5fe5-8969-4774-be9c-72c32a3fd14b的分区,hd0,msdos4是该分区的UUID,也是我安装了Android 5.0.2(非官方且高度不稳定)的d2edeae9-3dc8-41b1-b775-25d0a8028092分区,并且是该分区的UUID。

对我而言,hd0,msdos2is /dev/sdb2and hd0,msdos4is /dev/sdb4。我不知道在下面,但我认为GRUB确实hd0hd1hd2,等以不同的顺序比Linux确实sda/hdasdb/hdbsdc/hdc,等等。再一次,不知道,但我觉得GRUB做它的物理顺序(因为它们会可以在BIOS中找到),而Linux则以...呃...其他方式来实现它们,我想。同样,不确定这一点。

但是,是的,如果您需要确定hdX,msdosY您的Android分区是GRUB分区格式()的哪个分区(我看到的是/dev/sda3),请重新启动PC并按C进入命令行。然后键入(hd并点击选项卡(选项卡会自动完成事情),然后它将所有驱动器列为自动完成选项(不是100%确定,但我想70%确定它不会显示USB驱动器,除非它们是与USB连接的SATA驱动器SATA适配器)。然后输入(hd0,然后点击tab,它将列出所有分区hd0作为自动完成选项。如果您有多个驱动器,/dev/sda3则使用上的autocomplete来确定哪一个只是反复试验的问题(hd。我不确定结果到底是什么样子,但我确实知道结果(hd0,(显然)将显示上所有分区的GRUB样式分区标识符hd0(对您而言,将msdos1通过msdos7;在GRUB中,hd从0 msdos开始但从1开始),上所有分区的标签hd0以及文件系统(通常,您将Android x86放到ext2上,但是由于您将它放在NTFS上,因此它将文件系统显示为NTFS;对于大多数人来说,它将显示ext2,这就是我所知道的,因为我的Android分区是唯一的ext2分区我有)。

嗯...我最初只是想纠正最流行答案的第二行中的错误,最后我得到了该死的关于如何向GRUB添加Android x86的完整教程...


1
  • 开放时间40_custom

    sudo -H gedit /etc/burg.d/40_custom
    
  • 添加Android x86菜单项:

    menuentry "Android-4.3-x86" --class android {
    set root='(hd*,msdos*)'
    linux /path/android-4.3-x86/kernel quiet root=/dev/ram0 androidboot.hardware=tx2500 acpi_sleep=s3_bios,s3_mode SRC=/path/android-4.3-x86 vga=788
    initrd /path/android-4.3-x86/initrd.img
    

    (设置path*为你的)

  • 更新grub:

    sudo update-grub
    

0

没有其他答案对我有用,因此我决定自己在包含Android-x86安装文件的ISO映像提供的文件中找到解决方案。

Android-x86 LiveCD1/efi/boot/android.cfg我在其中找到以下菜单项:

set root=$android
linux $kdir/kernel root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug $src $@
initrd $kdir/initrd.img

问题是$kdir$android应该具有什么价值。挂载分区后,我将系统安装在(sda2)上,然后找到目录的名称- cm-x86-14.1-r2

$@是其他参数(quiet在我的解决方案中),$src可以忽略。最后,我输入了以下grub条目:

set root='(hd0,2)'
linux /cm-x86-14.1-r2/kernel quiet root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug
initrd /cm-x86-14.1-r2/initrd.img

而且有效。


0

这一切都非常有帮助,但是最后,它对我来说缺少了一点,直到我添加了所有部分后,它才起作用。

set root='(hd0,2)'
linux /cm-x86-14.1-r2/kernel quiet root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug
initrd /cm-x86-14.1-r2/initrd.img

正如Banan3'14所张贴的那样,这是正确的,但它却缺失了:

search --no-floppy --fs-uuid --set=root a47b5fe5-8969-4774-be9c-72c32a3fd14b

也许这是隐含的,但我太新了,无法理解,但是一旦我将它们融合在一起,它就会起作用。

    set root='(hd0,2)'
 search --no-floppy --fs-uuid --set=root a47b5fe5-8969-4774-be9c-72c32a3fd14b
    linux /cm-x86-14.1-r2/kernel quiet root=/dev/ram0 androidboot.selinux=permissive buildvariant=userdebug
    initrd /cm-x86-14.1-r2/initrd.img

-1

不要打扰sda或sdc,如果您将android x86安装到引导设备上,则在我的情况下始终为(hd0,x)。这就是说,就我而言,无论您的设备在ubuntu之类的操作系统中以/ dev / sda还是/ dev / sdb列出,您都应在grub中添加(hd0,x),x是您的android x86分区号第2项,只要您使用安装了android x86的同一设备启动(例如,您将android x86安装在分区3的名为U的USB驱动器中,并且Ubuntu中的U列为/ dev / sdc,但是您从U引导,则应在grub中添加root =(hd0,3)而不添加root =(hd2,3)。


我试图改善您的答案。但是无法做到这一点。如果单击答案下方的编辑链接,则可以更改答案。
MadMike 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.