【坑小白向】制作可以 UEFI 引导的 Deepin ISO
Tofloor
poster avatar
kdesdaddy
deepin
2014-01-10 23:49
Author
听说 Fedora 、OpenSUSE、Debian、Ubuntu 和 Arch 都支持纯 UEFI 引导系统?
Fedora 19 UEFI.png
OpenSUSE 13 UEFI.png
Debian 7.2 UEFI.png
Ubuntu GNOME UEFI.jpg
ArchLinux UEFI.png

貌似高端大气上档次的Deepin还没有UEFI启动 : ?
        



准备:
saucy-desktop-amd64.iso
deepin-desktop-amd64.iso
以及
xorriso 程序



xorriso 可以通过
sudo apt-get install xorriso
或者
sudo aptitude install xorriso
安装

假设 saucy-desktop-amd64.iso 和 deepin-desktop-amd64.iso 都放在 ~ 文件夹

1、解开 deepin-desktop-amd64.iso 到 ~/deepin-iso 文件夹
cd
mkdir ~/deepin-iso
sudo mkdir /mnt/deepin-iso
sudo mount -o loop deepin-desktop-amd64.iso /mnt/deepin-iso
cp -Rv /mnt/deepin-iso ~/deepin-iso

2、提取 saucy-desktop-amd64.iso 中的 UEFI 启动相关文件,并复制到 ~/deepin-iso 文件夹
cd
sudo mkdir /mnt/ubuntu-iso
sudo mount -o loop saucy-desktop-amd64.iso /mnt/ubuntu-iso
cp -Rv /mnt/ubuntu-iso/{EFI,boot} ~/deepin-iso/

3、修改 ~/deepin-iso/boot/grub/grub.cfg 文件
cd
sudo gedit ~/deepin-iso/boot/grub/grub.cfg
将文件内容修改为
  1. if loadfont /boot/grub/font.pf2 ; then
  2.         set gfxmode=auto
  3.         insmod efi_gop
  4.         insmod efi_uga
  5.         insmod gfxterm
  6.         terminal_output gfxterm
  7. fi
  8. set menu_color_normal=white/black
  9. set menu_color_highlight=black/light-gray
  10. menuentry "Try Deepin without installing" {
  11.         set gfxpayload=keep
  12.         linux        /casper/vmlinuz  file=/cdrom/preseed/deepin.seed boot=casper quiet splash --
  13.         initrd        /casper/initrd.lz
  14. }
  15. menuentry "Install Deepin" {
  16.         set gfxpayload=keep
  17.         linux        /casper/vmlinuz  file=/cdrom/preseed/deepin.seed boot=casper only-ubiquity quiet splash --
  18.         initrd        /casper/initrd.lz
  19. }
  20. menuentry "Check disc for defects" {
  21.         set gfxpayload=keep
  22.         linux        /casper/vmlinuz.efi  boot=casper integrity-check quiet splash --
  23.         initrd        /casper/initrd.lz
  24. }
Copy the Code

4、新建 ~/option.txt 文件,并编辑为如下内容:
touch ~/option.txt
sudo gedit ~/option.txt
  1. outdev deepin-iso-with-uefi-support-amd64.iso
  2. blank as_needed
  3. volid "Deepin ISO (amd64 with UEFI support)"
  4. map ./deepin-iso/   /
  5. boot_image any bin_path=/isolinux/isolinux.bin
  6. boot_image any emul_type=no_emulation
  7. boot_image any boot_info_table=on
  8. boot-image any load_size=2048
  9. boot_image any platform_id=0x00
  10. boot_image any next
  11. boot_image any bin_path=/boot/grub/efi.img
  12. boot_image any emul_type=no_emulation
  13. boot_image any load_size=4194304
  14. boot_image any platform_id=0xef
  15. boot_image any next
  16. boot_image any cat_path=/isolinux/boot.cat
  17. commit  
  18. end
Copy the Code

5、一切准备就绪,开始制作ISO
cd
sudo xorriso -options-from-file ~/option.txt

完成!制作好的 deepin-iso-with-uefi-support-amd64.iso 就是支持UEFI启动的 Deepin ISO 了。

6、清理文件
sudo umount ~/deepin-iso/
sudo umount ~/ubuntu-iso/
sudo rm -rf ~/deepin-iso/ ~/ubuntu-iso/
sudo rm ~/saucy-desktop-amd64.iso ~/deepin-desktop-amd64.iso ~/option.txt

7、支持情况
efivarfs.png

懂的自然懂咯 :mrgreen:  :mrgreen:  :mrgreen:






PS:要制作启动U盘,将U盘格式化成FAT32格式,把 deepin-iso-with-uefi-support-amd64.iso 解开并复制到U盘上就是可以UEFI启动的启动U盘。



