CATEGORY

Systems, OS & Compilers

75 posts

掌機上的原生 YouTube

上一篇 講的是把 RG40XX V 的面板點亮。畫面出來之後,問題就換了一批:這台機器 能拿來做什麼 。 這一輪做完的是一個 原生 YouTube 客戶端 ,外加一串各自獨立的修正。分開講。 為什麼是原生,不是塞一個瀏覽器 第一版走的是 Web:stock Cog/WPE 跑手機版 YouTube。它能開,但在 H700 上瀏覽本身就是 FAIL,而且整條路徑要拖進一個完整的瀏…

Systems, OS & CompilersEmbedded, IoT & Hardware
啟動器的應用程式分頁,YouTube 磚塊在選取狀態;上排是最近遊玩、遊戲庫、RPG、串流、網路等分頁

RG40XX V mainline kernel

Anbernic RG40XX V 是一台 Allwinner H700 的掌機,出廠跑廠商的 BSP kernel。我想讓它跑 mainline Linux 7.2 。 起因很單純:想要串流玩得順、想跑 RPG Maker 的遊戲。結果擋在路上的是 顯示 。 問題不是「還沒支援」,是「亮不起來」 Linux 7.2 本來就能在 H700 上開機,device tree 也涵蓋…

Systems, OS & CompilersEmbedded, IoT & Hardware
啟動器在裝置上執行:由 mainline 顯示堆疊算圖的遊戲清單畫面

vibeos

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…

Systems, OS & CompilersDevOps & Cloud
vibeos

build self os in riscv

build self os in riscv 很久沒更新,最近看到TempleOS, 今天早上無聊來將之前的專案進行合併,新增了lwip wget 下載檔案,預計想要再將這個os再多一個vga的瀏覽器,感覺用NetSurf 渲染都Ok,應該可以在目前的os進行上網,新增了檔案系統,和鍵盤滑鼠硬碟vga驅動 修掉了context switch bug , 使用vga去繪製os的圖…

Systems, OS & Compilers
image

QEMU 在 RISC-V 上跑 Ubuntu

QEMU 在 RISC-V 上跑 Ubuntu 本筆記整合完整步驟與實驗心得,全部放在同一份,方便直接複製執行。涵蓋 QEMU + Ubuntu 啟動、QEMU / OpenSBI / U-Boot 最後正確編譯版本、網路/SSH、共享、NFS/CIFS/SSHFS、CoreMark 編譯、常見錯誤對應。 安裝必要套件: bash Copy sudo apt update su…

Systems, OS & Compilers
QEMU 在 RISC-V 上跑 Ubuntu

qemu virtio net lwip

qemu virtio net lwip 整個改動在這個commit 實現 https://github.com/x213212/mini-riscv-os/commit/64d82fd26d69ecdd1985264ac2261d8a8919f46a 研究一下怎麼在 qemu 裡面新增一張 virtio 網卡並註冊到 lwip,使用一些常見的協議 這邊要讓 qemu 網卡收到…

Systems, OS & Compilers
qemu virtio net lwip

研究qemu內部機制與監控指令狀態

研究qemu內部機制與監控指令狀態 如果想理解一個指令級架構整個指令指行前和執行後的狀態,我最想知道的是每一行指令執行前和執行後的register的狀態和,整個cpu 記憶體的狀態這是我比較感興趣的,所以大概研究了一下qemu 有發現其實可以透過plugin 的方式去攔截qemu 指令執行過程中的info ,大概需要幾點,第一假設我指令級架構是 riscv 但是他要跑在x86上…

Systems, OS & Compilers
研究qemu內部機制與監控指令狀態

Modify the gcc plugin to detect linklist memory leaks

Modify the gcc plugin to detect linklist memory leaks 最近又開始在看以前專案把想做的東西做完整,在以前檢測記憶體洩漏的時候有發現在linklist的部分memory leak好像沒有找到相對應的gimple 所以那大概新增這個 type就可以了 https://github.com/x213212/Static-analyz…

