發表文章

目前顯示的是有「OSDev」標籤的文章

IPad Pro 生產力 邊看網頁 邊筆記

圖片
如何在ipad pro 邊看網頁 邊做筆記 (ipad os) Safari選取(標示)後就可以開使做筆記. 最後再選則存成pdf檔案,日後就可以用再複習編輯。

iPad pro 2020 寫程式可行嗎?

圖片
我是位韌體工程師,工作內容是開發Linux 、RTOS上驅動程式開發。 平常習慣用工具是VS code 與Vim,使用的是Macbook air,macOS是 Unix-like作業系統,要裝VIM, microcom, openOCD都相當容易。 今天要來試試iPad pro 2020 沒有巧鍵盤情況下,是否能來開發程式,為什麼不買巧鍵盤了因為iPad pro 2020 11吋定價是25900,再加上巧鍵盤就比Macbook air貴了。 我在Linux server上裝了VS code server版本,使用Safari 是可以正常的看Code,但是網頁版本的VS code對觸控的支援不佳,函數定義跳轉也不正常,最重要的是下方的shell 打開vim後,就……跳不出來啦XD 我想iPad pro在不用巧鍵盤的情況下,是不適合做韌體開發的,但是拿來看文件,做筆記確實是相當合適,可以在datasheet 文件直接用觸控筆做註解,配合note app使用,還可以分享給同事,相當的方便。

CMU buffer overflow attack作業筆記

