掌機上的原生 YouTube
上一篇 講的是把 RG40XX V 的面板點亮。畫面出來之後,問題就換了一批:這台機器 能拿來做什麼 。 這一輪做完的是一個 原生 YouTube 客戶端 ,外加一串各自獨立的修正。分開講。 為什麼是原生,不是塞一個瀏覽器 第一版走的是 Web:stock Cog/WPE 跑手機版 YouTube。它能開,但在 H700 上瀏覽本身就是 FAIL,而且整條路徑要拖進一個完整的瀏…
CATEGORY
75 posts
上一篇 講的是把 RG40XX V 的面板點亮。畫面出來之後,問題就換了一批:這台機器 能拿來做什麼 。 這一輪做完的是一個 原生 YouTube 客戶端 ,外加一串各自獨立的修正。分開講。 為什麼是原生,不是塞一個瀏覽器 第一版走的是 Web:stock Cog/WPE 跑手機版 YouTube。它能開,但在 H700 上瀏覽本身就是 FAIL,而且整條路徑要拖進一個完整的瀏…
Anbernic RG40XX V 是一台 Allwinner H700 的掌機,出廠跑廠商的 BSP kernel。我想讓它跑 mainline Linux 7.2 。 起因很單純:想要串流玩得順、想跑 RPG Maker 的遊戲。結果擋在路上的是 顯示 。 問題不是「還沒支援」,是「亮不起來」 Linux 7.2 本來就能在 H700 上開機,device tree 也涵蓋…
vibe-os is an integrated RISC-V 32-bit QEMU browser OS. 我覺得我一直在測試ai的極限哈哈,三天把之前做過的專案揉成一個作業系統 Lineage: Original project: cccriscv/mini-riscv-os Referenced fork/base: x213212/mini-riscv-os This…
build self os in riscv 很久沒更新,最近看到TempleOS, 今天早上無聊來將之前的專案進行合併,新增了lwip wget 下載檔案,預計想要再將這個os再多一個vga的瀏覽器,感覺用NetSurf 渲染都Ok,應該可以在目前的os進行上網,新增了檔案系統,和鍵盤滑鼠硬碟vga驅動 修掉了context switch bug , 使用vga去繪製os的圖…
QEMU 在 RISC-V 上跑 Ubuntu 本筆記整合完整步驟與實驗心得,全部放在同一份,方便直接複製執行。涵蓋 QEMU + Ubuntu 啟動、QEMU / OpenSBI / U-Boot 最後正確編譯版本、網路/SSH、共享、NFS/CIFS/SSHFS、CoreMark 編譯、常見錯誤對應。 安裝必要套件: bash Copy sudo apt update su…
qemu virtio net lwip 整個改動在這個commit 實現 https://github.com/x213212/mini-riscv-os/commit/64d82fd26d69ecdd1985264ac2261d8a8919f46a 研究一下怎麼在 qemu 裡面新增一張 virtio 網卡並註冊到 lwip,使用一些常見的協議 這邊要讓 qemu 網卡收到…
研究qemu內部機制與監控指令狀態 如果想理解一個指令級架構整個指令指行前和執行後的狀態,我最想知道的是每一行指令執行前和執行後的register的狀態和,整個cpu 記憶體的狀態這是我比較感興趣的,所以大概研究了一下qemu 有發現其實可以透過plugin 的方式去攔截qemu 指令執行過程中的info ,大概需要幾點,第一假設我指令級架構是 riscv 但是他要跑在x86上…
Modify the gcc plugin to detect linklist memory leaks 最近又開始在看以前專案把想做的東西做完整,在以前檢測記憶體洩漏的時候有發現在linklist的部分memory leak好像沒有找到相對應的gimple 所以那大概新增這個 type就可以了 https://github.com/x213212/Static-analyz…
上一篇從特徵碼開始下手,這次從異動 nuitka 的 compiler 來下手 這篇網站在以前的時候就有嘗試去呼叫ollvm 去加密 binary https://blog.threat.zone/create-more-complicated-binaries-with-nuitka-llvm-obfuscator/ 那麼我們來透過 ollvm 去混淆 一些東西看能不能順便透…
大概分析 gdbserver 原理 這次來研究一下 gdbserver https://github.com/bet4it/gdbserver.git https://github.com/trixirt/deebe 簡單來說 gdbserver 工作原理就是透過ptrace 去控制 process 的動作 在main 可以看到 這邊會透過 get_request 來持續查看是…
Load Binary to Shared Memory Using GDB 最近在研究 gdbserver 順便驗證一些東西 應該說在 bare metal 情況下,gdb load 應該會把binary load 到記憶體位置,在riscv 看蠻多的但是在x86是否可以這樣模擬透過gdb的load 將 程式碼load 到指定位置 create memory area cod…
in windows python 與 java 溝通 https://github.com/java-native-access/jna Maven Central jna-platform-5.14.0.jar jna-platform-jpms-5.14.0.jar SharedMemoryWriter build command : javac -cp jna-jpms…
elf diff tool 最近在想可不可以將分析的路徑在減少一點,這樣在分析code size 會更省事 python Copy import subprocess import re from graphviz import Digraph def generate_objdump_output ( elf_file , output_file ): cmd = [ 'ri…
Using ASLi with Arm's v8.6-A ISA specification https://alastairreid.github.io/using-asli/ 在這篇文章有提到說怎麼安裝和使用ASLi 也就是 code Copy ASLi is an interpreter for Arm’s Architecture Specification Langu…
Try to find the redundant area with the Python gdb (riscv) 大概想統計出某個區域內的pc address所使用的 register 的使用次數與alias的register,和記錄所有regiser 在某個區域內的所有regiser的 狀態,先假設相同compiler來說在編譯加了某些option 導致某段code做不好…
Trying to get variable dependencies with libclang 如何用 libclang 的前端解析所有的.c .cpp 展開ast tree,目前進度只有 callee 和caller 的關係,還有參數 ,function variable 的資訊 假設你有安裝llvm 應該會在 code Copy find /usr/lib/x86_64…
在gcc 可以下 code Copy -fdump-rtl-all-all 得到gcc 執行rtl pass的優化結果,其中目前我的平台是 x86 那唯一看到rtl tree有真正執行 並且變化的 pass有三個 code Copy combine reload cprop_hardreg 這是在pass中所呈現的rtl tree code Copy (insn 31 30 3…
trace gdb 最近在看能不能在gdb攔截一些有關於runtime的程式的pc address ,gdb背後底層原理是ptrace,大概從各個檔案裏面去埋print(printf_unfiltered (("hello\n"));),來稍微紀錄一下 arch arch 資料夾存放的是有關於指令架構的一些function也就是當觸發斷點時候可以透過不同的arch將不同的reg…
linux hook 之前有分享 linux hook的方式,包括ld_preload,目前有個情況需要額外override 原本的某個function在linux 環境,這邊記錄一下可行方案 lief https://github.com/lief-project/LIEF code Copy pip install lief 如果採用直接修改elf 是否有可能直接hook…
custom llvm pass inline / unrol loop pass 最近有空更新一下,如果要異動llvm 內部的pass應該從哪裡下手呢 Writing an LLVM Pass — LLVM 16.0.0git documentation 這邊可以大概看到一些架構,不過我們要在llvm10達成pass的修改,根據我們的需求任意的對某個fucntion 進行in…
python auto script 紀錄一下自動化腳本的過程,其實gdb是可以讀入python 腳本達到自動化debug的 bash Copy b main so ./test.py c Copy #include <stdio.h> int foo2 ( int b ){ int c = 0 ; c = b + 1 ; return c ; } int foo ( int…
update new control flow graph 後來後續更新有更好的呈現方式 這個分支現在可以更清楚的顯示迴圈了 https://github.com/Kazhuu/asm2cfg/pull/37
llvm pass https://reviews.llvm.org/D70199 https://zhuanlan.zhihu.com/p/122522485 https://juejin.cn/post/6844904030636867598 https://llvm.org/devmtg/2019-10/slides/Warzynski-WritingAnLLVMPass…
gcc plugin 補足之前,影響fucntion 是否inline 版本,額外新增了可以影響unroll loop rtl層 pass的撰寫,這邊一併附上 這次比較特別趕上了chatgtp,rtl pass 這部分語法都是透過chatgpt幫助下進行撰寫,基本上不當機的情況下都快變成google 2.0了,包括這個文章都是用chatgpt產生,但是要注意除非你是領域上的專家…
asm control flow grpah domator tree 要做靜態分析要找出相似的basic block想以肉眼進行判斷,我們進一步透過tarjan-algorithm找出支配樹的節點,意味者可以找到cfg裡面的loop. https://www.geeksforgeeks.org/tarjan-algorithm-find-strongly-connected-…
riscv asm compare viewer 既然能輸出svg向量檔,那麼對比當中的html是否有更方便的方式呢,來寫個html,主要對照vscode可以實現拖拉載入svg圖檔,以及卷軸同步功能,以便找出asm的不同. html Copy <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-…
Compare compiler versions python Copy """ Module containing main building blocks to parse assembly and draw CFGs. """ # from goto import with_goto import itertools from goto import with_goto…
walk asm call graph 改動後的asm2cfg大概可以直接接受objdump 直接輸出相對應的call graph 新增了svg的向量圖,增加了顏色判斷與no jump 和 jump 的顏色標記,增加了模糊搜尋走訪dfs 改動最多的地方還是能夠呈現asm 的 source code的部分,原理大概就是把comment當作inst,並給予address bash…
riscv-probe code Copy extern char _rodata_end; extern char _data_start; extern char _bss_end; #define KB (0x1 << 10) static uintptr_t uart_keys[] = { SIFIVE_UART0_CTRL_ADDR,…
rsicv asm2cfg 最近在研究disassembly 再找有沒有實際可以把asm轉成cfg的tool https://github.com/Kazhuu/asm2cfg 找到是找到了但是只支援single function 和x86 和 arm 唯一比較有印象的是以前的ida pro 今天下午有空來幫改一下, 在Development 他也有說到可以新建環境 https…
紀錄一下要切換特權模式要經過哪些步驟 https://ithelp.ithome.com.tw/articles/10301462 https://ithelp.ithome.com.tw/articles/10302200 http://rcore-os.cn/rCore-Tutorial-deploy/docs/lab-1/guide/part-2.html https:/…
mini-riscv-os vga https://gist.github.com/iamgreaser/15a0a81cd117d4efd1c47ce598c13c91 https://github.com/cccriscv/mini-riscv-os/tree/master/03-MultiTasking 找到一個riscv 的vga 驅動 記得bios 改為 no bio…
https://github.com/x213212/LLD_gbemu_wasm/ enable SharedArrayBuffer enable pthread c Copy #include "../include/common.h" #ifdef __EMSCRIPTEN__ #include <emscripten.h> #endif // TODO Add Wind…
run riscv_emulator in webassembly 之前看到gameboy 模擬器run在 瀏覽器上蠻新奇的,之前有寫過重新編譯ffmpeg 到 網頁這次也來編譯一下 https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasm 這邊有簡單起始 install emcc bash Copy git…
https://michaeljclark.github.io/isa.html https://github.com/x213212/riscv_emulator riscv_emulator 研讀一下riscv 架構的指令,找了一個模擬器來看實際要執行risc v指令內部會經過哪一些細節 create riscv 架構的 binary code Copy test.bin…
rust-riscv-os c to rust virtio-drivers lib callback https://learningos.github.io/rust-based-os-comp2022/chapter8/index.html https://zhuanlan.zhihu.com/p/344819263 https://avacariu.me/writing…
花了兩年在gcc plugin 構建一個靜態分析器. https://github.com/x213212/Static-analyzer-in-gccplugin Table of contents [toc] Introduction Use GCC PLUGIN to implement a static analyzer to help users detect mem…
linux ipc 很讚的筆記https://jasonblog.github.io/note/linux_system/linux_xia_ipc_de_yun_zuo_fang_shi.html https://hackmd.io/@sysprog/linux-shared-memory https://yayaya6d.pixnet.net/blog/post/35009…
mini-docker 最近看到docker 又看到了podman 突然想了解一下容器底層到底如何實現,整體步驟參考 https://coolshell.cn/articles/17010.html 還蠻清晰的,透過linux namespace最後可以看到用簡單的c語言就可以實現一個container 概念 code Copy #define _GNU_SOURCE #inc…
GCC 12 static analyzer 靜態分析器檢測流程,分析一下gcc12 目前檢測流程 Analyzer Internals https://gcc.gnu.org/onlinedocs/gccint/Analyzer-Internals.html debug gcc compiler code Copy sudo apt install gcc-multilib…
xv6 network-net 3 最近土法煉鋼完成三方交握的部分,沒錯這個實驗還在繼續,為了證明最初的概念是對的。 server 我們要完成的是三方交握的第一階段,也就是 bind - listening - accept 能不能節省掉這個步驟是可以的 當我把sockecvudp while 迴圈裡 if判斷是拿掉的當下就是變成所有流量只要有socket 監聽就可以直接回傳。…
xv6 network-net 2 5hr 這一次的trace 要結合前面的部分內容來推測,要完成一個 multi-process ping 改裝成 server bind listen 到底會經過那些步驟. 就已中斷來說我們網卡確實是可以接收封包 但是僅限於 udp 為了證明上一次的思考方向是對的我們嘗試構造一個tcp 連接,不知道會不寫到http server不過大致上可以…
xv6 network-net 快速記錄一下在xv6 system 上如果要實現一個網卡驅動大致上會經過哪一些環節,算是興趣的很想知道一個OS如何實現網卡連接外部設備我們直接跳最後一個lab來了解一下,這邊只是粗略分析,結合以前看的一些東西做一些聯想與總結,在某些部分可能有理解錯誤請見諒。 main.c 從 asm 一路跳轉過來 main,讓作業系統可以透過 c 語言去撰寫,中…
rebuild jetson kernel in tx1 https://blog.kevmo314.com/compiling-custom-kernel-modules-on-the-jetson-nano.html Build Kernel Follow these instructions to build and install the kernel image an…
dynamic memleak detect user-space https://zhuanlan.zhihu.com/p/133854805 https://ztex.medium.com/kprobe-%E7%AD%86%E8%A8%98-59d4bdb1e1fe 這幾篇文章有提出比較細節的架構,我這邊再順一次,補充一下一些基礎概念,總而言之,memleak.py 是如何…
dynamic memleak detect 最近在rathat上研究bpf看能不能往runtime 去做memleak free,其實可以去從中觀看出,在runtime 的時候,某些lib 或者funtion,實際是可以透過signal去重寫結束狀態,或許可以在程式退出的時候,徹底把memleak 給釋放。 https://github.com/iovisor/bcc/blo…
Timer 昨天的優化還是要繼續主要還是進行中斷加速的優化 調整為共用緩衝區 依照他的說法假設我們每次增加一個timer 是否都要為 timer 去增加一個 緩衝區 所以就提出了共用緩衝區的概念,那麼共用緩衝區會怎樣,會不會造成不知道是哪一個timer 發生的中斷 HariMain 調整前中斷判斷 c Copy if ( fifo8_status ( & keyfifo ) +…
Timer 要補足 timer 這樣才可以往任務切換前進,中間跳過一些 有關畫面和緩衝區的一些優化詳細可能要看書 今天要補充的就是,能不能透過 系統的 PIT "Programmable Interval Timer",讓我們透過設定 PIT 去控制中斷比如說每幾秒呼叫中斷一次IRQ0、這個功能用來計時或者固定時間用來呼叫 系統process 調度 很有用處(每幾秒切換到其他p…
30 Day os day 3 這幾天有點忙我們來把記憶體管理的基礎打好,接下來下一個地方可能會去研究不同任務的切換,有大致上讀過,linux kernel 0.11也是跟這個地方在不同任務的調度做不同的演算法,透過gtd 去動態切換 tss這邊,這邊看能不能直接幫這個作業系統改一些linux kernel 0.11 實驗上去 https://mooc.study.163.co…
30 Day os day 2 前一天,大概會涉及一些asm 和 background 一些基礎知識讀起來有點硬,我算抽取蠻多其他話,只讀引用的片段應該蠻好理解的 今天大概會往中斷的部分前,一路到滑鼠鍵盤控制和優化整個程式碼架構等等,讓程式可讀性比較好一點 結構化 文字顯示與 GDT/IDT 初始化 HariMain 跟之前的方式來比作者想用struct 來重新封裝 這些bio…
30 Day os day 1 這本書對於操作系統可以有基本的認識,想在暑假看能不能完成一下kernel,論文大致上已經在後半段兩年內業應該沒問題,暑假可以來玩一下別的東西但是對於因為本來想要學習一下linux kernel 0.11 目前有看一些原始碼,但是完成了一些Process 調度,和中斷的實驗 這邊參考 https://jasonblog.github.io/note…
Goodlock Deadlock detection 如何檢測有效的死鎖之前,我們要找到死鎖的路徑 https://zoomkoding.github.io/os/2019/05/28/deadlock-3.html 那麼什麼路徑才是有效的呢?? 當 Cycle 在一個 thread 中創建時 在上述情況下,cycle 是fake的,因為它在一個 thread 中創建。 想想…
pthread_created pthread_created 會發生 memory leak 的情況來探討 追程式碼 https://blog.csdn.net/hnwyllmm/article/details/45749063 這邊大部分解說的情況確實是正確的 我這邊再把他稍微精簡一下 https://blog.csdn.net/David_xtd/article/deta…
Raspberry build kernel virtualbox 最近跟 wsl2 要則一共存,來試用一下 Hyper-v 上次重編 kernel 開啟核心組態 BPF JIT Compiler 忘記紀錄一下,來重來一次 官方文檔案 https://www.raspberrypi.org/documentation/linux/kernel/building.md code…
前些天記錄了關於mtrace 一些東西 實驗室同學提到了一些方式,找到了切入 malloc 的一些方法,跟當初猜想的一樣動態攔截可能遇到這些情況可以透過加鎖的方式去達成攔截但是效率就不太敢保證了 http://firewof5566.blogspot.com/2015/04/mtrace3thread-safety.html https://stackoverflow.com/…
mtrace 如何在程式還沒跑完的時候用mtrace 攔截發生記憶體洩漏的問題呢 mtrace 就是去 hook malloc or free 的 function 的東西 嘗試了幾種方式,在編譯glibc 也就是 c語言 預設會去call function 的 library 主要就是在 有加鎖,預設我是要從原本的入口點 這邊修改的結果嘗試了很多方式, 主要是看能不能讓寫檔部…
ida pro use python plugin remote debuging 看了一下ida pro 原來是可以透過python plugin 的方式把組合語言轉成類似 c 語言的虛擬碼 步驟如下 環境是 windows 下 debug linux x64 elf 檔案 https://blog.csdn.net/weixin_26746861/article/detai…
上完編譯器,最後還要用 bison/flex 產生一個compiler,生成 mips 組合語言真的有趣 SPIM: A MIPS32 Simulator http://spimsimulator.sourceforge.net/ https://github.com/x213212/mipsgenerator test case c Copy WHILE () { int n…
上課聽到一個熟悉的CRC演算法,這跟以前寫外掛bypassCrc或許有關係!?,想說去GITHUB 搜尋一下 以前遊戲看有沒有私服,看一下以前 SERVER 是怎麼傳輸資料的剛好找到一個有BUG的不能啟動的私服,稍微升級一下 MYSQL,暫時註解掉其他的功能就可以改動了,目前好像只有流出有DEUBG資訊,算五年前的一個SERVER了,看到以前的人寫的code還蠻有趣的,可能工程…
嘗試修改專案為平行化測試 修改專案後位置 https://github.com/x213212/andersen 上次課堂作業 /2020/11/simple-llvm-pass-analysis.html 分析的專案 https://github.com/grievejia/andersen 在尋找可以開啟修改為平行化的地方,雖然後面改完了但是發現一個大bug 主要想法是 h…
shard library https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 https://aben20807…
gcc plugin 簡述 在網路上這部分的資訊非常的稀少,剛好有 https://zhuanlan.zhihu.com/p/49490338 假設要做分析的話我們首先要了解這個 plugin 是實作在哪一個階段,也就是 我們是實作在gcc compiler 的這個階段 就是我們中間層 ir的部分 加入我們額外新增的一些gcc 原生的 api 進行分析 https://code…
simple llvm pass analysis 分析一個專案 andersen 可以看到專案程式裡面可以知道透過分析IR 的來額外進行andersen分析,在上程式分析的課時候學習了如何效能,這個專案可以幫助我們很快速的熟悉如何在llvm 加上一層 pass,也可以在編譯時期階段經過CMAKE產生MAKEFILE檔,透過調整參數讓我們可以調整COMPILER,整個專案運作流…
最近在整理一些常用文章做一整個歸納比較清楚方便索引,再來整理過後會再改良我們的目前分布式架構補足並加強! 分布式调用链跟踪系统通常有几个设计目标 低侵入性 – 作为非业务组件,应当尽可能少侵入或者无侵入其他业务系统,对于使用方透明,减少开发人员的负担; 灵活的应用策略 – 可以(最好随时)决定所收集数据的范围和粒度; 时效性 – 从数据的收集和产生,到数据计算和处理,再到最终展…
可能是我的問題,或者是編譯器的問題, 或者組譯器問題 或者 虛擬機問題 在目前來說我發現在 cpu0 這個程式,我的input 是 code Copy sum = 0; for (i=0; i<=10; i++) { sum = sum + i; } return sum; 我拿去run 裡面的虛擬機 cpu.h? 好像會無窮迴圈我把暫存器印出來 發現裡面呼叫 defin…
實際上我們的編譯器要從高階語言 到 組合語言的過程 要經過 掃描器(Lexer) 剖析器(Parser) 語意分析 (Semantic Analysis) 中間碼產生 (P-code) 最佳化(Optimization) 產生組合語言 (Asm Generator) 那麼我們來跟蹤一下老師的程式碼,來看看整個流程大致上是如何 INPUT code Copy sum = 0; f…
https://github.com/programmermagazine/201306/blob/master/source/article5.md 作者是陳鐘誠老師,剛好也挖到了些原始碼 來小分析一下 程式好像也沒漏掉什麼,編譯環境還是 DEVC++ 剛好也跑得起來想說直接來針對這來分析一下,vscode 掛 GDB 好有點麻煩還有要配置檔以後有空弄 比較難得的是它裡面有寫…
cbc 編譯器 Compiler、詞法分析器 Lexical Analyzer、語法分析器 Parser 該來往這邊把基本知識補足,在看到 https://buzzorange.com/techorange/2020/01/21/coding-language-mulan-python/ 木蘭程式語言可能也是像 cbc 這種 基於高階語言實現的 二次complier 應該能更動…
最近要來研究一下compiler https://github.com/leungwensen/cbc-ubuntu-64bit cb是 基於 c語言的 簡化版,目前好像有看到cbc 編譯 cb 文件,看了官網也只有 make 檔,先來研究 看到了build.properties build.xml,makefile 裡面也有 ant 發現好像這部分的沒資料來幫忙補充一下 所以…
https://www.rabbitmq.com/which-erlang.html https://www.rabbitmq.com/which-erlang.html install erlang https://github.com/rabbitmq/erlang-rpm/releases/download/v22.0.7/erlang-22.0.7-1.el7.x86_…
常常發帖的話又會影響品質的問題,之前的日常debug 可能要縮減一下了,我們就來進行一整天的設定吧! 在安裝完windows10 內建的ubuntu我們來進行一些 內部的設定吧 弄完大概可以發現這畫面 再來安裝個pip
windows 預覽版安裝子系統是內建的,正式版的安裝多幾個步驟,這下子就不用用雙系統開來開去 先去控制台把子系統給開啟來 進來囉~
code Copy diskpart list disk select disk 0 list volume select volume 4 assign letter Z exit rd /s /q “Z:\EFI\” bootrec /fixboot bcdboot “C:\Windows” /l zh-tw /s Z: /f UEFI
安裝虛擬機到伺服器啟動 VM安裝與破解 vm沒有意外的話一直下一步就可以了安裝好了後他會要你輸入序號 把vm破解解壓縮 然後右鍵管理員模式開啟(這樣破解軟體才能取得你的真正硬碟序號 這組序號你安裝vm的時候會用到 好了之後呢 開啟你的vm 虛擬機設置 你們的會是空的所以點左上角檔案(file) new一個新的虛擬機 下一步 這時候他會問你 你的系統一開始要不要掛在iso檔,選第…
kali linux + windows + mac 在大一的時候呢 我做了一個夢然後過程呢我的雲端硬碟出現一個網址 好像疑似工具包 然後呢我裝 我電腦架構是ge60 2pe 我裝的時候呢 grub 是用Clover grub 四葉草 然後我設定主系統windows 灌在uefi 然後切到legacy 先灌kali linux 再切進去kali linux 做grub抹除動作好…