无忧启动论坛

标题: linux下编译安装grub2.04到U盘3分区,支持efi和bios方式 [打印本页]

作者: qli365    时间: 2019-12-13 16:37
标题: linux下编译安装grub2.04到U盘3分区,支持efi和bios方式
本帖最后由 qli365 于 2019-12-15 18:09 编辑

先准备 ubuntu-18.04.3-desktop-amd64.iso 一会编译就在ubuntu18下完成,我是虚拟机内存不够,所以U盘grub直接启动,可以调用整机资源。

先查询那个是U盘所在的分区,使用下面命令

# fdisk -l
我的U盘是sdc

预备u盘分3个区
/dev/sdc1小一些,UEFI FAT32
/dev/sdc2大一些,linux分区 存放grub2.04文件 加上boot标记
/dev/sdc3用作文件存储

格式化硬盘
# fdisk /dev/sdc  
p[显示分区]-->>d[删除原有分区]-->>n[添加新分区]
  p[主分区]-->>1-->>2048-1 500 000=743.4Mb
  p[主分区]-->>2-->>1501184-20 000 000=8.8G
  p[主分区]-->>2-->>20 000 000 - 最后

t[更改分区类型]-->>1-->>ef[EFI(FAT-12/16/32)]
t[更改分区类型]-->>2-->>83 linux
t[更改分区类型]-->>3-->>6 FAT16
a[可启动标志]-->>w[保存分区]

完成后是这样的,下面带*的是可启动分区

设备       启动     起点     末尾     扇区   大小 Id 类型
/dev/sdc1           2048  1500000  1497953 731.4M ef EFI (FAT-12/16/32)
/dev/sdc2  *     1501184 20000000 18498817   8.8G 83 Linux
/dev/sdc3       20000768 30433279 10432512     5G  6 FAT16


格式化U盘
将sdc1分区格式化为fat32格式
# mkfs -t vfat /dev/sdc1
# mkfs -t ext3 /dev/sdc2
# mkfs -t vfat /dev/sdc3

挂载U盘
按照该对应方式挂载
/dev/sdc1 >>> /home/ubuntu/Desktop/sdc1dir
/dev/sdc2 >>> /home/ubuntu/Desktop/sdc2dir


当前目录是在/home/ubuntu/Desktop/
# mkdir sdc1dir
# mkdir sdc2dir

# chmod 777 sdc1dir
# chmod 777 sdc2dir

# mount /dev/sdc1 sdc1dir/
# mount /dev/sdc2 sdc2dir/

到此U盘分区就完成了,第3个分区主要存储文件,以后再说。
如果编译 grub2.04 还需要提前安装些软件

# apt-get -y install gcc automake autoconf make bison flex unifont

需要注意的是我们要使用biso和efi都能启动的u盘系统,按照grub2.04的设置有个关于当前系统的检测,其他的就不能编译了,我代参数编译2次安装2次。

打开命令行
#terminal

下载到桌面
# wget https://ftp.gnu.org/gnu/grub/grub-2.04.tar.gz

解压
# tar -xvf grub-2.04.tar.gz

进入目录

# cd grub目录



MBR Bios 编译安装

# ./configure --target=i386
# make
# make install
# grub-install --version
grub-install (GRUB) 2.04  此处要说下,我的ubuntu是旧版的,不要在编译前使用此命令,使用了是旧版自带的

安装到U盘,运行下面的命令,U盘会有安装文件,注意目录

# grub-install --target=i386-pc --boot-directory=/home/ubuntu/Desktop/sdc2dir/boot/bios/ /dev/sdc


UEFI 编译安装
保证安全把以前编译的文件夹删除调,注意当前目录是 /home/ubuntu/Desktop/
# rm -rf grub-2.04
# tar -xvf grub-2.04.tar.gz
# chmod -R 777 grub-2.04
# cd grub-2.04

# ./configure --target=x86_64  --with-platform=efi
# make
# make install
# grub-install --version
grub-install (GRUB) 2.04

# grub-install --target=x86_64-efi --boot-directory=/home/ubuntu/Desktop/sdc2dir/boot/efi/ --efi-directory=/home/ubuntu/Desktop/sdc1dir/ --removable

到此处还需要拷贝写文件
拷贝字体
# cp /boot/grub/unicode.pf2  sdb1dir/boot/bios/grub/fonts/

拷贝背景图
# cp grub-2.04/themes/starfield/starfield.png sdb1dir/boot/

拷贝grub.cfg
# cp grub-2.04/docs/grub.cfg sdb1dir/boot/

最后罗嗦说下,ubuntu 可以直接使用iso直接grub2调用进入,从官网下载文件后拷贝到U盘一直出问题,查出是下载文件问题,使用以前文件直接启动,可以前编译的grub2启动没有问题,也不知道编译的有没有问题,以上仅供大家参考阿。
还有在目录下有个style样式主题可以完全拷贝到u盘调用。



作者: wintoflash    时间: 2019-12-13 17:23
楼主有没有试过在Windows下编译?

作者: qli365    时间: 2019-12-14 23:19
wintoflash 发表于 2019-12-13 17:23
楼主有没有试过在Windows下编译?

一直都是centos,使用乌班图是比较方便可以直接调用
作者: wintoflash    时间: 2019-12-15 13:34
qli365 发表于 2019-12-14 23:19
一直都是centos,使用乌班图是比较方便可以直接调用

我想知道grub-mkimage.exe是怎么编译出来的。
在Windows下用MinGW好像不太成功。
作者: qli365    时间: 2019-12-15 18:03
wintoflash 发表于 2019-12-15 13:34
我想知道grub-mkimage.exe是怎么编译出来的。
在Windows下用MinGW好像不太成功。

向这样的是使用源代码使用gcc编译器,被编译后就有grub的一些命令了,我觉得使用方式和win差不多啊
作者: 2012kelvin6tlb    时间: 2020-3-13 15:34
qli365 发表于 2019-12-15 18:03
向这样的是使用源代码使用gcc编译器,被编译后就有grub的一些命令了,我觉得使用方式和win差不多啊

同样想知道这个问题的答案,我在虚拟机下运行CentOS-8.1.1911-x86_64-dvd1.也无法编译出这个grub-install命令,make命令运行也报错
作者: 2011yaya2007777    时间: 2020-3-17 18:44
本帖最后由 2011yaya2007777 于 2020-3-17 18:49 编辑

在 chenall 搭建的 grub4dos_dev 下编译 grub-2.04:

执行 sh ./autogen.sh,提示缺少 gettext

tce-load -wi gettext
tce-load -i gettext.tcz
安装 gettext 后,再执行 sh ./autogen.sh,提示版本太低,需要 0.18.3 或者以上版本。

下载了 gettext-0.20.1,怎样在   grub4dos_dev 下编译?又怎样安装?
有没有可以在  grub4dos_dev  使用的 gettext.tcz ?


作者: wintoflash    时间: 2020-3-20 20:56
2011yaya2007777 发表于 2020-3-17 18:44
在 chenall 搭建的 grub4dos_dev 下编译 grub-2.04:

执行 sh ./autogen.sh,提示缺少 gettext

别想着用那个老掉牙的东西编译grub2了。
用wsl或虚拟机跑linux吧
作者: 2011yaya2007777    时间: 2020-3-20 21:32
grub-2.03是编译成功的,就是这个2.04不行。算了,将就使用吧。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3