Systems, OS & Compilers
Modify the gcc plugin to detect linklist memory leaks

大概分析 gdbserver 原理

大概分析 gdbserver 原理 這次來研究一下 gdbserver https://github.com/bet4it/gdbserver.git https://github.com/trixirt/deebe 簡單來說 gdbserver 工作原理就是透過ptrace 去控制 process 的動作 在main 可以看到 這邊會透過 get_request 來持續查看是…

Systems, OS & Compilers
大概分析 gdbserver 原理

Load Binary to Shared Memory Using GDB

Load Binary to Shared Memory Using GDB 最近在研究 gdbserver 順便驗證一些東西 應該說在 bare metal 情況下,gdb load 應該會把binary load 到記憶體位置,在riscv 看蠻多的但是在x86是否可以這樣模擬透過gdb的load 將 程式碼load 到指定位置 create memory area cod…

Systems, OS & Compilers
Load Binary to Shared Memory Using GDB

elf diff call graph

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…

Systems, OS & Compilers
elf diff call graph

Study ASLi

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…

Systems, OS & Compilers
Study ASLi

Try to find the redundant area with the Python gdb (riscv)

Try to find the redundant area with the Python gdb (riscv) 大概想統計出某個區域內的pc address所使用的 register 的使用次數與alias的register,和記錄所有regiser 在某個區域內的所有regiser的 狀態,先假設相同compiler來說在編譯加了某些option 導致某段code做不好…

Systems, OS & Compilers
Try to find the redundant area with the Python gdb (riscv)

觀察gcc rtl合成

在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…

Systems, OS & Compilers
觀察gcc rtl合成

trace gdb source code

trace gdb 最近在看能不能在gdb攔截一些有關於runtime的程式的pc address ,gdb背後底層原理是ptrace,大概從各個檔案裏面去埋print(printf_unfiltered (("hello\n"));),來稍微紀錄一下 arch arch 資料夾存放的是有關於指令架構的一些function也就是當觸發斷點時候可以透過不同的arch將不同的reg…

Systems, OS & Compilers
trace gdb source code

linux hook record

linux hook 之前有分享 linux hook的方式,包括ld_preload,目前有個情況需要額外override 原本的某個function在linux 環境,這邊記錄一下可行方案 lief https://github.com/lief-project/LIEF code Copy pip install lief 如果採用直接修改elf 是否有可能直接hook…

Systems, OS & Compilers
linux hook record

rewrite llvm pass inline/unroll loop pass

custom llvm pass inline / unrol loop pass 最近有空更新一下,如果要異動llvm 內部的pass應該從哪裡下手呢 Writing an LLVM Pass — LLVM 16.0.0git documentation 這邊可以大概看到一些架構,不過我們要在llvm10達成pass的修改,根據我們的需求任意的對某個fucntion 進行in…

Systems, OS & Compilers
rewrite llvm pass inline/unroll loop pass

custom gcc plugin rtl unroll loop ,inline pass

gcc plugin 補足之前,影響fucntion 是否inline 版本,額外新增了可以影響unroll loop rtl層 pass的撰寫,這邊一併附上 這次比較特別趕上了chatgtp,rtl pass 這部分語法都是透過chatgpt幫助下進行撰寫,基本上不當機的情況下都快變成google 2.0了,包括這個文章都是用chatgpt產生,但是要注意除非你是領域上的專家…

Systems, OS & Compilers
custom gcc plugin rtl unroll loop ,inline pass

riscv asm control flow graph find loop

asm control flow grpah domator tree 要做靜態分析要找出相似的basic block想以肉眼進行判斷,我們進一步透過tarjan-algorithm找出支配樹的節點,意味者可以找到cfg裡面的loop. https://www.geeksforgeeks.org/tarjan-algorithm-find-strongly-connected-…

Systems, OS & Compilers
riscv asm control flow graph find loop

riscv asm compare viewer

