- Katılım
- 7 Ocak 2019
- Mesajlar
- 1.951
- Çözümler
- 15
Daha fazla
- Cinsiyet
- Erkek
Başlıkta yazıldığı gibidir, tek amacım ext4 olarak manuel kurduğum PrimeOS işletim sistemini Phoenix start.bat ile başlatmaktır, bunu legacy BIOS için uygun şekilde yapabilir misiniz?
Not: Ben Notepad++ ile düzenlemeye çalıştım fakat bazı kısımlarını düzeltmeyi başaramadım.
[CODE title="Phoenix start.bat (x86 için ayarlanmalı.)"]@echo off.
Setlocal Enabledelayedexpansion
set IsAddFunc=n
set PrimeOSID=0
set IsBootEFI=
set WinBit=
::========================================
::判断是否管理员运行,提权
::========================================
@echo off.
REM ________________________________________________________________
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 请求管理员权限...
goto UACPrompt.
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\phoenixgetadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\phoenixgetadmin.vbs"
"%temp%\phoenixgetadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\phoenixgetadmin.vbs" ( del "%temp%\phoenixgetadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM ________________________________________________________________
:: 判断启动方式,UEFI or Legacy.
for /f "tokens=2 delims=." %%i in ('bcdedit.exe^|findstr "winload"') do set IsBootEFI=%%i
if "%IsBootEFI%" == "exe" ( goto BootLegacy ) else ( goto BootUEFI )
::========================== Legacy Start ============================
::Legacy 方式入口,修改BCD
:BootLegacy
:: 查找 'bcdedit /enum' 中 "PrimeOS" 的位置.
set /a Count=0
for /f "tokens=1 delims=" %%i in ('bcdedit /enum') do (
set /a Count+=1
echo %%i | findstr "\<PrimeOS\>" > nul.
if !errorlevel! equ 0 (set /a PhoenixCount=Count-3)
)
:: 获取 "PrimeOS" 对于的ID.
set /a Count=0
for /f "tokens=1 delims=" %%i in ('bcdedit /enum') do (
set /a Count+=1
if !Count! equ !PhoenixCount! (set PrimeOSID=%%i)
)
for /f "tokens=2 delims= " %%i in ("!PrimeOSID!") do (set PrimeOSID=%%i)
:: 把"PrimeOS"的ID添加到一次性启动的列表中
bcdedit /bootsequence !PrimeOSID! /addfirst
:: 验证添加成功,跳到重启系统
for /f "tokens=2 delims= " %%i in ('bcdedit /enum ^| findstr "bootsequence"') do (
if %%i == !PrimeOSID! (
echo Next reboot will enter PrimeOS directly.
goto Reboot.
)
)
:: 没有完成,提示并退出
echo "Set Legacy boot sequence error, exit..."
goto exit_point.
::========================== Legacy End ============================
::========================== UEFI Start ============================
::UEFI 方式入口,修改Grub2
:BootUEFI
:: 判断Windows 32/64bit
if exist "%PROGRAMFILES(x86)%" (set WinBit=64) else (set WinBit=32)
:: 挂载ESP分区.
mountvol v: /S
if %errorlevel% neq 0 (echo Mount ESP error! && goto exit_point)
:: 检查默认设置参数是否存在.
if "%WinBit%" == "32" ( goto AddFunc32 )
if "%WinBit%" == "64" ( goto AddFunc64 )
:: 32位UEFI更新引导.
:AddFunc32
::findstr "next_entry" v:\EFI\PrimeOS\Boot\grub.cfg >nul 2>&1 && goto add_env_point.
copy v:\EFI\PrimeOS\Boot\bootia32.efi "%~dp0"\config\bootia32.efi.phoenix.bak
copy v:\EFI\Boot\bootia32.efi "%~dp0"\config\bootia32.efi.boot.bak
copy "%~dp0"\config\bootia32.efi v:\EFI\PrimeOS\Boot\bootia32.efi
copy "%~dp0"\config\bootia32.efi v:\EFI\Boot\bootia32.efi
copy v:\EFI\PrimeOS\Boot\grub.cfg "%~dp0"\config\grub.cfg.bak
copy "%~dp0"\config\grub.cfg v:\EFI\PrimeOS\Boot\grub.cfg
goto add_env_point.
:: 64位UEFI更新引导.
:AddFunc64
::findstr "next_entry" v:\EFI\Boot\grub.cfg >nul 2>&1 && goto add_env_point.
copy v:\EFI\Boot\grub.cfg "%~dp0"\config\grub.cfg.bak
copy "%~dp0"\config\grub-x64.cfg v:\EFI\Boot\grub.cfg
mkdir v:\boot
mkdir v:\.disk
echo 'PrimeOS' > v:\.disk\info
echo 'PrimeOS' > v:\.disk\mini-info
:: 设置下次的默认启动项为PrimeOS.
:add_env_point
if "%WinBit%" == "32" ( copy "%~dp0"\config\grubenv v:\EFI\PrimeOS\Boot\grubenv )
if "%WinBit%" == "64" ( copy "%~dp0"\config\grubenv v:\EFI\Boot\grubenv )
echo Next reboot will enter PrimeOS directly.
:: 卸载ESP分区.
mountvol v: /d
::========================== UEFI End ============================
:: 重启.
:Reboot
shutdown -r -t 1
:exit_point
[/CODE]
Ayrıca şu dosyaları da düzenlemek gerekiyor.
[CODE title="grub-x64.cfg (x86 için ayarlanmalı.)"]set timeout=5
set gfxmode=1024x768
#terminal_output gfxterm.
set default=Windows
if [ -s /EFI/Boot/grubenv ]; then.
set have_grubenv=true
load_env.
fi.
if [ "${next_entry}" ]; then.
set default="${next_entry}"
set next_entry=
save_env next_entry.
set timeout=0
fi.
menuentry 'Windows' {
search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
menuentry "Phoenix OS" {
search --file --set=root /EFI/PrimeOS/kernel
linux /EFI/PrimeOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PrimeOS vga=788
initrd /EFI/PrimeOS/initrd.img
}
[/CODE]
Bu da son dosya:
[CODE title="grub.cfg (x86 için ayarlanmalı.)"]set timeout=5
set gfxmode=1024x768
#terminal_output gfxterm.
set default=Windows
if [ -s /EFI/PrimeOS/Boot/grubenv ]; then.
set have_grubenv=true
load_env.
fi.
if [ "${next_entry}" ]; then.
set default="${next_entry}"
set next_entry=
save_env next_entry.
set timeout=0
fi.
menuentry 'Windows' {
search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
menuentry "Phoenix OS" {
search --set=root --file /EFI/PrimeOS/kernel
linux /EFI/PrimeOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PrimeOS vga=788
initrd /EFI/PrimeOS/initrd.img
}
[/CODE]
Ve başlatıcı olarak atanacağı yer, .bat çalıştırıldığında bilgisayarı yeniden başlatıp, direkt PrimeOS adlı dosyayı C diskinden bulup Android adlı Boot'a giriş yapmalı, böylece hiç uğraşmadan Android'e giriş yapabileceğim.
PrimeOS adlı dosyada burada, Bootice'den bu dosya çalıştırılıp L diskine sinyal gönderiyor, böylece Prime OS çalışıyor.
Bunu neden mi istiyorum? PrimeOS normalde X86 desteği yok, ben bir method ile legacy BIOS'a yani X86 sisteme kurdum, ve Windows 7/11'de bende bu method ile kurulu X64 olarak, işte sistem. Sfs sürekli çöküyor (güç kablosunu çektiğim andan itibaren), işte bende yedeğini dosyaya atıp tekrar kurmak zorunda kalıyorum, o sırada Windows'a dön, dosyayı aktar, aktardıktan sonra yeniden başlat, PrimeOS'un bootlandığı Android'i seç, açılmasını bekle derken çok uzun sürüyor, en azından yeniden başlatma süresinden biraz azaltmak amacıyla böyle bir başlatıcı.bat istiyorum. @eenneess0 ne düşünüyorsun bu konuda, yapılabilir mi? Dediğim .bat olayı.
Not: Ben Notepad++ ile düzenlemeye çalıştım fakat bazı kısımlarını düzeltmeyi başaramadım.
[CODE title="Phoenix start.bat (x86 için ayarlanmalı.)"]@echo off.
Setlocal Enabledelayedexpansion
set IsAddFunc=n
set PrimeOSID=0
set IsBootEFI=
set WinBit=
::========================================
::判断是否管理员运行,提权
::========================================
@echo off.
REM ________________________________________________________________
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 请求管理员权限...
goto UACPrompt.
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\phoenixgetadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\phoenixgetadmin.vbs"
"%temp%\phoenixgetadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\phoenixgetadmin.vbs" ( del "%temp%\phoenixgetadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM ________________________________________________________________
:: 判断启动方式,UEFI or Legacy.
for /f "tokens=2 delims=." %%i in ('bcdedit.exe^|findstr "winload"') do set IsBootEFI=%%i
if "%IsBootEFI%" == "exe" ( goto BootLegacy ) else ( goto BootUEFI )
::========================== Legacy Start ============================
::Legacy 方式入口,修改BCD
:BootLegacy
:: 查找 'bcdedit /enum' 中 "PrimeOS" 的位置.
set /a Count=0
for /f "tokens=1 delims=" %%i in ('bcdedit /enum') do (
set /a Count+=1
echo %%i | findstr "\<PrimeOS\>" > nul.
if !errorlevel! equ 0 (set /a PhoenixCount=Count-3)
)
:: 获取 "PrimeOS" 对于的ID.
set /a Count=0
for /f "tokens=1 delims=" %%i in ('bcdedit /enum') do (
set /a Count+=1
if !Count! equ !PhoenixCount! (set PrimeOSID=%%i)
)
for /f "tokens=2 delims= " %%i in ("!PrimeOSID!") do (set PrimeOSID=%%i)
:: 把"PrimeOS"的ID添加到一次性启动的列表中
bcdedit /bootsequence !PrimeOSID! /addfirst
:: 验证添加成功,跳到重启系统
for /f "tokens=2 delims= " %%i in ('bcdedit /enum ^| findstr "bootsequence"') do (
if %%i == !PrimeOSID! (
echo Next reboot will enter PrimeOS directly.
goto Reboot.
)
)
:: 没有完成,提示并退出
echo "Set Legacy boot sequence error, exit..."
goto exit_point.
::========================== Legacy End ============================
::========================== UEFI Start ============================
::UEFI 方式入口,修改Grub2
:BootUEFI
:: 判断Windows 32/64bit
if exist "%PROGRAMFILES(x86)%" (set WinBit=64) else (set WinBit=32)
:: 挂载ESP分区.
mountvol v: /S
if %errorlevel% neq 0 (echo Mount ESP error! && goto exit_point)
:: 检查默认设置参数是否存在.
if "%WinBit%" == "32" ( goto AddFunc32 )
if "%WinBit%" == "64" ( goto AddFunc64 )
:: 32位UEFI更新引导.
:AddFunc32
::findstr "next_entry" v:\EFI\PrimeOS\Boot\grub.cfg >nul 2>&1 && goto add_env_point.
copy v:\EFI\PrimeOS\Boot\bootia32.efi "%~dp0"\config\bootia32.efi.phoenix.bak
copy v:\EFI\Boot\bootia32.efi "%~dp0"\config\bootia32.efi.boot.bak
copy "%~dp0"\config\bootia32.efi v:\EFI\PrimeOS\Boot\bootia32.efi
copy "%~dp0"\config\bootia32.efi v:\EFI\Boot\bootia32.efi
copy v:\EFI\PrimeOS\Boot\grub.cfg "%~dp0"\config\grub.cfg.bak
copy "%~dp0"\config\grub.cfg v:\EFI\PrimeOS\Boot\grub.cfg
goto add_env_point.
:: 64位UEFI更新引导.
:AddFunc64
::findstr "next_entry" v:\EFI\Boot\grub.cfg >nul 2>&1 && goto add_env_point.
copy v:\EFI\Boot\grub.cfg "%~dp0"\config\grub.cfg.bak
copy "%~dp0"\config\grub-x64.cfg v:\EFI\Boot\grub.cfg
mkdir v:\boot
mkdir v:\.disk
echo 'PrimeOS' > v:\.disk\info
echo 'PrimeOS' > v:\.disk\mini-info
:: 设置下次的默认启动项为PrimeOS.
:add_env_point
if "%WinBit%" == "32" ( copy "%~dp0"\config\grubenv v:\EFI\PrimeOS\Boot\grubenv )
if "%WinBit%" == "64" ( copy "%~dp0"\config\grubenv v:\EFI\Boot\grubenv )
echo Next reboot will enter PrimeOS directly.
:: 卸载ESP分区.
mountvol v: /d
::========================== UEFI End ============================
:: 重启.
:Reboot
shutdown -r -t 1
:exit_point
[/CODE]
Ayrıca şu dosyaları da düzenlemek gerekiyor.
[CODE title="grub-x64.cfg (x86 için ayarlanmalı.)"]set timeout=5
set gfxmode=1024x768
#terminal_output gfxterm.
set default=Windows
if [ -s /EFI/Boot/grubenv ]; then.
set have_grubenv=true
load_env.
fi.
if [ "${next_entry}" ]; then.
set default="${next_entry}"
set next_entry=
save_env next_entry.
set timeout=0
fi.
menuentry 'Windows' {
search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
menuentry "Phoenix OS" {
search --file --set=root /EFI/PrimeOS/kernel
linux /EFI/PrimeOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PrimeOS vga=788
initrd /EFI/PrimeOS/initrd.img
}
[/CODE]
Bu da son dosya:
[CODE title="grub.cfg (x86 için ayarlanmalı.)"]set timeout=5
set gfxmode=1024x768
#terminal_output gfxterm.
set default=Windows
if [ -s /EFI/PrimeOS/Boot/grubenv ]; then.
set have_grubenv=true
load_env.
fi.
if [ "${next_entry}" ]; then.
set default="${next_entry}"
set next_entry=
save_env next_entry.
set timeout=0
fi.
menuentry 'Windows' {
search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
menuentry "Phoenix OS" {
search --set=root --file /EFI/PrimeOS/kernel
linux /EFI/PrimeOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PrimeOS vga=788
initrd /EFI/PrimeOS/initrd.img
}
[/CODE]
Ve başlatıcı olarak atanacağı yer, .bat çalıştırıldığında bilgisayarı yeniden başlatıp, direkt PrimeOS adlı dosyayı C diskinden bulup Android adlı Boot'a giriş yapmalı, böylece hiç uğraşmadan Android'e giriş yapabileceğim.
PrimeOS adlı dosyada burada, Bootice'den bu dosya çalıştırılıp L diskine sinyal gönderiyor, böylece Prime OS çalışıyor.
Bunu neden mi istiyorum? PrimeOS normalde X86 desteği yok, ben bir method ile legacy BIOS'a yani X86 sisteme kurdum, ve Windows 7/11'de bende bu method ile kurulu X64 olarak, işte sistem. Sfs sürekli çöküyor (güç kablosunu çektiğim andan itibaren), işte bende yedeğini dosyaya atıp tekrar kurmak zorunda kalıyorum, o sırada Windows'a dön, dosyayı aktar, aktardıktan sonra yeniden başlat, PrimeOS'un bootlandığı Android'i seç, açılmasını bekle derken çok uzun sürüyor, en azından yeniden başlatma süresinden biraz azaltmak amacıyla böyle bir başlatıcı.bat istiyorum. @eenneess0 ne düşünüyorsun bu konuda, yapılabilir mi? Dediğim .bat olayı.
Son düzenleme: