|
本帖最后由 hilsonma 于 2020-3-9 12:10 编辑
20200308更新:感谢 nivigo 的分享,让我实现了在Windows下的封装,不需要linux环境封装,参见 windows下的封装 。
详细讲解请参看以下20200308更新前的内容:
附件是一个封装模板,里面是一个linux脚本build.sh 和一个文件夹build
build文件夹里有2个文件和一个文件夹
这两个文件一个是启动模板使用到的模块清单mod.txt ,一个是预配置文件pre.cfg
文件夹boot下有子文件夹grub,grub文件夹内是我的启动模板的整套文件
efi单文件封装模板.7z
(568.45 KB, 下载次数: 1246)
efi单文件封装模板.7z
|
|-- build.sh
|-+ build
|------ pre.cfg
|------ mod.txt
|-----+ boot
|---------+ grub
|-------------- grub.cfg
|-------------+ run
|------------------ run.cfg
|------------------ rundir.cfg
|------------------ runseek.cfg
|-----------------+ ms
|---------------------- boot.sdi
|---------------------- bootmgfw.efi
下载模板解压放到grub2文件夹
将 build/boot/grub 里的内容清空,换上你自己的启动模板的整套文件
按你的启动模板用到的模块来修改模块清单文件 build/mod.txt
注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
这6个模块不能缺少
进入linux系统,在linux系统中执行build.sh 就会生成 bootx64.efi .
感谢wintoflash,是他的指导和分享的源码让我学会了这个封装方法。
同时感谢江南一根葱,在学习这个方法之前就已经得到他的指点,知道了方向。
--------------------------------------------------------------------------------------------------------------------
如果电脑没有安装linux系统,可以到这里下载porteus绿色免安装版
将porteus文件夹提取放到任一分区根目录,将其中的porteus.cfg放到自动菜单目录,就可以在自动菜单中选择启动
--------------------------------------------------------------------------------------------------------------------
脚本解读:
#!/usr/bin/env sh
# 指明脚本解释器
cd build
# 进入 build目录
find ./boot | cpio -o -H newc | gzip -9 > ./memdisk.cpio.gz
# 搜索boot目录 以newc格式归档 最大压缩 生成压缩文件memdisk.cpio.gz
find ./memdisk.cpio.gz | cpio -o -H newc > ./memdisk.cpio
# 搜索memdisk.cpio.gz文件 以newc格式归档 生成归档文件 memdisk.cpio
cd ..
# 返回上一层目录
modules=$(cat build/mod.txt)
# 将模块清单文件mod.txt 的内容设为变量modules
grub-mkimage -O x86_64-efi -d x86_64-efi -m build/memdisk.cpio -c build/pre.cfg -o bootx64.efi $modules
# 定制efi文件 64位efi格式 使用x86_64-efi中的模块 使用内存盘其中载入build/memdisk.cpio归档的内容
# 使用预配置文件build/pre.cfg 生成文件名为bootx64.efi 包含模块如变量modules的内容
--------------------------------------------------------------------------------------------------------------------
使用内存盘参数定制时会默认-p (memdisk)/boot/grub
由于使用了压缩,内存盘memdisk中是压缩文件,不是直接的配置文件,所以要使用预配置文件进行预配置
pre.cfg预配置文件解读:
loopback loop (memdisk)/memdisk.cpio.gz
# 将内存盘的压缩文件(memdisk)/memdisk.cpio.gz挂载为虚拟盘loop
set root=loop
# 将loop设为root
set prefix=($root)/boot/grub
# 将(loop)/boot/grub设为安装目录(配置目录)
# 这样grub2启动时就会使用(loop)/boot/grub/grub.cfg进行配置
# 所以启动模板的主程序需要命名为grub.cfg
--------------------------------------------------------------------------------------------------------------------
使用举例:
比如wintoflash的run源码,改用这个模板封装
先将build/boot/grub 里的内容清空
再将run源码里run.tar\boot\grub\ 目录下的所有内容提取到 build/boot/grub
将主程序init.sh改名为grub.cfg
这个封装模板使用grub.cfg作为主程序名,要不然就要修改预配置文件
将run源码里run.tar\arch\x64\builtin.txt的内容覆盖到 build/mod.txt
源码中模块清单文件里的模块是齐全的,如果是自己的模板要注意包含上面说的6个模块。
在linux环境下执行build.sh
这样就生成了bootx64.efi,可以直接使用,也可以改回原本的程序名run.efi 在其他efi中调用,按需要加上参数。 |
评分
-
查看全部评分
|