http://lukeluo.blogspot.com/2013 ... ributition-iso.html
Reply Favorite View the author
All Replies
MattD
deepin
2014-01-10 23:55
#1
其实还有一种方法,就是正常启动并安装Deepin,然后直接chroot进去挂载一下ESP,安装uefi版本的grub2,重新生成配置即可。当然,前提是分区表采用GPT。
还可以再延伸一下,直接解压ISO中的filesystem.squashfs,然后chroot过去配置,连过渡用的BIOS兼容分区都可以省了。
不过前提是主板支持BIOS兼容模式,否则连ISO都无法启动了……
就我个人而言,我是能不用UEFI就不用,即使我的主板有UEFI支持。
Reply View the author
xliang9550
deepin
2014-01-11 04:00
#2
其实UEFI引导功能是可以DIY的,甚至装好后也能自行安装UEFI启动支持所需的组件。

我的主板同时打开UEFI和CSM,除非对于遗产系统(比如Windows XP x64),只要能支持UEFI启动,我都会优先使用UEFI,毕竟这是趋势。不可能一辈子都只用2TB以内的硬盘做系统盘(话说SSD突破2TB也不会太遥远,三星840Evo已经做到1TB了)。

现在我的个人工作站上,Windows 7 Pro和Mint等发行版共用一个ESP,没有任何冲突。偶尔遇到几回重启之后UEFI BIOS启动项不认Linux引导器的事,不过只要有EFI shell就可以手动加载相应的efi。
Reply View the author
MattD
deepin
2014-01-11 04:27
#3
其实UEFI引导功能是可以DIY的,甚至装好后也能自行安装UEFI启动支持所需的组件。

我的主板同时打开UEFI和CSM,除非对于遗产系统(比如Windows XP x64),只要能支持UEFI启动,我都会优先使用UEFI,毕竟这是趋势。不可能一辈子都只用2TB以内的硬盘做系统盘(话说SSD突破2TB也不会太遥远,三星840Evo已经做到1TB了)。

现在我的个人工作站上,Windows 7 Pro和Mint等发行版共用一个ESP,没有任何冲突。偶尔遇到几回重启之后UEFI BIOS启动项不认Linux引导器的事,不过只要有EFI shell就可以手动加载相应的efi。
2TiB的分区限制是由分区表决定的,而不是BIOS固件。只要采用非MBR分区表(x86上通常可使用GPT或BSD label),传统BIOS也能识别并利用超过2TiB的磁盘空间。
对于UEFI和GPT,我2011年就开始接触研究了。不喜欢UEFI是因为目前太多的主板厂商随意阉割和削弱UEFI标准所规定的UEFI BIOS的基础功能部分。我目前就没见过完全按照UEFI标准来生产主板的厂商。Intel原厂的主板我没买过,也买不起,不知道原厂主板情况如何。
还有一点,目前主板的UEFI版本似乎无法随意升级,出厂什么版本就只能用什么版本,例如,我可能无法将主板的UEFI 2.1升级为UEFI 2.4。由于这个原因,采用老版本UEFI的主板可能就无法运行新版本UEFI的周边工具。
另外,对于Linux,完全可以直接使用内核的efi stub来让UEFI的boot manager直接引导内核,可以少掉bootloader这一个中间层。
Reply View the author
xliang9550
deepin
2014-01-11 05:36
#4
我在BIOS机器上实际操作过GPT分区表安装各种Linux发行版,没有问题。我之所以提到2TB,是考虑到Windows用户。

Intel原厂主板我经常用,07年买了一块DP35DP,更新了一次BIOS就支持UEFI,当时就用UEFI装的正版Vista 64bit,稀里糊涂地就装上了,当时我还不知道什么叫GPT。现在我的主力工作站主板是Intel DH77EB,配32GB内存和mSATA SSD,通过UEFI安装了正版Win7Pro和Mint。

现在的主板当中,我觉得华擎的UEFI启动功能最好用,支持从文件系统(比如U盘)引导EFI shell,只需将shellx64.efi放在U盘根目录。另外微星主板是自带EFI shell的。其他品牌我用过技嘉的,整体设计大同小异,但感觉不如华擎的兼容性好。

UEFI的boot manager我不太懂,反正我是靠shell一招鲜吃遍天,将shell程序复制到U盘的/efi/boot/bootx64.efi就行。
Reply View the author
poloshiao
deepin
2014-01-11 15:59
#5
先謝謝大家 這麼前衛精彩的分享
我是靠shell一招鲜吃遍天
1. EFI/UEFI 及對應的 Shell 版本發展歷史 參照
http://en.wikipedia.org/wiki/Unified_Ex ... _Interface
目前主板的UEFI版本似乎无法随意升级,出厂什么版本就只能用什么版本,例如,我可能无法将主板的UEFI 2.1升级为UEFI 2.4
目前 Ubuntu / Deepin 最常碰到的版本是 v2.31
有興趣下載的網友 可以到這裏找找
http://software.intel.com/en-us/articles/uefi-shell

因爲 採用開機系統歷史原因
目前 Ubuntu 在 UEFI 的開機檔案 名稱 並不是只有一個
會使得剛想入門的網友有點困惑
Reply View the author
xliang9550
deepin
2014-01-11 19:24
#6
我的Mint 16的引导程序是/efi/ubuntu/shimx64.efi。其实只要到shell界面进入EFI分区,一般是fs0:
再用ls查看一下就可以了。