圖片
三年前線上課程看到的,現在有空筆記一下,這是CMU的計算機組織課程的作業( https://www.cs.cmu.edu/~213/index.html ),應該是大二的課程。 作業可以在這邊載到( http://csapp.cs.cmu.edu/3e/labs.html ) 須要在x86–64的機器上執行.  作業給了一個有buffer overflow問題的程式bomb跟其原始碼bomb.c, 依難度大概有下面幾個層級 1.函數返回時利用buffer overflow去呼叫另一個不帶參數函數 2.函數返回時利用buffer overflow去呼叫另一個帶參數函數 3.利用buffer overflow去修改全域變數 4.最難的是利用buffer overflow去執行一段自己插入的程式(機器碼),然後要正常返回呼叫函數。 預備知識: 首先,先看x86–64 架構有什麼registers ,這邊 %rip:instruction pointer,用來指到下一個instruction的位置.  %rbp:Frame pointer,用來指到目前stack frame的開頭. %rsp:stack pointer,用來指到目前stack的top,也是尾巴。 sourece: Carnegie Mellon 1 Assembly and Bomb Lab 15-213: Introduction to Computer  x86的stack 是從高位往低位長的, 方向是rbp 往→ rsp ,caller呼叫函數時會把參數push(壓入)stack,接著呼叫函數,並把return的位址存在rbp+8的位置,接著把該含要用到的register值跟區域變數推入stack. 如下的程式Alpha呼叫Beta時,把引數23先推入stack,再呼叫Beta並先把返回位址推入stack. sourece: https://www.doc.ic.ac.uk/~herbert/teaching/CA05-Intel-5.pdf 題目一:函數返回時利用buffer overflow去呼叫另一個不帶參數函數 bomb程式有...

Raspberry Pi (ARMv6)上自幹一個微小作業系統

      大約半年前,我加入fb的F9 based JuluOS與黃敬群老師( Jserv) 成大嵌入式系統課程社團,我才發現原來台灣有那麼多人在研究作業系統開發,我也想試試開發一個小小的OS。      從0開始寫一個OS是相當有趣的過程,可以檢視自己對C、資料結構、作業系統、計算機組織的瞭解程度,誠實的面對自己,雖然自己在系統廠工作幾年了,還是很多基礎知識不足,也許這就是為什麼那麼多高手可以在ic design house,而我在系統廠吧,寫這個小OS,只是學習的開始,接下來我會多研究其它的OS,例如:xv6、F9 microkernel、freeRTOS...       我把開發流程一步一步記錄,從bare metal Helloworld,加入printk,配置MMU, IRQ中斷,記憶體管理(Buddy system),到最後加入system call、process fork與round robin scheduling,方便學習。        所有原始程式碼都放在github上:  https://github.com/tzuCarlos/RaspberryPi      我使用qmeu測試:      這邊有執行的結果: https://github.com/tzuCarlos/RaspberryPi/blob/master/mimiOS/RESULT      系統說明:         先拖稿一下,下班還要唸書,顧嬰兒很累的,改天有空補上一步步說明XD      未來工作:      1.把ARM的架構跟ARM組合語言弄熟。      2.系統memory map我還沒好好規畫,只是想到做什麼功能,就找一塊出來。      3. 沒有檔案系統,沒有shell、沒有驅動程式構架。       ...

自己動手做OS之Raspberry Pi interrupt example 筆記

圖片
Happy Chinese New Year!!  希望我年假,有更多時間好好學習作業系統...T_T 這是個學習筆記,還未整理好,看起來很亂,但是我會盡量把該注意的重點寫下。 Interrupt example Raspberry Pi source code: https://github.com/tzuCarlos/RaspberryPi/tree/master/labInterrupt 這範例中,我們使用timer 產生IRQ,執行時,可以看到,每隔一小段時間,就會印出IRQ_handler,在IRQ_handler()中,先關掉了IRQ再印出IRQ_handler,接著啟動IRQ,這是一個簡單的範例,但不是有效率的處理IRQ方式,以後我們來討論巢式中斷。 當IRQ發生時,硬體會自動跳到0x18的位址上去執行程式,但我們系統是掛在0x10000上,跳到0x18時並沒有東西,這時有幾個解決方式,1是利用mmu把0x18 mapping 至 0x10018上,或是設定CP15,跳轉到正確的中斷處理向量表上。 ARM的官方網站有很好說明,值得一看。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0203j/Cacbhjjj.html 以下是節錄  陳鐘誠老師的網站( http://sp1.wikidot.com/arm ) ------------------------------------------------------------------------------------------------------------------------- ARM 的可存取暫存器為 R0-R15,其中 R13為堆疊指標 SP (Stack Pointer),R14 為連結暫存器 LR (Link Register),R15 為程式計數器 PC (Program Counter)。 ARM的狀態暫存器有 CPSR (Current Processor Status Register) 與 SPSR (Saved Processor Status Register)。其中 SPSR 乃是在中斷時用來自動儲存CPS...

自己動手做OS之Raspberry Pi MMU initialization.

圖片
寫了一個簡單的bare metal啟動MMU的程式, 把實際位址0x20000000~0x210000000 對應到虛擬位址0xa0000000~0xa1000000 ARM MMU的部份在ARMv6之前跟之後的版本不同, 請看Technical Reference Manual。 Raspberry Pi MMU initialization example. hackpad note:https://lbd.hackpad.com/MMU-initialization-Jl8YoJ3iUdf source code:https://github.com/tzuCarlos/RaspberryPi/tree/master/labMMU 為什麼需要MMU? TODO:.... 頁表(page table)是由頁表項(page table entry, PTE)組成的 。 每一個PTE包含一段虛擬位址(page)映射到一段實體位址的資訊,而page的大小依ARM core版本不同,有不同的支持1K(tiny page), 4K(small page), 64k(large page), 1MB, 16MB。 page的大小決定了映射的粒度(granularity):  如果我們把page切1MB,那64MB的記憶體就需要64MB/1MB的PTE,每個PTE是32bits(4bytes),64x4=256bytes頁表項空間。4G就是4096x6=16384=16K 切1K,4K,64K需要用二級查表,1MB,64MB用一級查差,二級差表用途是縮小PTE,以減少佔用記憶體空間,但降底了尋址的效率。 16M的page叫super section, 1M的叫section。 L1表還有個名稱叫page directory entry(PDE)。 ARM 的位址轉換涉及底下三種位址[1]: 虛擬位址 (Virtual Address,VA): CPU 送出的位址。 修改後的虛擬位址 (Modified Virtual Address,MVA): 快取和 MMU 看到的是 MVA。 物理位址 (Physical Address,PA): 內存看到的是 PA。 ...