發表文章

目前顯示的是 2月, 2026的文章

解決Windows開機卡在歡迎畫面過久的問題

這個問題困擾著我許久,但是就這樣用了三年一直沒去研究如何解決,症狀就是開機登入後,會在歡迎畫面轉圈圈,大概等個3~5分鐘,甚至十多分鐘才能進桌面使用。看了一些資料,似乎是Windows進入桌面前會先掃描一次"C:\Users\user_name\AppData\Local\Temp",若是Temp資料夾內容很龐大,或是非常多小檔案,那就會花很久的時間。 解決方法,就是把"C:\Users\user_name\AppData\Local\Temp"這個目錄刪掉,重新開機測試,馬上就解決了。當然,保險起見是先把Temp這個資料夾改名,例如改名成Temp_bk,有問題還能夠改回去復原。 參考資料: https://www.reddit.com/r/Windows10/comments/nnkocz/login_get_stuck_at_welcome_screen_for_a_long_time/

NUC1263 LLSIClock開發筆記:LLSI與PDMA搭配使用

圖片
DMA是什麼? DMA的全稱叫做Direct Memory Access,「直接記憶體存取」。它可以直接根據使用者設定的來源位址、目標位址、長度等,直接搬移記憶體中的資料,而不用CPU的介入,幫CPU分攤一些反覆搬移的事情。尤其在搬移大量資料時,或者一些CPU負載重的應用情境之下,藉由DMA的幫忙可以顯著提高系統整體的效能。 在計算機系統中,CPU之外的硬體周邊裝置也經常會映射在一些記憶體位址中,讓使用者能像讀寫記憶體般,輕易地操作它們,稱作Memory-mapped IO。因此DMA也可以搬移硬體周邊裝置的資料。 PDMA是什麼? 不過在微控制器的應用中,資料的搬移往往需要根據周邊裝置的狀態同步。DMA前面加了一個P就是Peripheral Direct Memory Access,意即可以經由硬體周邊裝置產生的事件當成是DMA的傳輸請求,直接觸發DMA傳輸。 以這次的NUC1263為例,LLSI硬體提供了深度4-word (16-byte)的FIFO buffer,是在FIFO有足夠空間時,由LLSI硬體產生信號直接向PDMA發送傳輸請求,依序將整個Frame buffer傳輸完畢,期間就不需要CPU介入該過程。 使用PDMA的好處 透過硬體產生的事件,直接將資料搬移的任務交給PDMA,而非反覆讓CPU進中斷服務程式搬移資料,把CPU的資源留給那些真正需要運算的程式。 讓我們開始看看LLSI+PDMA的程式吧! 基於上一篇文章「運用指標提高LLSI Frame Buffer的可讀性、易用性」的程式下去修改成PDMA傳輸的版本,主要留意下面這些內容。 要記得在SYS_Init()中開啟LLSI和PDMA的clock LLSI_Open()要將工作模式設為LLSI_MODE_PDMA 首先在SYS_Init()中除了LLSI之外還要記得開啟PDMA的clock。 /* Enable LLSI0 module clock */ CLK_EnableModuleClock(LLSI0_MODULE); /* Enable PDMA peripheral clock */ CLK_EnableModuleClock(PDMA_MODULE); PDMA_Init()的部分,我使用PDMA Channel...

一次成功!Windows在WSL中建立EDK2環境

圖片
相信許多BIOS工程師,特別是Module Team或者是業餘愛好者,都會有架EDK2環境的需求。這邊就來介紹,我是怎麼在Windows 裡面架環境的。 歸功於WSL,現在在Windows中架各種環境,也適用Linux的方法,這通常比Windows的方法容易許多。WSL全名為Windows Subsystem for Linux,可以把它想像成是一個虛擬機,由於是Microsoft Windows 10、11原生提供的功能,就連kernel似乎都是專為Windows重新編譯過的,運作起來相當地高效。如何安裝WSL? 基本上照著微軟的文件,應該沒什麼困難。 https://learn.microsoft.com/zh-tw/windows/wsl/install 我自己是慣用Debian,安裝完畢以後,就會獲得一個CLI的Linux。同樣地,也可以在VS Code中的Terminal,開啟WSL。 接著就是安裝EDK2相關的工具了,除了Make和GCC (包含在build-essential裡面),還要安裝nasm和iasl,以及uuid-dev。 sudo apt install build-essential nasm iasl uuid-dev EDK2許多工具使用Python撰寫,build過程亦會使用到Python,這邊避免相容性問題,固定使用Python 3.8.5。由於各Linux發行版提供的Python版本不一定相同,所以這邊是直接下載Python的source code來編譯。當然,多數情況用apt install python3也是可以的。 cd ~/ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz tar xvf Python-3.8.5.tar.xz cd Python-3.8.5/ ./configure --enable-optimizations make 接下來就是把EDK2 clone下來,切換到stable release,然後把submodule也clone下來。 git clone https://github.com/tianocore/edk2.git cd edk2 git checkout edk2-stable20251...