riscv asm compare viewer 既然能輸出svg向量檔,那麼對比當中的html是否有更方便的方式呢,來寫個html,主要對照vscode可以實現拖拉載入svg圖檔,以及卷軸同步功能,以便找出asm的不同. html Copy <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-…

Systems, OS & Compilers
riscv asm compare viewer

walk asm call graph

walk asm call graph 改動後的asm2cfg大概可以直接接受objdump 直接輸出相對應的call graph 新增了svg的向量圖,增加了顏色判斷與no jump 和 jump 的顏色標記,增加了模糊搜尋走訪dfs 改動最多的地方還是能夠呈現asm 的 source code的部分,原理大概就是把comment當作inst,並給予address bash…

Systems, OS & Compilers
walk asm call graph

riscv asm2cfg

rsicv asm2cfg 最近在研究disassembly 再找有沒有實際可以把asm轉成cfg的tool https://github.com/Kazhuu/asm2cfg 找到是找到了但是只支援single function 和x86 和 arm 唯一比較有印象的是以前的ida pro 今天下午有空來幫改一下, 在Development 他也有說到可以新建環境 https…

Systems, OS & Compilers
riscv asm2cfg

mini-riscv-os vga

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…

Systems, OS & Compilers
mini-riscv-os vga

study riscv_emulator

https://michaeljclark.github.io/isa.html https://github.com/x213212/riscv_emulator riscv_emulator 研讀一下riscv 架構的指令,找了一個模擬器來看實際要執行risc v指令內部會經過哪一些細節 create riscv 架構的 binary code Copy test.bin…

Systems, OS & Compilers
study riscv_emulator

linux ipc

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…

Systems, OS & Compilers
linux ipc

linux namespace 實現小型container

mini-docker 最近看到docker 又看到了podman 突然想了解一下容器底層到底如何實現,整體步驟參考 https://coolshell.cn/articles/17010.html 還蠻清晰的,透過linux namespace最後可以看到用簡單的c語言就可以實現一個container 概念 code Copy #define _GNU_SOURCE #inc…

Systems, OS & Compilers
linux namespace 實現小型container

RISC-V XV6 不依靠lib 完成 3 way handshake

xv6 network-net 3 最近土法煉鋼完成三方交握的部分,沒錯這個實驗還在繼續,為了證明最初的概念是對的。 server 我們要完成的是三方交握的第一階段,也就是 bind - listening - accept 能不能節省掉這個步驟是可以的 當我把sockecvudp while 迴圈裡 if判斷是拿掉的當下就是變成所有流量只要有socket 監聽就可以直接回傳。…

Systems, OS & Compilers
RISC-V XV6 不依靠lib 完成 3 way handshake

RISC-V XV6 LAB-NET2 network device 大致概念

xv6 network-net 2 5hr 這一次的trace 要結合前面的部分內容來推測,要完成一個 multi-process ping 改裝成 server bind listen 到底會經過那些步驟. 就已中斷來說我們網卡確實是可以接收封包 但是僅限於 udp 為了證明上一次的思考方向是對的我們嘗試構造一個tcp 連接,不知道會不寫到http server不過大致上可以…

Systems, OS & Compilers
RISC-V XV6 LAB-NET2 network device 大致概念

RISC-V XV6 LAB-NET network device

xv6 network-net 快速記錄一下在xv6 system 上如果要實現一個網卡驅動大致上會經過哪一些環節,算是興趣的很想知道一個OS如何實現網卡連接外部設備我們直接跳最後一個lab來了解一下,這邊只是粗略分析,結合以前看的一些東西做一些聯想與總結,在某些部分可能有理解錯誤請見諒。 main.c 從 asm 一路跳轉過來 main,讓作業系統可以透過 c 語言去撰寫,中…

Systems, OS & Compilers
RISC-V XV6 LAB-NET network device

30 DAY os Timer(二)