UEFI是解决多系统引导兼容性的问题的好方式,就是“安全启动”有点太霸道了,似乎专为Win8认证电脑设计的。我见过Win8认证电脑,目前只能运行Win8.x(不排除以后Linux基金会可能得到通用的授权密钥,也许到时候更新一下UEFI固件中的密钥证书也能启动Linux),没有“安全启动”选项可供更改。

gnu.org将“安全启动”称为“限制启动”(restricted boot)。
Reply View the author
poloshiao
deepin
2014-01-11 19:59
#7
我的Mint 16的引导程序是/efi/ubuntu/shimx64.efi。
http://askubuntu.com/questions/293612/d ... oesnt-boot
1. what-is-the-difference-between-grubx64-and-shimx64
http://askubuntu.com/questions/342365/w ... nd-shimx64
shimx64.efi 是 Secure Boot 的開機程序 shim 的 一個檔案
1-1. Secure Boot enabled
shimx64.efi 使用它自帶的 key 通過 Secure Boot 檢驗後 呼叫 grubx64.efi
所以你應該還有 /efi/ubuntu/grubx64.efi 找找看 求證一下
1-2. Secure Boot disabled
shimx64.efi 直接呼叫 grubx64.efi
效果跟 直接呼叫 grubx64.efi 一樣
所以如果沒有 Secure Boot enabled 只有 UEFI enabled
可以直接使用 /efi/ubuntu/grubx64.efi 試試看
2. 在 Grub 2 開機導引使用 grubx64.efi
非 Grub 2 開機導引 可能使用 bootx64.efi
Reply View the author
MattD
deepin
2014-01-11 21:37
#8
我在BIOS机器上实际操作过GPT分区表安装各种Linux发行版,没有问题。我之所以提到2TB,是考虑到Windows用户。

Intel原厂主板我经常用,07年买了一块DP35DP,更新了一次BIOS就支持UEFI,当时就用UEFI装的正版Vista 64bit,稀里糊涂地就装上了,当时我还不知道什么叫GPT。现在我的主力工作站主板是Intel DH77EB,配32GB内存和mSATA SSD,通过UEFI安装了正版Win7Pro和Mint。

现在的主板当中,我觉得华擎的UEFI启动功能最好用,支持从文件系统(比如U盘)引导EFI shell,只需将shellx64.efi放在U盘根目录。另外微星主板是自带EFI shell的。其他品牌我用过技嘉的,整体设计大同小异,但感觉不如华擎的兼容性好。

UEFI的boot manager我不太懂,反正我是靠shell一招鲜吃遍天,将shell程序复制到U盘的/efi/boot/bootx64.efi就行。
很遗憾地告诉你,对于GPT和UEFI,你有部分观念是错误的。
首先,GPT和UEFI完全没有彼此的依赖关系,GPT不需要UEFI即可运行,同样的,在MBR表也可以使用UEFI。当然,MBR表上运行UEFI没有原生支持,而且也不必要。
其次,Windows也可以在不支持UEFI的情况下安装到GPT表,只需要采用GPT/MBR混合表即可。不过如果这样做的话,Windows的分区数只能限制为三个,但是2TiB以后的空间完全可以由Windows使用。
我随手用虚拟机做了个实例,为了论证我的观点,特地把虚拟磁盘大小设置为2.5TiB,前面2TiB给了LD。
另外,在分区方面,GPT表部分分了四个分区,MBR映射表部分分了三个,且MBR映射表的分区完全在2TiB的范围之外。最后的结果如下图:
2.png
3.png
4.png
可能出于兼容性考虑,在Windows中映射的GPT表部分是不连续的,被分成了几块,而实际上在Linux下看到的才是真正正确的分区表,GPT表部分的分区都是连续的。
这样一来,在GPT表安装Linux和Windows双系统完全无压力。GPT/MBR混合表本质还是由GPT为主导,而这也是Mac OS X采用的Boot Camp的原理。
当然,采用这种方式的话,GPT表部分的所有分区都会在MBR映射表里面识别为一个ID 0xEE的大分区,这部分空间不能由Windows所使用。
所以,我个人认为,即使在不支持UEFI的情况下,Windows也完全可以安装到GPT表并利用2TiB以后的空间,不过这种方式通常对Windows+Linux双系统用户而言才有用。
Reply View the author
knightlu
deepin
2014-01-12 07:26
#9
做好的iso能顺利完成安装吗?有没有成品提供测试?
Reply View the author
xliang9550
deepin
2014-01-13 07:08
#10
多谢8楼指点,阁下是真君子。(子曰:人不知而不愠,不亦君子乎)
关于混合分区表以及BootCamp的原理我会再从头学一下。虽然我不用Mac……手里唯一一件苹果设备是它的USB以太网适配器(USB网卡)。
Reply View the author
1334962453
deepin
2014-01-14 22:32
#11
哇 ,一群大神级 的在说什么 版主发的东西我也看不明白 太复杂了好像在欺负新手啊
Reply View the author
xliang9550
deepin
2014-01-14 23:04
#12
楼上只需记住,UEFI是从GPT磁盘上的ESP分区查找系统的引导器,最常见的引导器位于/efi/boot/bootx64.efi,就可以了。
Reply View the author