Timer 昨天的優化還是要繼續主要還是進行中斷加速的優化 調整為共用緩衝區 依照他的說法假設我們每次增加一個timer 是否都要為 timer 去增加一個 緩衝區 所以就提出了共用緩衝區的概念,那麼共用緩衝區會怎樣,會不會造成不知道是哪一個timer 發生的中斷 HariMain 調整前中斷判斷 c Copy if ( fifo8_status ( & keyfifo ) +…

Systems, OS & Compilers
30 DAY os Timer(二)

30 DAY os Timer(一)

Timer 要補足 timer 這樣才可以往任務切換前進,中間跳過一些 有關畫面和緩衝區的一些優化詳細可能要看書 今天要補充的就是,能不能透過 系統的 PIT "Programmable Interval Timer",讓我們透過設定 PIT 去控制中斷比如說每幾秒呼叫中斷一次IRQ0、這個功能用來計時或者固定時間用來呼叫 系統process 調度 很有用處(每幾秒切換到其他p…

Systems, OS & Compilers
30 DAY os Timer(一)

30 DAY os Memory Manager

30 Day os day 3 這幾天有點忙我們來把記憶體管理的基礎打好,接下來下一個地方可能會去研究不同任務的切換,有大致上讀過,linux kernel 0.11也是跟這個地方在不同任務的調度做不同的演算法,透過gtd 去動態切換 tss這邊,這邊看能不能直接幫這個作業系統改一些linux kernel 0.11 實驗上去 https://mooc.study.163.co…

Systems, OS & Compilers
30 DAY os Memory Manager

30 DAY os Interrupt

30 Day os day 2 前一天,大概會涉及一些asm 和 background 一些基礎知識讀起來有點硬,我算抽取蠻多其他話,只讀引用的片段應該蠻好理解的 今天大概會往中斷的部分前,一路到滑鼠鍵盤控制和優化整個程式碼架構等等,讓程式可讀性比較好一點 結構化 文字顯示與 GDT/IDT 初始化 HariMain 跟之前的方式來比作者想用struct 來重新封裝 這些bio…

Systems, OS & Compilers
30 DAY os Interrupt

30 DAY os helloword os

30 Day os day 1 這本書對於操作系統可以有基本的認識,想在暑假看能不能完成一下kernel,論文大致上已經在後半段兩年內業應該沒問題,暑假可以來玩一下別的東西但是對於因為本來想要學習一下linux kernel 0.11 目前有看一些原始碼,但是完成了一些Process 調度,和中斷的實驗 這邊參考 https://jasonblog.github.io/note…

Systems, OS & Compilers
30 DAY os helloword os

Goodlock Deadlock detection

Goodlock Deadlock detection 如何檢測有效的死鎖之前,我們要找到死鎖的路徑 https://zoomkoding.github.io/os/2019/05/28/deadlock-3.html 那麼什麼路徑才是有效的呢?? 當 Cycle 在一個 thread 中創建時 在上述情況下,cycle 是fake的,因為它在一個 thread 中創建。 想想…

Systems, OS & Compilers
Goodlock Deadlock detection

pthread_created 追蹤 與防止 memory leak

pthread_created pthread_created 會發生 memory leak 的情況來探討 追程式碼 https://blog.csdn.net/hnwyllmm/article/details/45749063 這邊大部分解說的情況確實是正確的 我這邊再把他稍微精簡一下 https://blog.csdn.net/David_xtd/article/deta…

Systems, OS & Compilers
pthread_created 追蹤 與防止 memory leak

build linux kernel ebpf version

Raspberry build kernel virtualbox 最近跟 wsl2 要則一共存,來試用一下 Hyper-v 上次重編 kernel 開啟核心組態 BPF JIT Compiler 忘記紀錄一下,來重來一次 官方文檔案 https://www.raspberrypi.org/documentation/linux/kernel/building.md code…

Systems, OS & Compilers
build linux kernel ebpf version

trace memory using ebpf script

前些天記錄了關於mtrace 一些東西 實驗室同學提到了一些方式,找到了切入 malloc 的一些方法,跟當初猜想的一樣動態攔截可能遇到這些情況可以透過加鎖的方式去達成攔截但是效率就不太敢保證了 http://firewof5566.blogspot.com/2015/04/mtrace3thread-safety.html https://stackoverflow.com/…

Systems, OS & Compilers
trace memory using ebpf script

mtrace runtime output

mtrace 如何在程式還沒跑完的時候用mtrace 攔截發生記憶體洩漏的問題呢 mtrace 就是去 hook malloc or free 的 function 的東西 嘗試了幾種方式,在編譯glibc 也就是 c語言 預設會去call function 的 library 主要就是在 有加鎖,預設我是要從原本的入口點 這邊修改的結果嘗試了很多方式, 主要是看能不能讓寫檔部…

Systems, OS & Compilers
mtrace runtime output

mips Generator

上完編譯器,最後還要用 bison/flex 產生一個compiler,生成 mips 組合語言真的有趣 SPIM: A MIPS32 Simulator http://spimsimulator.sourceforge.net/ https://github.com/x213212/mipsgenerator test case c Copy WHILE () { int n…

Systems, OS & Compilers
mips Generator

Crc checker

上課聽到一個熟悉的CRC演算法,這跟以前寫外掛bypassCrc或許有關係!?,想說去GITHUB 搜尋一下 以前遊戲看有沒有私服,看一下以前 SERVER 是怎麼傳輸資料的剛好找到一個有BUG的不能啟動的私服,稍微升級一下 MYSQL,暫時註解掉其他的功能就可以改動了,目前好像只有流出有DEUBG資訊,算五年前的一個SERVER了,看到以前的人寫的code還蠻有趣的,可能工程…

Systems, OS & CompilersBackend & Distributed Systems
Crc checker

嘗試修改專案為平行化測試

嘗試修改專案為平行化測試 修改專案後位置 https://github.com/x213212/andersen 上次課堂作業 /2020/11/simple-llvm-pass-analysis.html 分析的專案 https://github.com/grievejia/andersen 在尋找可以開啟修改為平行化的地方,雖然後面改完了但是發現一個大bug 主要想法是 h…

Systems, OS & Compilers
嘗試修改專案為平行化測試

OpenMp shard libraries link

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…

Systems, OS & Compilers
OpenMp shard libraries link

simple gcc plugin analysis

gcc plugin 簡述 在網路上這部分的資訊非常的稀少,剛好有 https://zhuanlan.zhihu.com/p/49490338 假設要做分析的話我們首先要了解這個 plugin 是實作在哪一個階段,也就是 我們是實作在gcc compiler 的這個階段 就是我們中間層 ir的部分 加入我們額外新增的一些gcc 原生的 api 進行分析 https://code…

Systems, OS & Compilers
simple gcc plugin analysis

simple llvm pass analysis

simple llvm pass analysis 分析一個專案 andersen 可以看到專案程式裡面可以知道透過分析IR 的來額外進行andersen分析,在上程式分析的課時候學習了如何效能,這個專案可以幫助我們很快速的熟悉如何在llvm 加上一層 pass,也可以在編譯時期階段經過CMAKE產生MAKEFILE檔,透過調整參數讓我們可以調整COMPILER,整個專案運作流…

Systems, OS & Compilers
simple llvm pass analysis

常用分布式追蹤整理

最近在整理一些常用文章做一整個歸納比較清楚方便索引,再來整理過後會再改良我們的目前分布式架構補足並加強! 分布式调用链跟踪系统通常有几个设计目标 低侵入性 – 作为非业务组件,应当尽可能少侵入或者无侵入其他业务系统,对于使用方透明,减少开发人员的负担; 灵活的应用策略 – 可以(最好随时)决定所收集数据的范围和粒度; 时效性 – 从数据的收集和产生,到数据计算和处理,再到最终展…

Systems, OS & CompilersDevOps & Cloud
常用分布式追蹤整理

針對虛擬機一次的分析

可能是我的問題,或者是編譯器的問題, 或者組譯器問題 或者 虛擬機問題 在目前來說我發現在 cpu0 這個程式,我的input 是 code Copy sum = 0; for (i=0; i<=10; i++) { sum = sum + i; } return sum; 我拿去run 裡面的虛擬機 cpu.h? 好像會無窮迴圈我把暫存器印出來 發現裡面呼叫 defin…

Systems, OS & Compilers
針對虛擬機一次的分析

針對編譯器一次分析

實際上我們的編譯器要從高階語言 到 組合語言的過程 要經過 掃描器(Lexer) 剖析器(Parser) 語意分析 (Semantic Analysis) 中間碼產生 (P-code) 最佳化(Optimization) 產生組合語言 (Asm Generator) 那麼我們來跟蹤一下老師的程式碼,來看看整個流程大致上是如何 INPUT code Copy sum = 0; f…

Systems, OS & Compilers
針對編譯器一次分析

針對組譯器一次分析

https://github.com/programmermagazine/201306/blob/master/source/article5.md 作者是陳鐘誠老師,剛好也挖到了些原始碼 來小分析一下 程式好像也沒漏掉什麼,編譯環境還是 DEVC++ 剛好也跑得起來想說直接來針對這來分析一下,vscode 掛 GDB 好有點麻煩還有要配置檔以後有空弄 比較難得的是它裡面有寫…

Systems, OS & Compilers
針對組譯器一次分析

研究 cb compiler (二) 更改 FOR 與 INT STMT

cbc 編譯器 Compiler、詞法分析器 Lexical Analyzer、語法分析器 Parser 該來往這邊把基本知識補足,在看到 https://buzzorange.com/techorange/2020/01/21/coding-language-mulan-python/ 木蘭程式語言可能也是像 cbc 這種 基於高階語言實現的 二次complier 應該能更動…

Systems, OS & Compilers
研究 cb compiler (二) 更改 FOR 與 INT STMT

研究 cb compiler (一) 編譯 net/loveruby/cflat/ package

最近要來研究一下compiler https://github.com/leungwensen/cbc-ubuntu-64bit cb是 基於 c語言的 簡化版,目前好像有看到cbc 編譯 cb 文件,看了官網也只有 make 檔,先來研究 看到了build.properties build.xml,makefile 裡面也有 ant 發現好像這部分的沒資料來幫忙補充一下 所以…

Systems, OS & Compilers
研究 cb compiler (一) 編譯 net/loveruby/cflat/ package

Windows10 Ubuntu Setting

常常發帖的話又會影響品質的問題,之前的日常debug 可能要縮減一下了,我們就來進行一整天的設定吧! 在安裝完windows10 內建的ubuntu我們來進行一些 內部的設定吧 弄完大概可以發現這畫面 再來安裝個pip

Systems, OS & Compilers
Windows10 Ubuntu Setting

安裝虛擬機到伺服器啟動

安裝虛擬機到伺服器啟動 VM安裝與破解 vm沒有意外的話一直下一步就可以了安裝好了後他會要你輸入序號 把vm破解解壓縮 然後右鍵管理員模式開啟(這樣破解軟體才能取得你的真正硬碟序號 這組序號你安裝vm的時候會用到 好了之後呢 開啟你的vm 虛擬機設置 你們的會是空的所以點左上角檔案(file) new一個新的虛擬機 下一步 這時候他會問你 你的系統一開始要不要掛在iso檔,選第…

Systems, OS & Compilers
安裝虛擬機到伺服器啟動

三系統共存之謎

kali linux + windows + mac 在大一的時候呢 我做了一個夢然後過程呢我的雲端硬碟出現一個網址 好像疑似工具包 然後呢我裝 我電腦架構是ge60 2pe 我裝的時候呢 grub 是用Clover grub 四葉草 然後我設定主系統windows 灌在uefi 然後切到legacy 先灌kali linux 再切進去kali linux 做grub抹除動作好…

Systems, OS & Compilers
三系統共存之謎